{ "info": { "author": "HBQA", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.6" ], "description": "

Lyrebird - BugIt plugin

\n\n[![Build Status](https://travis-ci.org/Meituan-Dianping/lyrebird-bugit.svg?branch=master)](https://travis-ci.org/Meituan-Dianping/lyrebird-bugit)\n[![PyPI](https://img.shields.io/pypi/v/lyrebird-bugit.svg)](https://pypi.python.org/pypi/lyrebird-bugit)\n![PyPI](https://img.shields.io/pypi/pyversions/lyrebird-bugit.svg)\n![GitHub](https://img.shields.io/github/license/meituan-dianping/lyrebird-bugit.svg)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/89854dfac65d4cde9efaebcc6b3845c6)](https://www.codacy.com/manual/dodosophia/lyrebird-bugit?utm_source=github.com&utm_medium=referral&utm_content=Meituan-Dianping/lyrebird-bugit&utm_campaign=Badge_Grade)\n[![Total alerts](https://img.shields.io/lgtm/alerts/g/Meituan-Dianping/lyrebird-bugit.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Meituan-Dianping/lyrebird-bugit/alerts/)\n[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/Meituan-Dianping/lyrebird-bugit.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Meituan-Dianping/lyrebird-bugit/context:python)\n\n\n**[Lyrebird](https://github.com/Meituan-Dianping/lyrebird)**\n\u662f\u4e00\u4e2a\u57fa\u4e8e\u62e6\u622a\u4ee5\u53ca\u6a21\u62dfHTTP/HTTPS\u7f51\u7edc\u8bf7\u6c42\u7684\u9762\u5411\u79fb\u52a8\u5e94\u7528\u7684\u63d2\u4ef6\u5316\u6d4b\u8bd5\u5e73\u53f0\u3002\n\n**BugIt plugin\u662f\u4e00\u4e2aLyrebird\u7684\u63d2\u4ef6\uff0c\u7528\u4e8e\u6c47\u603bLyrebird\u5404\u63d2\u4ef6\u4fe1\u606f\uff0c\u63d0\u4ea4Bug\u3002**\n\n----\n\n# \u7b80\u4ecb\nBugIt\u662f\u4e00\u4e2a[Lyrebird](https://github.com/Meituan-Dianping/lyrebird)\u63d2\u4ef6\u3002\n\n\u901a\u8fc7BugIt\u53ef\u4ee5\u8f7b\u677e\u7684\u5c06Lyrebird\u4e2d\u6536\u96c6\u7684\u4eba\u673a\u4ea4\u4e92\u6570\u636e\u4f5c\u4e3a\u63cf\u8ff0\u6216\u8005\u9644\u4ef6\u63d0\u4ea4\u5230Bug\u7ba1\u7406\u7cfb\u7edf\u4e2d(\u5982JIRA)\u3002\n\n\u4e0e[\u68c0\u67e5\u5668](https://meituan-dianping.github.io/lyrebird/guide/checker.html#%E8%BD%BD%E5%85%A5%E6%A3%80%E6%9F%A5%E5%99%A8)(Checker)\u7ed3\u5408\uff0c\u5373\u53ef\u5b9e\u73b0\u4e00\u952e\u63d0\u4ea4bug\u7684\u529f\u80fd\u3002\n\n# \u5feb\u901f\u5f00\u59cb\n## \u73af\u5883\u8981\u6c42\n\n- macOS OR Linux\n\n- Python3.6\u53ca\u4ee5\u4e0a\n\n- Lyrebird 1.6\u53ca\u4ee5\u4e0a\n## \u5b89\u88c5\n\n```bash\npip3 install lyrebird-bugit\n```\n\n## \u542f\u52a8\n\n```bash\nlyrebird\n```\n\n# \u529f\u80fd\u4ecb\u7ecd\n\n## Bug\u63d0\u4ea4\n\u8bfb\u53d6\u811a\u672c\u6587\u4ef6\u540e\uff0cBugIt\u4f1a\u5f97\u5230\u4e00\u4e2aBug\u4fe1\u606f\u586b\u5145\u7684\u754c\u9762\uff0c\u79f0\u4e4b\u4e3aBug\u8868\u5355\u3002\n\n\u7528\u6237\u53ef\u4ee5\u81ea\u5b9a\u4e49Bug\u5b57\u6bb5\u7684 \u540d\u79f0\u3001\u5148\u540e\u987a\u5e8f\u3001\u586b\u5199\u6837\u5f0f\u3001\u9ed8\u8ba4\u503c\u3002\n\n![\bBug\u8868\u5355](./image/bugit_bug.png)\n\nBugIt\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u670d\u52a1\u5411\u4efb\u610fBug\u7ba1\u7406\u7cfb\u7edf\u63d0\u4ea4Issue\n\n## API\u6570\u636e\u83b7\u53d6\nBugIt\u652f\u6301\u81ea\u52a8\u586b\u5145Lyrebird\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u6293\u53d6\u5230\u7684\u6570\u636e\u4fe1\u606f\u3002\n\n![BugIt \u83b7\u53d6API\u4fe1\u606f](./image/bugit_api.gif)\n\n## \u62a5\u8b66\u83b7\u53d6\n\n\u5728[\u68c0\u67e5\u5668](https://meituan-dianping.github.io/lyrebird/guide/checker.html#\u8f7d\u5165\u68c0\u67e5\u5668)([Checker](https://meituan-dianping.github.io/lyrebird/guide/checker.html#\u8f7d\u5165\u68c0\u67e5\u5668))\u6355\u83b7\u62a5\u8b66\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u901a\u77e5\u4e2d\u5fc3\u968f\u65f6\u8df3\u8f6c\u81f3BugIt\u3002\n\n\u5728\u53f3\u4fa7\u6570\u636e\u9762\u677f\u4e2d\uff0c\u53ef\u4ee5\u5bf9\u5386\u53f2[\u6d88\u606f\u603b\u7ebf](/advance/eventbus.md)\u4e2d\u7684\u4fe1\u606f\u8fdb\u884c\u56de\u6eaf\uff0c\u8865\u5145\u81f3Bug\u4e2d\u3002\n\n![BugIt\u83b7\u53d6\u62a5\u8b66\u4fe1\u606f](./image/bugit_alert.gif)\n\n## \u7f13\u5b58\u529f\u80fd\n\n\u6309\u4e0b[Commond]+[s]\u952e\uff0c\u4f1a\u5c06Bug\u76f8\u5173\u5b57\u6bb5\u4fe1\u606f\u8fdb\u884c\u5b58\u50a8\u3002\n\n\u7f13\u5b58\u4fe1\u606f\u4e0d\u53d7Lyrebird\u670d\u52a1\u5f00\u5173\u3001\u6d4f\u89c8\u5668\u7f13\u5b58\u3001\u811a\u672c/\u754c\u9762\u5207\u6362\u7684\u5f71\u54cd\u3002\n\n![BugIt\u7f13\u5b58\u529f\u80fd](./image/bugit_cache.gif)\n\n\u6709\u6548\u7684\u5229\u7528\u7f13\u5b58\u529f\u80fd\uff0c\u662f\u63d0\u9ad8Bug\u4e0a\u62a5\u6548\u7387\u7684\u5173\u952e\u3002\n\n## \u63d2\u4ef6\u5728Bugit\u4e2d\u7684\u5e94\u7528\n\n\n### Android iOS\u63d2\u4ef6\n\n\u5b89\u88c5[Android\u63d2\u4ef6](https://meituan-dianping.github.io/lyrebird/guide/plugin.html#android\u63d2\u4ef6)\u3001[iOS\u63d2\u4ef6](https://meituan-dianping.github.io/lyrebird/guide/plugin.html#ios\u63d2\u4ef6)\u540e\uff0cBugIt\u652f\u6301\u8bbe\u5907\u4fe1\u606f\u6269\u5c55\u670d\u52a1\u3002\n\n- \u8bbe\u5907\u4fe1\u606f\u83b7\u53d6\n - BugIt \u652f\u6301\u5c06\u8bbe\u5907\u540d\u79f0\u3001\u8bbe\u5907\u7cfb\u7edf\u7248\u672c\u3001\u88ab\u6d4b App \u4fe1\u606f\uff08Bundle ID(iOS)/PackageName(Android)\uff09\u586b\u5145\u5230Issue\u5185\u5bb9\u4e2d\u3002\n- \u5b9e\u65f6\u8bbe\u5907\u622a\u56fe\n - BugIt \u53ef\u4ee5\u5b9e\u65f6\u83b7\u53d6\u8bbe\u5907\u622a\u56fe\uff0c\u5e76\u652f\u6301\u5728\u622a\u56fe\u4e0a\u8fdb\u884c\u6d82\u9e26\u3001\u6587\u672c\u6807\u8bb0\u3002\n - \u63d0\u4ea4 Bug \u65f6\uff0c\u622a\u56fe\u5c06\u4f5c\u4e3a\u9644\u4ef6\u4e00\u5e76\u63d0\u4ea4\u7ed9\u811a\u672c\u914d\u7f6e\u670d\u52a1\u3002\n- Crash Log \u83b7\u53d6\n - \u5728Lyrebird\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff0c\u5982\u53d1\u751f \u88ab\u6d4b App \u53d1\u751f Crash\uff0cBugIt \u4f1a\u6355\u83b7\u5230 Crash Log\u3002\n - \u63d0\u4ea4 Bug \u65f6\uff0cCrash Log \u5c06\u4f5c\u4e3a\u9644\u4ef6\u4e00\u5e76\u63d0\u4ea4\u7ed9\u811a\u672c\u914d\u7f6e\u670d\u52a1\u3002\n - Crash \u83b7\u53d6 \u6682\u4e0d\u652f\u6301 iOS \u8bbe\u5907\n\n![\u5176\u4ed6\u63d2\u4ef6\u5728BugIt\u4e2d\u7684\u5e94\u7528](./image/bugit_devices.gif)\n\n## BugIt\u811a\u672c\n\n\u5728 ~/.lyrebird/conf.json \u4e2d\uff0cBugIt\u4f1a\u8bfb\u53d6 \u201cbugit.workspace\u201d\u5b57\u6bb5\u3002\u5e76\u5c06\u6b64\u5b57\u6bb5\u503c\u4f5c\u4e3a\u8bfb\u53d6\u6a21\u677f\u7684\u6839\u76ee\u5f55\u3002\n\n\u8be5\u76ee\u5f55\u4e0b\u6240\u6709\u6a21\u677f\u90fd\u4f1a\u52a0\u8f7d\u5230BugIt\u4e2d\uff0c\u5e76\u5728UI\u4e2d\u53ef\u9009\u3002\n\n\u5237\u65b0BugIt\u754c\u9762\u5373\u53ef\u91cd\u65b0\u52a0\u8f7d\u6240\u6709\u6a21\u677f\u3002\n\n### \u6a21\u677f\u4f7f\u7528\u8bf4\u660e\n\nBugIt\u901a\u8fc7\u6a21\u677f\u5b9a\u4e49UI\u4ee5\u53ca\u63d0\u4ea4\u7684\u884c\u4e3a\u3002\u901a\u8fc7\u4e0d\u540c\u7684\u6a21\u677f\u652f\u6301JIRA\u4ee5\u53ca\u5176\u4ed6\u7684Bug\u7ba1\u7406\u7cfb\u7edf\u3002\n\nBugIt\u6a21\u677f\u662f\u4e00\u4e2aPython\u6587\u4ef6\uff0c\u8981\u6c42\u4f7f\u7528Python3.6\u53ca\u4ee5\u4e0a\u7684\u7248\u672c\u7f16\u5199\u3002\n![BugIt \u811a\u672c\u5de5\u4f5c\u539f\u7406\u793a\u610f\u56fe](./image/bugit_callback.png)\n\u914d\u7f6e\u811a\u672c\u9700\u5305\u542b\u4ee5\u4e0b\u4e09\u90e8\u5206\n- init\u914d\u7f6e\u6587\u4ef6\n- form()\n- submit()\n\n### init\u914d\u7f6e\u6587\u4ef6\n\nBugIt \u901a\u8fc7 name \u6765\u6807\u8bc6\u914d\u7f6e\u6587\u4ef6\u3002\n\n>\u6ce8\u610f\uff1aBugIt \u811a\u672c\u5fc5\u987b\u542b\u6709 'name' \u5c5e\u6027\n\n\n```python\n\"\"\"\nTemplate name\n\"\"\" \nname = 'TEST-JIRA'\n```\nname \u7528\u4e8e\u5728 BugIt \u524d\u7aef\u9875\u9762\u4e0a\u5c55\u793a\u811a\u672c\u540d\u79f0\u3002\n\n![name](./image/bugit_name.png)\n\n\u9009\u4e2d\u914d\u7f6e\u6587\u4ef6\u540e\uff0cBugIt init \u811a\u672c\u6587\u4ef6\uff0c\u83b7\u53d6\u811a\u672c\u6587\u4ef6\u4e2d\u56de\u8c03\u65b9\u6cd5form()\u3001submit()\u3002\n\n### form()\n\nform() \u65b9\u6cd5\u7528\u4e8e\u81ea\u5b9a\u4e49Bug\u8868\u5355\u7684\u5b57\u6bb5\u4e0e\u586b\u5199\u6837\u5f0f\u3002\n\nBug \u4e2d\u7684\u6bcf\u4e00\u5b57\u6bb5\u7531\u4e00dict\u5b9a\u4e49\uff08\u901a\u5e38\u79f0\u4e4b\u4e3aFormItem\uff09\uff0c\u8868\u5355\u914d\u7f6e\u65f6\uff0c\u901a\u8fc7dict\u7684\u4ee5\u4e0b\u5173\u952e\u5b57\u53bb\u63a7\u5236\u5b57\u6bb5\u7684\u540d\u79f0\u3001\u9ed8\u8ba4\u503c\u3001\u6837\u5f0f\u7b49\u5185\u5bb9\u3002\n\n>form()\u65b9\u6cd5\u5e94\u8fd4\u56de\u4e00\u7531FormItem\u7ec4\u6210\u7684list\u3002\n\n#### FormItem dict\u8bf4\u660e\nkey|\u8bf4\u660e|\u679a\u4e3e\u503c|\u662f\u5426\u5fc5\u586b\n:--:|:--|:--:|:--:\nname|\u5c55\u793a\u5728\u9875\u9762\u4e0a\u7684\u5b57\u6bb5\u540d\u79f0|--|Y\nvalue|\u5bf9\u5e94\u5b57\u6bb5\u586b\u5145\u7684\u503c|--|N\ncomponent|\u5b57\u6bb5\u5c55\u793a\u7684\u7ec4\u4ef6\u5f62\u5f0f|'input'\u3001'select'\u3001'compoundTextarea'|Y\noptions|\u914d\u5408 select component\u4f7f\u7528\uff0c\u7528\u4e8e\u5b58\u653eselect component\u7684\u9009\u9879\u5185\u5bb9|--|N\ncustom keys|\u81ea\u5b9a\u4e49\u5c5e\u6027\uff0c\u4e0d\u5f71\u54cdUI\u7ec4\u4ef6\u5c55\u793a\uff0c\u53ef\u4ee5\u5e2e\u4f4f\u66f4\u597d\u5730\u5904\u7406\u6570\u636e\uff0c\u8be6\u7ec6\u7528\u6cd5\u8bf7\u53c2\u8003[\u811a\u672c\u9ad8\u7ea7](https://meituan-dianping.github.io/lyrebird/plugins/bugit.html)|--|N\n\n#### BugIt \u652f\u6301\u7684 component\n- input\n\n```python\nform_item_input = {\n 'name': '\u4e3b\u9898',\n 'component': 'input',\n 'value': 'defalut value'\n}\n```\n\n![input\u7ec4\u4ef6](./image/bugit_input.png)\n\ninput \u7ec4\u4ef6\u4f1a\u751f\u6210\u4e00\u4e2a\u6587\u672c\u8f93\u5165\u6846\uff0c\u5728\u58f0\u660e\u65f6\u5982\u679c value \u4e0d\u4e3a\u7a7a\uff0c\u5219\u4f1a\u4f5c\u4e3a\u9ed8\u8ba4\u503c\u586b\u5145\u5728\u8f93\u5165\u6846\u4e2d\n\n- select\n\n```python\nform_item_select = {\n 'name': '\u7248\u672c',\n 'component': 'select',\n 'options':[\n {'id':'001','name':'option_1'},\n {'id':'002','name':'option_2'}\n ],\n 'value': '001'\n}\n```\n\n![select\u7ec4\u4ef6](./image/bugit_select.png)\n\nselect\u7ec4\u4ef6\u4f1a\u751f\u6210\u4e00\u4e2a\u7b5b\u9009\u6846\uff0c\u7b5b\u9009\u9879\u7531 options \u5b9a\u4e49\uff0coptions \u4e3a\u4e00\u4e2a list\uff0c\u5176\u4e2d\u6bcf\u4e00\u5143\u7d20\u4e3a dict \u7c7b\u578b\u3002\n\noption dict\u8bf4\u660e\nkey|\u8bf4\u660e|\u662f\u5426\u5fc5\u586b\n:--:|:--|:--:\nid|\u7b5b\u9009\u9879\u552f\u4e00\u6807\u8bc6|Y\nname|\u7b5b\u9009\u9879\u5728\u524d\u7aef\u5c55\u793a\u6587\u672c\u5185\u5bb9|Y\n\nselect \u7ec4\u4ef6\u4e2d\uff0cvalue\u5e94\u4e3aoption dict\u4e2d\u5bf9\u5e94 id \u7684\u503c\n\n- compoundTextarea\n\ncompoundTextarea\u7ec4\u4ef6\u4f1a\u751f\u6210\u4e00\u4e2a\u6587\u672c\u6846\uff0c\u5728\u58f0\u660e\u65f6\u5982\u679c value \u4e0d\u4e3a\u7a7a\uff0c\u5219\u4f1a\u4f5c\u4e3a\u9ed8\u8ba4\u503c\u586b\u5145\u5728\u6587\u672c\u6846\u4e2d\n\n```python\nform_item_text = {\n 'name': '\u63cf\u8ff0',\n 'component': 'compoundTextarea',\n 'value': 'defalut value'\n}\n```\n![compoundTextarea\u7ec4\u4ef6](./image/bugit_text.png)\n\ncompoundTextarea\u7ec4\u4ef6\u5728 BugIt \u4e2d\u8fd8\u7528\u4e8e\u652f\u6301 Lyrebird \u5176\u4ed6\u4fe1\u606f\u7684\u6269\u5c55\u3002\n\n\u9009\u62e9[\u6d88\u606f\u603b\u7ebf](https://meituan-dianping.github.io/lyrebird/advance/eventbus.html)\u6216\u5176\u4ed6[\u63d2\u4ef6](https://meituan-dianping.github.io/lyrebird/plugins/)\u7684\u6570\u636e\u65f6\uff0c\u8be5\u6570\u636e\u5c06\u4f5c\u4e3a\u9644\u52a0\u4fe1\u606f\u5c55\u793a\u5728 compoundTextarea \u4e2d\u3002\n\n![\u9644\u52a0\u4fe1\u606f](./image/bugit_text_extra.gif)\n\n\u5bf9\u5e94\u7684\u6570\u636e\u4fe1\u606f\u5c06\u4f5c\u4e3a 'extraMsg' \u5b58\u653e\u5728 FormItem\u4e2d\u3002\n\u6b64\u65f6From Item\u53d8\u6210\n\n```python\nform_item_text = {\n 'name': '\u63cf\u8ff0',\n 'component': 'compoundTextarea',\n 'value': 'defalut value',\n 'extraMsg':[\n {'message':'Flow Info'},\n {'message':'Notice Info'},\n {'message':'Devices Info'}\n ]\n}\n```\n\n#### form()\u65b9\u6cd5\u793a\u4f8b\u4ee3\u7801\n\n```python\ndef form(context):\n \"\"\"\n BugIt callback function\n\n BugIt will call this function when user select this template from UI.\n This function should return a array, list all FormItem dict.\n\n \"\"\"\n form_item_input = {\n 'name': '\u4e3b\u9898',\n 'component': 'input',\n 'value': 'defalut value'\n }\n form_item_select = {\n 'name': '\u7248\u672c',\n 'component': 'select',\n 'options':[\n {'id':'001','name':'option_1'},\n {'id':'002','name':'option_2'}\n ],\n 'value': '001'\n }\n form_item_text = {\n 'name': '\u63cf\u8ff0',\n 'component': 'compoundTextarea',\n 'value': 'defalut value'\n }\n form = [form_item_input,form_item_select,form_item_text]\n return form\n```\n\u793a\u4f8b\u4ee3\u7801\u751f\u6210\u7684 Bug \u8868\u5355\u5982\u4e0b\u56fe\u6240\u793a\n![\u6d4b\u8bd5\u811a\u672c\u8868\u5355\u751f\u6210](./image/bugit_form.png)\n\n>form()\u65b9\u6cd5\u5165\u53c2 context \uff0c\u53ef\u7528\u4e8e\u4f20\u9012\u7f13\u5b58\u6570\u636e\uff0c\u76f8\u5173\u7528\u6cd5\u8be6\u89c1[\u811a\u672c\u9ad8\u7ea7](https://meituan-dianping.github.io/lyrebird/plugins/bugit.html)\n\n\n### submit()\n\n\u63d0\u4ea4\u51fd\u6570\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\uff0c\u6570\u7ec4\u4e2d\u5305\u542b\u82e5\u5e72\u63d0\u4ea4\u6b65\u9aa4\u9700\u8981\u56de\u8c03\u7684\u51fd\u6570\u3002\n\n>submit()\u65b9\u6cd5\u8fd4\u56de\u4e00\u7ec4\u7528\u4e8e\u5904\u7406 submit \u884c\u4e3a\u7684\u65b9\u6cd5\u3002\n\n\u65b9\u6cd5\u8bf4\u660e\n\u65b9\u6cd5\u540d|\u5165\u53c2|\u8bf4\u660e\n:--:|:--:|:--\nissue|context|\u5904\u7406 Bug\u8868\u5355\u4e2d\u7684\u4fe1\u606f\uff0c\u901a\u8fc7 API \u5411 Bug \u7ba1\u7406\u7cfb\u7edf\u63d0\u4ea4 Issue\nattachments|context|\u5904\u7406\u9644\u4ef6\u4fe1\u606f\uff08\u5982 [Android\u63d2\u4ef6](https://meituan-dianping.github.io/lyrebird/guide/plugin.html#android\u63d2\u4ef6)\u3001[iOS\u63d2\u4ef6](https://meituan-dianping.github.io/lyrebird/guide/plugin.html#ios\u63d2\u4ef6)\u63d0\u4f9b\u7684\u622a\u56fe\u6216 Log\uff09\uff0c\u901a\u8fc7 API \u5411 \u521b\u5efa\u7684 Issue \u4e2d\u6dfb\u52a0\u9644\u4ef6\n\n#### submit()\u65b9\u6cd5\u793a\u4f8b\u4ee3\u7801\uff08\u4ee5JIRA\u670d\u52a1\u4e3a\u4f8b\uff09\n```python\ndef submit():\n \"\"\"\n BugIt callback function\n\n BugIt will call this function when user tap submit button.\n This function should return a array, contains all submit actions.\n\n Each submit-action function have a argument. It contains form data and attachments info.\n \"\"\"\n return [issue, attachments]\n\ndef issue(context):\n \"\"\"\n This function is used to submit Issue \n \"\"\"\n form_data = context['issue']\n jira_fields = {}\n\n # transform from_data to payload submited to API of JIRA\n for form_item in form_data:\n if form_item['name'] == '\u4e3b\u9898' :\n jira_fields['summary'] = form_item['value']\n elif form_item['name'] == '\u7248\u672c':\n jira_fields['version'] = {\n id:form_item['value']\n }\n elif form_item['name'] == '\u63cf\u8ff0':\n jira_fields['description'] = form_item['value']\n # add extraMsg to description \n if form_item['extraMsg']:\n for add_des in form_item['extraMsg']:\n jira_fields['description'] +='\\n'\n jira_fields['description'] +='------------------------------\\n'\n jira_fields['description'] +=add_des['message']\n\n url = 'http://www.example.com/jira/rest/api/2/issue'\n header = {\n 'Content-Type': 'application/json;charset=utf-8'\n }\n resp = requests.post(url, auth=('YOUR JIRA_USER_NAME', 'YOUR_JIRA_PASSWD'),json={\"fields\": jira_fields},headers=header)\n \n if resp.status_code >= 200 and resp.status_code < 300:\n body = json.loads(response.text)\n if body.get('key') :\n context['key'] = body['key']\n else:\n raise Exception(f'Submit failed {response.text}')\n else:\n raise Exception(f'Create issue failed with code {response.status_code}\\n{response.text}')\n\n\ndef attachments(context):\n \"\"\"\n This function is used to upload attachments to the Issue which has been created\n \"\"\"\n key = context['key']\n attachments = context['attachments']\n\n if len(attachments) == 0:\n # No attachments\n return\n\n url = f'http://www.example.com/jira/rest/api/2/issue/{key}/attachments'\n headers = {\n 'X-Atlassian-Token': 'nocheck'\n }\n multiple_files = []\n\n # transform attachment data to payload submited to API of JIRA\n for attachment in attachments:\n attachment_path = Path(attachment['path'])\n multiple_files.append(\n ('file', (attachment_path.name, open(str(attachment_path), 'rb')))\n )\n response = requests.post(url, files=multiple_files, headers=headers)\n\n if response.status_code == 200 and response.json()['code'] == 0:\n print('Submit attachments success')\n else:\n raise Exception(f'Submit failed {response.text}')\n```\n\n\u5b8c\u6574\u811a\u672c\u8bf7\u53c2\u8003: [\u793a\u4f8b\u811a\u672c](example/TEST.py)\n\n\u811a\u672c\u9ad8\u7ea7\u529f\u80fd\u8bf7\u53c2\u8003:[\u811a\u672c\u9ad8\u7ea7](https://meituan-dianping.github.io/lyrebird/plugins/bugit.html)\n\n----\n# \u5f00\u53d1\u8005\u6307\u5357\n\n## \u5f00\u53d1\u73af\u5883\n- macOS OR Linux\n- Python3\n- NodeJS\n- vscode(\u63a8\u8350)\n- Chrome(\u63a8\u8350)\n\n## \u8c03\u8bd5\u4ee3\u7801\n\n### Vscode debug\u914d\u7f6e\n```json\n{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"name\": \"Python: Terminal (integrated)\",\n \"type\": \"python\",\n \"request\": \"launch\",\n \"program\": \"${file}\",\n \"console\": \"integratedTerminal\"\n },\n {\n \"name\": \"Server\",\n \"type\": \"python\",\n \"request\": \"launch\",\n \"module\": \"lyrebird\",\n \"args\": [\n \"-b\",\n \"-vvv\",\n \"--plugin\",\n \"${workspaceFolder}\"\n ],\n \"console\": \"integratedTerminal\"\n },\n {\n \"name\": \"Client\",\n \"type\": \"chrome\",\n \"request\": \"launch\",\n \"url\": \"http://localhost:8080/\",\n \"webRoot\": \"${workspaceFolder}/frontend/src/\",\n \"sourceMapPathOverrides\": {\n \"webpack:///src/*\": \"${webRoot}/*\"\n },\n \"timeout\": 30000\n }\n ]\n}\n```\n### \u540e\u7aef\u4ee3\u7801\n1. \u6fc0\u6d3bpython\u865a\u62df\u73af\u5883\n\n \u901a\u8fc7 source venv/bin/activate \u6765\u6fc0\u6d3b\u8be5\u73af\u5883\n2. \u901a\u8fc7Debug\u529f\u80fd\u542f\u52a8\n \n \u6309\u7167\u4e0a\u9762 debug\u914d\u7f6e\u4e2d python:Lyrebrid\u914d\u7f6e\u542f\u52a8\u5373\u53ef\n### \u524d\u7aef\u4ee3\u7801\n1. \u542f\u52a8node server\n\n```\n# \u8fdb\u5165\u524d\u7aef\u76ee\u5f55\ncd frontend\n\n# \u542f\u52a8\u524d\u7aefnode serve\nnpm run serve\n```\n\n2. \u901a\u8fc7Debug\u529f\u80fd\u542f\u52a8\u6d4f\u89c8\u5668\n\n \u6309\u7167\u4e0a\u9762 debug\u914d\u7f6e\u4e2d vuejs: chrome \u914d\u7f6e\u542f\u52a8\u5373\u53ef\n >\u6ce8\u610f: vscode \u9700\u8981\u5b89\u88c5chrome debug\u63d2\u4ef6", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Meituan-Dianping/lyrebird-bugit", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "lyrebird-bugit", "package_url": "https://pypi.org/project/lyrebird-bugit/", "platform": null, "project_url": "https://pypi.org/project/lyrebird-bugit/", "project_urls": { "Homepage": "https://github.com/Meituan-Dianping/lyrebird-bugit" }, "release_url": "https://pypi.org/project/lyrebird-bugit/1.11.0/", "requires_dist": null, "requires_python": "", "summary": "", "version": "1.11.0", "yanked": false, "yanked_reason": null }, "last_serial": 13778171, "releases": { "1.10.0": [ { "comment_text": "", "digests": { "md5": "5f468356b47404e17d708f0bb61a44ac", "sha256": "66da583a8577a38f1d78d021070b83f4e458f66b232c50cc27a786cdfca5b682" }, "downloads": -1, "filename": "lyrebird-bugit-1.10.0.tar.gz", "has_sig": false, "md5_digest": "5f468356b47404e17d708f0bb61a44ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3319130, "upload_time": "2022-04-13T07:12:26", "upload_time_iso_8601": "2022-04-13T07:12:26.808881Z", "url": "https://files.pythonhosted.org/packages/f6/97/6be5f602fb3dbd9befa97d3c13cfdf1ed6b1cb1eae456b82f4504a1806cf/lyrebird-bugit-1.10.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.10.1": [ { "comment_text": "", "digests": { "md5": "f414fab737170fdf3d27d18f93ebd742", "sha256": "f6b5ff427066ddf64317f98c023c72b9a872a85c4af5b50ca7480d8f89311930" }, "downloads": -1, "filename": "lyrebird-bugit-1.10.1.tar.gz", "has_sig": false, "md5_digest": "f414fab737170fdf3d27d18f93ebd742", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3321367, "upload_time": "2022-04-18T09:23:52", "upload_time_iso_8601": "2022-04-18T09:23:52.450242Z", "url": "https://files.pythonhosted.org/packages/86/a2/16f5e44f340f05022eb32e80c96d7bd811388a76506f872b9f9c6ad68b4a/lyrebird-bugit-1.10.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.11.0": [ { "comment_text": "", "digests": { "md5": "d8b30d4e2a9f5e50ec9ff42551e3561b", "sha256": "21c0abb759e2f9748e066d0575b44eeb25106f973c33b26fc85a3543f5aa27c6" }, "downloads": -1, "filename": "lyrebird-bugit-1.11.0.tar.gz", "has_sig": false, "md5_digest": "d8b30d4e2a9f5e50ec9ff42551e3561b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3330231, "upload_time": "2022-05-11T03:13:29", "upload_time_iso_8601": "2022-05-11T03:13:29.990274Z", "url": "https://files.pythonhosted.org/packages/40/16/a80429973495eaf3e126549aea2e3548970d239a2e5173a77fcde780a8e8/lyrebird-bugit-1.11.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "59560868ac1ab25ac6a37dcf8d8e0e7d", "sha256": "56b4035b530fd0401ae8c0a16fae36cc3582f5751ba010e40e2a235a29ceac48" }, "downloads": -1, "filename": "lyrebird-bugit-1.2.0.tar.gz", "has_sig": false, "md5_digest": "59560868ac1ab25ac6a37dcf8d8e0e7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4123542, "upload_time": "2019-10-28T08:24:46", "upload_time_iso_8601": "2019-10-28T08:24:46.117198Z", "url": "https://files.pythonhosted.org/packages/e3/a8/f9c791c76b9ebaaefab8a74dfabeefd2ecebcc7fd04cd7d1854021595b8d/lyrebird-bugit-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "f99b4c51f83361e4fc728d2e2eb44b07", "sha256": "1c9a6533ecee95d6c46b6a8369026602cc19d869989cdd8adedc66a9d2a7ec0e" }, "downloads": -1, "filename": "lyrebird-bugit-1.2.1.tar.gz", "has_sig": false, "md5_digest": "f99b4c51f83361e4fc728d2e2eb44b07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4123592, "upload_time": "2019-10-28T09:19:34", "upload_time_iso_8601": "2019-10-28T09:19:34.681546Z", "url": "https://files.pythonhosted.org/packages/4c/69/46adb7e1c6e3a02b2c7fc49f435a08bc1a7f228973915061b0940cb01588/lyrebird-bugit-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "52ef3d05eecf2cfed2a091c8c6c46b8f", "sha256": "3b93cd36318611628414acfba976b0d9fe289867c7ba4436778abfc45d3ecfa1" }, "downloads": -1, "filename": "lyrebird-bugit-1.2.2.tar.gz", "has_sig": false, "md5_digest": "52ef3d05eecf2cfed2a091c8c6c46b8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2514266, "upload_time": "2019-10-29T07:14:46", "upload_time_iso_8601": "2019-10-29T07:14:46.606907Z", "url": "https://files.pythonhosted.org/packages/83/65/bc6ac085eba92393361b949f6544ca8084e6512735fb1125434e7ad70ea5/lyrebird-bugit-1.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "8dd071d86b3ac6a98a01d4205113794c", "sha256": "7ae69bd7e82cfd28e7c08a59318f63260018b2cdf58d7471afb9bde411a04f70" }, "downloads": -1, "filename": "lyrebird-bugit-1.2.3.tar.gz", "has_sig": false, "md5_digest": "8dd071d86b3ac6a98a01d4205113794c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2513626, "upload_time": "2019-11-22T07:25:49", "upload_time_iso_8601": "2019-11-22T07:25:49.265818Z", "url": "https://files.pythonhosted.org/packages/40/71/ae99808c5e50616d6eb80ad1cc4f02e83ee9e2d92d35b5fc14de2f7d7d84/lyrebird-bugit-1.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "c2de68539e60bac22922fa9a6f094cae", "sha256": "b2ddac4fc826688a87529231fdf884163f8a1fcee7b422b6c735b0fcc47381f6" }, "downloads": -1, "filename": "lyrebird-bugit-1.3.0.tar.gz", "has_sig": false, "md5_digest": "c2de68539e60bac22922fa9a6f094cae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2514880, "upload_time": "2020-06-30T03:21:58", "upload_time_iso_8601": "2020-06-30T03:21:58.889106Z", "url": "https://files.pythonhosted.org/packages/b0/cf/4c3c5a438352261e974c8c84a956364cf236e97c2f958410c597544631e0/lyrebird-bugit-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "88866c375885835c0d4702412ab9eb2b", "sha256": "4a088681943a1251a6595d19da22c8dcf2dce89f06d94ae25ddd6ee782865abe" }, "downloads": -1, "filename": "lyrebird-bugit-1.3.1.tar.gz", "has_sig": false, "md5_digest": "88866c375885835c0d4702412ab9eb2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2515281, "upload_time": "2020-07-22T11:59:16", "upload_time_iso_8601": "2020-07-22T11:59:16.950651Z", "url": "https://files.pythonhosted.org/packages/83/5f/86c527a14aa5bef8ab1c82e002313c506621b3469f15ecf92b98e8909967/lyrebird-bugit-1.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "a58345cb5babad6007c7a16f6d560cb5", "sha256": "5aae2133855be7e39e137bc1a54dd28cc75be5c9e11826cacb094f6f2881c727" }, "downloads": -1, "filename": "lyrebird-bugit-1.4.0.tar.gz", "has_sig": false, "md5_digest": "a58345cb5babad6007c7a16f6d560cb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2529959, "upload_time": "2020-08-07T03:41:04", "upload_time_iso_8601": "2020-08-07T03:41:04.232977Z", "url": "https://files.pythonhosted.org/packages/24/35/e6125f7c496daf7c3200d641719be39dfd37da7c3916693c31197f8a6e1b/lyrebird-bugit-1.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "bd7be2e2eb263fe515a3492010d2edb5", "sha256": "70087ec02b7e4ceb5f5aea7d9ca91655a04663cb2de63be589a908986728bb5e" }, "downloads": -1, "filename": "lyrebird-bugit-1.5.0.tar.gz", "has_sig": false, "md5_digest": "bd7be2e2eb263fe515a3492010d2edb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2525587, "upload_time": "2020-09-27T03:39:42", "upload_time_iso_8601": "2020-09-27T03:39:42.500617Z", "url": "https://files.pythonhosted.org/packages/61/d6/55b3b1632099434304a62a6ceba9dffa924d586c5265508151cdf3a0d0e9/lyrebird-bugit-1.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "6372d5eed36140c1080e156ff747cff2", "sha256": "581a0e71a3f90a90f14e241e74719b1c1d7188e477768eddd519fe7ba0e44e35" }, "downloads": -1, "filename": "lyrebird-bugit-1.6.0.tar.gz", "has_sig": false, "md5_digest": "6372d5eed36140c1080e156ff747cff2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2526111, "upload_time": "2020-09-28T07:53:47", "upload_time_iso_8601": "2020-09-28T07:53:47.079124Z", "url": "https://files.pythonhosted.org/packages/d3/9a/6190f30ece33346681255e22b6810ad83e27889ef846ad8932991781456a/lyrebird-bugit-1.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "7fdf42327041cdaf3a404996865e4039", "sha256": "2b88f5cebf74d348bdc71c7ab6576c7131853e68382c79c96ec9177d1dfeccdf" }, "downloads": -1, "filename": "lyrebird-bugit-1.6.1.tar.gz", "has_sig": false, "md5_digest": "7fdf42327041cdaf3a404996865e4039", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2525754, "upload_time": "2020-11-05T08:17:52", "upload_time_iso_8601": "2020-11-05T08:17:52.726882Z", "url": "https://files.pythonhosted.org/packages/37/52/624a6122f1e696dd396e41a62bd34f9fdc490c35ec700f996fc98e9f8148/lyrebird-bugit-1.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "e33a126f755b88fc2934d14214ec3513", "sha256": "4c891533dad9176786497dd6f639b56168d9c985b33f4807442b10128bf5e273" }, "downloads": -1, "filename": "lyrebird-bugit-1.6.2.tar.gz", "has_sig": false, "md5_digest": "e33a126f755b88fc2934d14214ec3513", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2526414, "upload_time": "2020-11-10T08:00:05", "upload_time_iso_8601": "2020-11-10T08:00:05.845143Z", "url": "https://files.pythonhosted.org/packages/fd/69/baeb268b6c0d0f41dfad71c84485a35b95e6c7dd169e6ef9cd48376f5766/lyrebird-bugit-1.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.3": [ { "comment_text": "", "digests": { "md5": "89e1d8d858e087c077cd984d749923b2", "sha256": "d85015c39f676b06037c11bd04c9e10e86fd203353035b52a5a0e433b8a85935" }, "downloads": -1, "filename": "lyrebird-bugit-1.6.3.tar.gz", "has_sig": false, "md5_digest": "89e1d8d858e087c077cd984d749923b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2525099, "upload_time": "2021-06-07T02:50:58", "upload_time_iso_8601": "2021-06-07T02:50:58.362283Z", "url": "https://files.pythonhosted.org/packages/ff/61/5b3f34737e73e12b3e2dd6f2836fbeb21dbdbc30ecb8dcfb54ef95cb588f/lyrebird-bugit-1.6.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.4": [ { "comment_text": "", "digests": { "md5": "4fcf05d6d742ee5282ba3e5d0ac44bb0", "sha256": "21c0c8867ab4f10ea34b74cf74049cb5711f45ae002ee0434e103e2f4abc7c45" }, "downloads": -1, "filename": "lyrebird-bugit-1.6.4.tar.gz", "has_sig": false, "md5_digest": "4fcf05d6d742ee5282ba3e5d0ac44bb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2526769, "upload_time": "2021-06-29T11:41:07", "upload_time_iso_8601": "2021-06-29T11:41:07.897267Z", "url": "https://files.pythonhosted.org/packages/f3/f2/6fe5598bca3f80f4fababe393738cd48aca5786a74ce4e4afd1a1a2a0b76/lyrebird-bugit-1.6.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "ae7a26c48d1b8dc662837c1b4123f993", "sha256": "1764c54f69236b255b5931b9fde275dbe0084923ea52f0b431c46bc74623cfb3" }, "downloads": -1, "filename": "lyrebird-bugit-1.7.0.tar.gz", "has_sig": false, "md5_digest": "ae7a26c48d1b8dc662837c1b4123f993", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3511597, "upload_time": "2021-08-10T06:54:53", "upload_time_iso_8601": "2021-08-10T06:54:53.592697Z", "url": "https://files.pythonhosted.org/packages/f8/34/d7ed8cf7645877ad4185c17d6f94d26b695e6ab9772a4b14ff87dcae85d6/lyrebird-bugit-1.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "5c5fe101b68da33cf14ca93447036fb2", "sha256": "c038e324d8d37491f365dd60690f118b8a5c97f9c7250926f5dd8cdd5b7ff94e" }, "downloads": -1, "filename": "lyrebird-bugit-1.8.0.tar.gz", "has_sig": false, "md5_digest": "5c5fe101b68da33cf14ca93447036fb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3318717, "upload_time": "2021-09-28T06:55:51", "upload_time_iso_8601": "2021-09-28T06:55:51.628238Z", "url": "https://files.pythonhosted.org/packages/18/75/3df5a085d3e7b1342dc6902e7022dd98886f9f1d0071013f02e34ecdc9e0/lyrebird-bugit-1.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.8.1": [ { "comment_text": "", "digests": { "md5": "760cf31b42d04db1fcd5899f1dd92436", "sha256": "ea1927672b93432761889c5d1a9f70c39332b443c6e5b101bf43d87be3b62fbc" }, "downloads": -1, "filename": "lyrebird-bugit-1.8.1.tar.gz", "has_sig": false, "md5_digest": "760cf31b42d04db1fcd5899f1dd92436", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3320188, "upload_time": "2021-10-28T12:50:44", "upload_time_iso_8601": "2021-10-28T12:50:44.725814Z", "url": "https://files.pythonhosted.org/packages/ad/60/24f7d33128c36b5f558f5036a426f405e45db7c1245ff31a18f193b14256/lyrebird-bugit-1.8.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.8.2": [ { "comment_text": "", "digests": { "md5": "796ec77b32e690939fc52a4893e04397", "sha256": "da96dd17fbe4fda09549fd6fc6c6b13b1b961ebc957a5e2c2a15996df022d1fe" }, "downloads": -1, "filename": "lyrebird-bugit-1.8.2.tar.gz", "has_sig": false, "md5_digest": "796ec77b32e690939fc52a4893e04397", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3326225, "upload_time": "2021-12-29T13:27:24", "upload_time_iso_8601": "2021-12-29T13:27:24.943594Z", "url": "https://files.pythonhosted.org/packages/01/f1/83e279dd7db88d402baaa64b78d75937993952b43b6d2b0fa5ab1f2c4e0e/lyrebird-bugit-1.8.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.9.0": [ { "comment_text": "", "digests": { "md5": "0d27f14137ed4d22b5721a14e29075f4", "sha256": "d71e8787bb9f1de64652cbb2cd545cbe98e49a5b6b9059980f8fd8a463e09ea7" }, "downloads": -1, "filename": "lyrebird-bugit-1.9.0.tar.gz", "has_sig": false, "md5_digest": "0d27f14137ed4d22b5721a14e29075f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3318537, "upload_time": "2022-03-23T08:12:50", "upload_time_iso_8601": "2022-03-23T08:12:50.916682Z", "url": "https://files.pythonhosted.org/packages/d3/95/eace435b1592036295ad9c2b6e0aa3e11d0bb883a7e34745dab498e8a890/lyrebird-bugit-1.9.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.9.1": [ { "comment_text": "", "digests": { "md5": "e13cf1737df3a9521ed15eae0cab0bf2", "sha256": "d044439879e4c478ab1c8cd1a43982de04a57794acc379b2d3df2b20f6ca7a55" }, "downloads": -1, "filename": "lyrebird-bugit-1.9.1.tar.gz", "has_sig": false, "md5_digest": "e13cf1737df3a9521ed15eae0cab0bf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3320038, "upload_time": "2022-03-24T02:48:56", "upload_time_iso_8601": "2022-03-24T02:48:56.651876Z", "url": "https://files.pythonhosted.org/packages/e5/f0/e11fd63cc79d9b3c22836e7848a7f61dc72450e691ccf4c287491a1fa9ee/lyrebird-bugit-1.9.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d8b30d4e2a9f5e50ec9ff42551e3561b", "sha256": "21c0abb759e2f9748e066d0575b44eeb25106f973c33b26fc85a3543f5aa27c6" }, "downloads": -1, "filename": "lyrebird-bugit-1.11.0.tar.gz", "has_sig": false, "md5_digest": "d8b30d4e2a9f5e50ec9ff42551e3561b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3330231, "upload_time": "2022-05-11T03:13:29", "upload_time_iso_8601": "2022-05-11T03:13:29.990274Z", "url": "https://files.pythonhosted.org/packages/40/16/a80429973495eaf3e126549aea2e3548970d239a2e5173a77fcde780a8e8/lyrebird-bugit-1.11.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }