{ "info": { "author": "Ken Dreyer", "author_email": "ktdreyer@ktdreyer.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Twisted", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Bug Tracking" ], "description": "Async interface to Bugzilla, using Twisted\n==========================================\n\nAccess Bugzilla's XML-RPC API asyncronously (non-blocking) using the Twisted\nframework.\n\n.. image:: https://travis-ci.org/ktdreyer/txbugzilla.svg?branch=master\n :target: https://travis-ci.org/ktdreyer/txbugzilla\n\n.. image:: https://badge.fury.io/py/txbugzilla.svg\n :target: https://badge.fury.io/py/txbugzilla\n\nSimple Example: Fetching a bug\n------------------------------\n\n.. code-block:: python\n\n from txbugzilla import connect, BugzillaException\n from twisted.internet import defer\n from twisted.internet.task import react\n\n @defer.inlineCallbacks\n def example(reactor):\n # connect() defaults to https://bugzilla.redhat.com/xmlrpc.cgi\n bz = yield connect()\n\n # fetch a bug\n try:\n bug = yield bz.get_bug_simple(10000)\n print(bug.summary)\n except BugzillaException as e:\n print(e)\n\n if __name__ == '__main__':\n react(example)\n\n\nExample: Authentication\n-----------------------\n\nBy default, connections to Bugzilla are anonymous, so you cannot do fun things\nlike update bugs or view private bugs or private information. If you wish to\nauthenticate your connection to Bugzilla, you can pass an API key to\n``connect()``. The deferred that ``connect()`` returns will fire a callback\nwith an authenticated connection.\n\n.. code-block:: python\n\n from txbugzilla import connect\n from twisted.internet import defer\n\n @defer.inlineCallbacks\n def example():\n # Authenticate via username and password\n bz = yield connect(api_key='123456abcdef')\n\n # Do something as this logged-in user, for example:\n # bug = yield bz.getbugsimple(...)\n\n(Previous versions of txbugzilla supported the older username/password and\ntoken methods for authenticating. These methods are deprecated in Bugzilla 5\nand the latest version of txbugzilla no longer supports these. You must use\nAPI keys now.)\n\nSide note: bugzillarc\n~~~~~~~~~~~~~~~~~~~~~\n\nIf you pass no parameters to ``connect()``, the resulting connection will be\nanonymous *unless* you have a special ``.config/python-bugzilla/bugzillarc``\nfile in your home directory. This file should look something like this::\n\n $ cat ~/.config/python-bugzilla/bugzillarc\n [bugzilla.redhat.com]\n api_key=ABCDEFGHIJK\n\ntxbugzilla will look for this file and attempt to use the API key there if one\nexists.\n\nTo construct this ``bugzillarc`` file:\n\n1. Log into Bugzilla's web UI with your browser.\n2. Go to \"Preferences\" -> \"`API Keys\n `_\".\n3. Generate a new API key.\n4. Make the ``.config/python-bugzilla`` directory in your home directory::\n\n mkdir -p ~/.config/python-bugzilla\n\n5. Edit the ``bugzillarc`` file in your text editor::\n\n cat ~/.config/python-bugzilla/bugzillarc\n [buzilla.example.com]\n api_key=YOUR_API_KEY\n\n\nExample: Assigning bugs\n-----------------------\n\nThis will definitely earn you friends.\n\n.. code-block:: python\n\n from txbugzilla import connect, BugzillaException\n from twisted.internet import defer\n\n @defer.inlineCallbacks\n def example():\n bz = yield connect(username='user@example.com', password='foo')\n\n try:\n result = yield bz.assign(1234, 'someone@redhat.com')\n if result:\n print('assigned bz #1234 to someone@redhat.com')\n else:\n print('bz #1234 is already assigned to someone@redhat.com')\n except BugzillaException as e:\n print(e)\n\nExample: Searching with an upstream bug\n---------------------------------------\n\nQuickly find out \"What BZ matches this external tracker ticket?\"\n\n.. code-block:: python\n\n from txbugzilla import connect, BugzillaException\n from twisted.internet import defer\n\n @defer.inlineCallbacks\n def example():\n bz = yield connect()\n try:\n result = yield bz.find_by_external_tracker(\n 'http://tracker.ceph.com', '16673')\n for b in result:\n print(b.weburl + ' ' + b.summary)\n except BugzillaException as e:\n print(e)\n\n\nExample: Raw XML-RPC calls\n--------------------------\n\nWant to make some `API call\n`_ not mentioned here?\nUse the ``call()`` method to make raw XML-RPC calls. It will take care of API\nkey authentication for you, too.\n\nFor example, to see a list of all the groups of which you are a member:\n\n.. code-block:: python\n\n from txbugzilla import connect, BugzillaException\n from twisted.internet import defer\n from pprint import pprint\n\n @defer.inlineCallbacks\n def example():\n bz = yield connect(username='user@example.com', password='foo')\n\n try:\n result = yield bz.call('User.get', {'names': [bz.username],\n 'include_fields': ['groups']})\n pprint(result['users'][0]['groups'])\n except BugzillaException as e:\n print(e)\n\nLicense\n-------\nMIT (see ``LICENSE``)\n\nPackages that use this package\n------------------------------\n\n* `helga-bugzilla `_", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ktdreyer/txbugzilla", "keywords": "bugzilla,twisted", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "txbugzilla", "package_url": "https://pypi.org/project/txbugzilla/", "platform": "", "project_url": "https://pypi.org/project/txbugzilla/", "project_urls": { "Homepage": "https://github.com/ktdreyer/txbugzilla" }, "release_url": "https://pypi.org/project/txbugzilla/2.0.0/", "requires_dist": null, "requires_python": "", "summary": "Twisted API for Bugzilla", "version": "2.0.0" }, "last_serial": 4727066, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "b5b1f852bd40882ad93cd80349cf1c38", "sha256": "7766dfec8c9a566213b0fe51530ad86b929dfa450dd9c7a5df9680c244b21ae5" }, "downloads": -1, "filename": "txbugzilla-0.0.2.tar.gz", "has_sig": true, "md5_digest": "b5b1f852bd40882ad93cd80349cf1c38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5456, "upload_time": "2016-05-28T19:27:16", "url": "https://files.pythonhosted.org/packages/5c/81/c30feee7c62acb8525a4718a78e6c42bdeef9f462277c53654a90d1af917/txbugzilla-0.0.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "bc1294206aed141aa0c5b6a7f93c307b", "sha256": "d405ba1112182f4cdd29ba37976fca819dee31a432462c2181fcefaab37c0db1" }, "downloads": -1, "filename": "txbugzilla-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bc1294206aed141aa0c5b6a7f93c307b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6230, "upload_time": "2016-06-19T00:19:12", "url": "https://files.pythonhosted.org/packages/3f/65/e5a217751a59d9444c40a55f1d9bdfaad128f5bb36fedfa4f91c2218f9ea/txbugzilla-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "d27e7d821ab4617cc07266e21e7453a3", "sha256": "a6e97217d430fd588472a2dc97770ae5196647cd86e1d91cb6c898dbf5a13b64" }, "downloads": -1, "filename": "txbugzilla-1.0.1.tar.gz", "has_sig": false, "md5_digest": "d27e7d821ab4617cc07266e21e7453a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6235, "upload_time": "2016-06-19T00:26:21", "url": "https://files.pythonhosted.org/packages/b4/6d/eaa471f000816d9a7633d3fcfd737bbdcb536c235c1db244cf605b437096/txbugzilla-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "c34e3bbf421e44a478db95b22880c4e9", "sha256": "9e725ad2bfb4e845d318ea952d87c3eaefe19686f627e62807579025bff342eb" }, "downloads": -1, "filename": "txbugzilla-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c34e3bbf421e44a478db95b22880c4e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8316, "upload_time": "2017-02-21T19:43:10", "url": "https://files.pythonhosted.org/packages/fb/04/3cac99ded415c6d2ca1031a8fe4a9c01911bec1c4aed49de2e8f5e88aa18/txbugzilla-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "510197dd8c8f9f45fc029c93cf92e02b", "sha256": "582f41801ffd87b9370644f34cb3f62b6f9fc14516dc3556aa544984435d6d14" }, "downloads": -1, "filename": "txbugzilla-1.1.1.tar.gz", "has_sig": false, "md5_digest": "510197dd8c8f9f45fc029c93cf92e02b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8312, "upload_time": "2017-02-21T19:56:08", "url": "https://files.pythonhosted.org/packages/31/6f/fdda4d34ed99505465b9cae05a9eaa0c7dae887f92e105516c794615877b/txbugzilla-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "821b048f7ba41d71ec2b102370e57a52", "sha256": "725342f41840e193e33d34ef7bc58bf0992b8df5ce0ca61846b864bbd06a1b4f" }, "downloads": -1, "filename": "txbugzilla-1.2.0.tar.gz", "has_sig": false, "md5_digest": "821b048f7ba41d71ec2b102370e57a52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8315, "upload_time": "2017-05-05T21:26:05", "url": "https://files.pythonhosted.org/packages/ad/50/51ee80e040bb9baabf2e2247ec51c118d76c6dc526a867b2c07c0c610c85/txbugzilla-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "1aa4ecd6eaa9ff22c27ad906d365f7c3", "sha256": "d81acfec28ad183969f28a282702a45bde9f86e543c6779a187d9be0e66d9220" }, "downloads": -1, "filename": "txbugzilla-1.3.0.tar.gz", "has_sig": false, "md5_digest": "1aa4ecd6eaa9ff22c27ad906d365f7c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8393, "upload_time": "2017-08-01T21:41:23", "url": "https://files.pythonhosted.org/packages/8f/22/22f7ec28737be08b78b631c8b2672106f4f6349e4b4073b802e620409094/txbugzilla-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "b2e3a9a2b91c5e237497f800cace043b", "sha256": "2b30c46fbf72af11a2a66704c03f26aa77b054e7d9a20b6682282efdd3b81814" }, "downloads": -1, "filename": "txbugzilla-1.4.0.tar.gz", "has_sig": false, "md5_digest": "b2e3a9a2b91c5e237497f800cace043b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8520, "upload_time": "2017-08-02T02:42:23", "url": "https://files.pythonhosted.org/packages/5b/61/4b714d0caef83295c6d00ebfa31aab31c39e5e53d01e8de61bbb43bda7d1/txbugzilla-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "c82691bb7e2009272baf5775f7960597", "sha256": "c0d63a06042166f487630fc3d1bdab1601d9df2f2e1cbcb883169ecc18c2713b" }, "downloads": -1, "filename": "txbugzilla-1.5.0.tar.gz", "has_sig": true, "md5_digest": "c82691bb7e2009272baf5775f7960597", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8816, "upload_time": "2018-08-03T18:23:09", "url": "https://files.pythonhosted.org/packages/42/7e/d7bc57d86d54c56c88f5d80b0d63b03f987e7cca884ebfc27be786c104f5/txbugzilla-1.5.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "4fe7d92f38d5000bc8f6a081fdf8aa6d", "sha256": "45b4c78fbfd3ba58c904a27aebfc099cb976d23b5cadf85e72fb0d3eb595d359" }, "downloads": -1, "filename": "txbugzilla-2.0.0.tar.gz", "has_sig": true, "md5_digest": "4fe7d92f38d5000bc8f6a081fdf8aa6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7556, "upload_time": "2019-01-22T17:20:47", "url": "https://files.pythonhosted.org/packages/66/7c/228a424cff1d61b39db0d5efa538507c5dd5591043274edd7bc11c24913f/txbugzilla-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4fe7d92f38d5000bc8f6a081fdf8aa6d", "sha256": "45b4c78fbfd3ba58c904a27aebfc099cb976d23b5cadf85e72fb0d3eb595d359" }, "downloads": -1, "filename": "txbugzilla-2.0.0.tar.gz", "has_sig": true, "md5_digest": "4fe7d92f38d5000bc8f6a081fdf8aa6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7556, "upload_time": "2019-01-22T17:20:47", "url": "https://files.pythonhosted.org/packages/66/7c/228a424cff1d61b39db0d5efa538507c5dd5591043274edd7bc11c24913f/txbugzilla-2.0.0.tar.gz" } ] }