{ "info": { "author": "Vladimir Mihailenco", "author_email": "vlad@airbrake.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development" ], "description": "# Python exception notifier for Airbrake\n\n[![Build Status](https://travis-ci.org/airbrake/pybrake.svg?branch=master)](https://travis-ci.org/airbrake/pybrake)\n\n## Installation\n\npybrake requires Python 3.4+.\n\n``` shell\npip install -U pybrake\n```\n\n## Configuration\n\nTo configure the pybrake notifier you will need your Airbrake project's `id` and\n`api_key`, these are available from your project's settings page.\n\n```python\nimport pybrake\n\n\nnotifier = pybrake.Notifier(project_id=123,\n project_key='FIXME',\n environment='production')\n```\n\n## Sending errors to Airbrake\n\n```python\ntry:\n raise ValueError('hello')\nexcept Exception as err:\n notifier.notify(err)\n```\n\n### Sending errors synchronously\n\nBy default, the `notify` function sends errors asynchronously using\n`ThreadPoolExecutor` and returns a `concurrent.futures.Future`, a synchronous\nAPI is also made available with the `notify_sync` function:\n\n```python\nnotice = notifier.notify_sync(err)\nif 'id' in notice:\n print(notice['id'])\nelse:\n print(notice['error'])\n```\n\n## Adding custom params\n\nTo set custom params you can build and send notice in separate steps:\n\n```python\nnotice = notifier.build_notice(err)\nnotice['params']['myparam'] = 'myvalue'\nnotifier.send_notice(notice)\n```\n\nYou can also add custom params to every error notice before it's sent to Airbrake\nwith the `add_filter` function.\n\n```python\ndef my_filter(notice):\n notice['params']['myparam'] = 'myvalue'\n return notice\n\nnotifier.add_filter(my_filter)\n```\n\n## Ignoring notices\n\nThere may be some notices/errors thrown in your application that you're not\ninterested in sending to Airbrake, you can ignore these using the `add_filter`\nfunction.\n\n```python\ndef my_filter(notice):\n if notice['context']['environment'] == 'development':\n # Ignore notices in development environment.\n return None\n return notice\n\nnotifier.add_filter(my_filter)\n```\n\n## Filtering keys\n\nWith `keys_blacklist` option you can specify list of keys containing sensitive information that must be filtered out, e.g.:\n\n```python\nnotifier = pybrake.Notifier(\n ...\n keys_blacklist=[\n 'password', # exact match\n re.compile('secret'), # regexp match\n ],\n)\n```\n\n## Logging integration\n\npybrake provides a logging handler that sends your logs to Airbrake.\n\n```python\nimport logging\nimport pybrake\n\n\nairbrake_handler = pybrake.LoggingHandler(notifier=notifier,\n level=logging.ERROR)\n\nlogger = logging.getLogger('test')\nlogger.addHandler(airbrake_handler)\n\nlogger.error('something bad happened')\n```\n\n## Django integration\n\nFirst you need to add your pybrake config to your Django `settings.py` file\nusing your project's `id` and `api_key`.\n\n```python\nAIRBRAKE = dict(\n project_id=123,\n project_key='FIXME',\n)\n```\n\nThe next step is activating the Airbrake middleware.\n\n```python\nMIDDLEWARE = [\n ...\n 'pybrake.django.AirbrakeMiddleware',\n]\n```\n\nThe last step is configuring the airbrake logging handler. After that you are\nready to start reporting errors to Airbrake from your Django app.\n\n```python\nLOGGING = {\n 'version': 1,\n 'disable_existing_loggers': False,\n 'handlers': {\n 'airbrake': {\n 'level': 'ERROR',\n 'class': 'pybrake.LoggingHandler',\n },\n },\n 'loggers': {\n 'app': {\n 'handlers': ['airbrake'],\n 'level': 'ERROR',\n 'propagate': True,\n },\n },\n}\n```\n\n## Flask integration\n\nThe Flask integration leverages Flask signals and therefore requires the blinker\nlibrary.\n\n```python\nfrom flask import Flask\nimport pybrake.flask\n\n\n\napp = Flask(__name__)\n\napp.config['PYBRAKE'] = dict(\n project_id=123,\n project_key='FIXME',\n)\napp = pybrake.flask.init_app(app)\n```\n\n## aiohttp integration (python 3.5+)\n\nSetup airbrake's middleware and config for your web application:\n\n```python\n# app.py\n\nfrom aiohttp import web\nfrom pybrake.aiohttp import create_airbrake_middleware\n\nairbrake_middleware = create_airbrake_middleware()\n\napp = web.Application(middlewares=[airbrake_middleware])\n\napp['airbrake_config'] = dict(\n project_id=123,\n project_key='FIXME',\n environment='production' # optional\n)\n```\n\nAlso, you can pass custom handlers to `create_airbrake_middleware`:\n\n```python\n# middlewares.py\n\nimport aiohttp_jinja2\nfrom pybrake.aiohttp import create_airbrake_middleware\n\n\nasync def handle_404(request):\n return aiohttp_jinja2.render_template('404.html', request, {})\n\n\nasync def handle_500(request):\n return aiohttp_jinja2.render_template('500.html', request, {})\n\n\ndef setup_middlewares(app):\n airbrake_middleware = create_airbrake_middleware({\n 404: handle_404,\n 500: handle_500\n })\n\n app.middlewares.append(airbrake_middleware)\n```\n\n## Disabling pybrake logs\n\nThe pybrake logger can be silenced by setting the logging level to\n`logging.CRITICAL`.\n\n``` python\nimport logging\n\n\nlogging.getLogger(\"pybrake\").setLevel(logging.CRITICAL)\n```\n\n## Development\n\n### Running the tests\n\n```shell\npip install -r test-requirements.txt\npytest\n```\n\n### Uploading to PyPI\n\n```shell\npython setup.py sdist upload\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/airbrake/pybrake", "keywords": "airbrake exception error notifier", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pybrake", "package_url": "https://pypi.org/project/pybrake/", "platform": "", "project_url": "https://pypi.org/project/pybrake/", "project_urls": { "Homepage": "http://github.com/airbrake/pybrake" }, "release_url": "https://pypi.org/project/pybrake/0.4.2/", "requires_dist": null, "requires_python": "", "summary": "Python exception notifier for Airbrake", "version": "0.4.2" }, "last_serial": 5841466, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "40f9836fe7f07bd061a4918a70dd94a2", "sha256": "63ff86667c12779787de816b7acdafeb8927a9155b0fdb06e2698e2b27f972f2" }, "downloads": -1, "filename": "pybrake-0.1.tar.gz", "has_sig": false, "md5_digest": "40f9836fe7f07bd061a4918a70dd94a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7434, "upload_time": "2018-03-21T11:27:43", "url": "https://files.pythonhosted.org/packages/c6/08/193ec23acb8e7aae79f118826c29c127387013be9d747683a32e01b0e139/pybrake-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8a6e9a3ea83bd86e5b6c953f49a0ac22", "sha256": "69976ebda1961d1355e0ef980ccb3801350c38a7420ca7f6cfd264aa98a9e405" }, "downloads": -1, "filename": "pybrake-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8a6e9a3ea83bd86e5b6c953f49a0ac22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7504, "upload_time": "2018-03-21T11:27:39", "url": "https://files.pythonhosted.org/packages/2c/37/e2ef3b0fdc0647d4e88ad20cf0758fe02c0f2a773ac9d993dd3babab6cbb/pybrake-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a91b55c5cf0f663a3fd2c778207a3e42", "sha256": "a4ad148c24805939df5d147efca3a64903c6e0e084d69c122bae6ba33cc0a638" }, "downloads": -1, "filename": "pybrake-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a91b55c5cf0f663a3fd2c778207a3e42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7501, "upload_time": "2018-03-21T11:27:40", "url": "https://files.pythonhosted.org/packages/2c/66/89d4acd72f83d485d25244ff5cb67a64b33e6d6d48af2407ebbe71b48483/pybrake-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5aa96e72d088c64dee4de0805d1b4853", "sha256": "8559b114590f24af7c7d14db4692c99a817158685cf40854e249f987c291e0cb" }, "downloads": -1, "filename": "pybrake-0.1.3.tar.gz", "has_sig": false, "md5_digest": "5aa96e72d088c64dee4de0805d1b4853", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9852, "upload_time": "2018-03-21T11:27:42", "url": "https://files.pythonhosted.org/packages/01/61/cdd9b93555e39808891f299485ac2746bb459c5682a1f30098d6ec3db587/pybrake-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "906cb4250b79ef638abf23531fb2d2d3", "sha256": "5bb656f29239d77fda365a214b27ea1c7813d01f1270365aa0981a426853d0d5" }, "downloads": -1, "filename": "pybrake-0.2.0.tar.gz", "has_sig": false, "md5_digest": "906cb4250b79ef638abf23531fb2d2d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9848, "upload_time": "2018-03-05T13:05:19", "url": "https://files.pythonhosted.org/packages/60/4b/cfb0517ded1be1fd5b7c0c6685d6fcd0972e6c9a1a8525c3728126bd2098/pybrake-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "df2456faff94b73d256318d28f52b2ca", "sha256": "2db8f3a67a7cab017c913ac30850e2244150d45374e356a0f86ba6c00b9b05c6" }, "downloads": -1, "filename": "pybrake-0.3.0.tar.gz", "has_sig": false, "md5_digest": "df2456faff94b73d256318d28f52b2ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10795, "upload_time": "2018-03-12T11:33:57", "url": "https://files.pythonhosted.org/packages/2d/8e/11e7b7255b3267d6492be97795aee0d34da84f49f8ca71d2b0c1b6fe31ae/pybrake-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "136a7b249efebce9a4c22992b0392c79", "sha256": "828df7b2d25769ad24c98036e74cf1e96a62d0fbb5e255c5abebe79e178ccec7" }, "downloads": -1, "filename": "pybrake-0.3.1.tar.gz", "has_sig": false, "md5_digest": "136a7b249efebce9a4c22992b0392c79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11156, "upload_time": "2018-03-21T11:27:46", "url": "https://files.pythonhosted.org/packages/1c/9a/2c3520ad746f23719fa82db3431863b3bd069d4834bccdf0413f5dd1d705/pybrake-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "b8640ba5aa1a9ff8ca84973030eb1b8b", "sha256": "cdcc9cb84b08b93dd428758b74af8fa56235ff8e0813630cb0ee1872cb8d9049" }, "downloads": -1, "filename": "pybrake-0.3.2.tar.gz", "has_sig": false, "md5_digest": "b8640ba5aa1a9ff8ca84973030eb1b8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11377, "upload_time": "2018-04-24T07:26:58", "url": "https://files.pythonhosted.org/packages/f5/be/0fc0d23c6592e0cb22d300de53e08b6fef1d0c626962ea9dcbb9ab159199/pybrake-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "b4a5ccd908e8ecc37c58220f19937543", "sha256": "3930e6f346fe95129fb3484988f470c8bfdb42fc0d7c7d3057e321308bb86468" }, "downloads": -1, "filename": "pybrake-0.3.3.tar.gz", "has_sig": false, "md5_digest": "b4a5ccd908e8ecc37c58220f19937543", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11385, "upload_time": "2018-05-25T10:59:40", "url": "https://files.pythonhosted.org/packages/14/0d/383172089294df679b70e3c51718b76c032ae1d3c597562dbcc78a4b0675/pybrake-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "35a1408f5a5e66d651d9f2108e89dfa2", "sha256": "32068d0315fa1d3b793ddc71424aafdcd1553e55f200fb7616968290539ad7cb" }, "downloads": -1, "filename": "pybrake-0.3.4.tar.gz", "has_sig": false, "md5_digest": "35a1408f5a5e66d651d9f2108e89dfa2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12205, "upload_time": "2018-07-03T11:22:13", "url": "https://files.pythonhosted.org/packages/8c/50/340ac06429089faa68298570c9ac14233df2d19d402c19ee3779ef4d3e7b/pybrake-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "a24516268c6322c3d9f8d45b3ead3d42", "sha256": "c63c308e8e3fcfd5daacffb52c9c9672943dc692a10957f8abf9658fdd5e9735" }, "downloads": -1, "filename": "pybrake-0.3.5.tar.gz", "has_sig": false, "md5_digest": "a24516268c6322c3d9f8d45b3ead3d42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12279, "upload_time": "2018-08-11T06:11:18", "url": "https://files.pythonhosted.org/packages/a2/4f/33445fb44d642b605b5e4a30d37ff7b2749134433a4b20182a2714a3bd0e/pybrake-0.3.5.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f379fa94c21c50311b1a9cf2953f3232", "sha256": "0116bceceb94157f51b9af961e7b23e0dfecc6ea85f567bd2533ab24186ea0cd" }, "downloads": -1, "filename": "pybrake-0.4.0.tar.gz", "has_sig": false, "md5_digest": "f379fa94c21c50311b1a9cf2953f3232", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26866, "upload_time": "2019-06-20T12:50:14", "url": "https://files.pythonhosted.org/packages/d8/a5/e04a19105bcf7a3cfb5fdc499c51d7794b5a28dd0c6f708396b8681cf61a/pybrake-0.4.0.tar.gz" } ], "0.4.0b0": [ { "comment_text": "", "digests": { "md5": "bbebc0519e20aef067f17cbcbb817ad1", "sha256": "e822ebcfcd2561b64ae80fe3cd3982a14a9adf88ad7c90c85d87c2bf9fbe0d23" }, "downloads": -1, "filename": "pybrake-0.4.0b0.tar.gz", "has_sig": false, "md5_digest": "bbebc0519e20aef067f17cbcbb817ad1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19870, "upload_time": "2018-10-18T10:24:35", "url": "https://files.pythonhosted.org/packages/31/ba/5cdbde4432a957f0d064f223f76375c97631b58a505338bff68c9600329e/pybrake-0.4.0b0.tar.gz" } ], "0.4.0b2": [ { "comment_text": "", "digests": { "md5": "946e0ff3ce730d3961d2ab9c0734015e", "sha256": "10489940759fd0aa04e53adbcef5fdb4b2a66b0dcd53297c8c67677cc2440fa3" }, "downloads": -1, "filename": "pybrake-0.4.0b2.tar.gz", "has_sig": false, "md5_digest": "946e0ff3ce730d3961d2ab9c0734015e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23104, "upload_time": "2019-03-03T12:18:46", "url": "https://files.pythonhosted.org/packages/2a/44/575199a2ca7f88f22b4214cb59fa485bc8499f8a627465ac0986d5ca3446/pybrake-0.4.0b2.tar.gz" } ], "0.4.0b3": [ { "comment_text": "", "digests": { "md5": "a7be81f0a6ab65356572bb8812b22299", "sha256": "3afded7a9c4cfa6939c8e61e608c0937faf8a65c2f0ce2e8cd980001268e9064" }, "downloads": -1, "filename": "pybrake-0.4.0b3.tar.gz", "has_sig": false, "md5_digest": "a7be81f0a6ab65356572bb8812b22299", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23113, "upload_time": "2019-03-08T13:27:47", "url": "https://files.pythonhosted.org/packages/fb/53/5ee56b7bec2bad780e4abb25c1b756bee1273b0a80d998deaf98dd2d98b1/pybrake-0.4.0b3.tar.gz" } ], "0.4.0b4": [ { "comment_text": "", "digests": { "md5": "bd5bcfdb753ec741bfe3ed62c73208f8", "sha256": "9b059feea62fb4acfdba016a9107228512605c761f4ed0cfd8af18785483ca48" }, "downloads": -1, "filename": "pybrake-0.4.0b4.tar.gz", "has_sig": false, "md5_digest": "bd5bcfdb753ec741bfe3ed62c73208f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23137, "upload_time": "2019-03-08T13:36:19", "url": "https://files.pythonhosted.org/packages/09/11/d007f8dfede74e2dfb13b21b1ee5ce23d5f9c3d5f19fd06b53331b5d9bf8/pybrake-0.4.0b4.tar.gz" } ], "0.4.0b5": [ { "comment_text": "", "digests": { "md5": "4b2187c99a66ad8c38d1aa6c7e988512", "sha256": "ac55df0b97880596f9b190e88531a16c7bc34295b92298ec448d5ef27e73209d" }, "downloads": -1, "filename": "pybrake-0.4.0b5.tar.gz", "has_sig": false, "md5_digest": "4b2187c99a66ad8c38d1aa6c7e988512", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23144, "upload_time": "2019-03-13T14:22:31", "url": "https://files.pythonhosted.org/packages/21/2b/ca2d5c71b4cc36b761365740730ebe330e596f097376207a70433103fa6e/pybrake-0.4.0b5.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "e9ca68de24242e1c3af51aa1bd80599f", "sha256": "adf7bf6fa19116581695e224c3425305aae033cdba622c02d475f8442f3c7827" }, "downloads": -1, "filename": "pybrake-0.4.1.tar.gz", "has_sig": false, "md5_digest": "e9ca68de24242e1c3af51aa1bd80599f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24898, "upload_time": "2019-07-16T10:24:40", "url": "https://files.pythonhosted.org/packages/1a/1f/eccf26372d00c468b597881a7088f6d5387b18c19b5126669a55efde1f5d/pybrake-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "888f543988ef63bcd030d9aeb03cb976", "sha256": "6a2a150a1fab83d7004acee78fceb9e546fc1fcb425fc4e4bf535c0fe44b2932" }, "downloads": -1, "filename": "pybrake-0.4.2.tar.gz", "has_sig": false, "md5_digest": "888f543988ef63bcd030d9aeb03cb976", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27286, "upload_time": "2019-09-17T12:21:49", "url": "https://files.pythonhosted.org/packages/02/11/001d4beb1863b3bb84cb0fd5c8009ac05b6dc78aa3b8d88ed7cd7547d417/pybrake-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "888f543988ef63bcd030d9aeb03cb976", "sha256": "6a2a150a1fab83d7004acee78fceb9e546fc1fcb425fc4e4bf535c0fe44b2932" }, "downloads": -1, "filename": "pybrake-0.4.2.tar.gz", "has_sig": false, "md5_digest": "888f543988ef63bcd030d9aeb03cb976", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27286, "upload_time": "2019-09-17T12:21:49", "url": "https://files.pythonhosted.org/packages/02/11/001d4beb1863b3bb84cb0fd5c8009ac05b6dc78aa3b8d88ed7cd7547d417/pybrake-0.4.2.tar.gz" } ] }