diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-11 18:05:43 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 18:05:43 +0000 |
| commit | a1cd10926c52de45c9e84bb6ea78bebc8b56cb46 (patch) | |
| tree | f4106701ee646fd7aa2506c911f2920f3ac49f1d /python-pybrake.spec | |
| parent | 8ffe9e28b6b4530264ad5328d176416b53bb5884 (diff) | |
automatic import of python-pybrake
Diffstat (limited to 'python-pybrake.spec')
| -rw-r--r-- | python-pybrake.spec | 819 |
1 files changed, 819 insertions, 0 deletions
diff --git a/python-pybrake.spec b/python-pybrake.spec new file mode 100644 index 0000000..e9f9438 --- /dev/null +++ b/python-pybrake.spec @@ -0,0 +1,819 @@ +%global _empty_manifest_terminate_build 0 +Name: python-pybrake +Version: 1.10.1 +Release: 1 +Summary: Python exception notifier for Airbrake +License: MIT +URL: http://github.com/airbrake/pybrake +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/e1/b6/60cc1574170587a6e26d22a461a4b1c204a6e68ebeef3fafb1b933425254/pybrake-1.10.1.tar.gz +BuildArch: noarch + + +%description +# Python exception notifier for Airbrake + + + +## Installation + +pybrake requires Python 3.6+. + +``` shell +pip install -U pybrake +``` + +## Configuration + +You **must** set both `project_id` & `project_key`. + +To find your `project_id` and `project_key` navigate to your project's +_Settings_ and copy the values from the right sidebar. + +![project-idkey] + +```python +import pybrake + +notifier = pybrake.Notifier(project_id=123, + project_key='FIXME', + environment='production') +``` + +## Sending errors to Airbrake + +```python +try: + raise ValueError('hello') +except Exception as err: + notifier.notify(err) +``` + +### Sending errors synchronously + +By default, the `notify` function sends errors asynchronously using +`ThreadPoolExecutor` and returns a `concurrent.futures.Future`, a synchronous +API is also made available with the `notify_sync` function: + +```python +notice = notifier.notify_sync(err) +if 'id' in notice: + print(notice['id']) +else: + print(notice['error']) +``` + +## Adding custom params + +To set custom params you can build and send notice in separate steps: + +```python +notice = notifier.build_notice(err) +notice['params']['myparam'] = 'myvalue' +notifier.send_notice(notice) +``` + +You can also add custom params to every error notice before it's sent to Airbrake +with the `add_filter` function. + +```python +def my_filter(notice): + notice['params']['myparam'] = 'myvalue' + return notice + +notifier.add_filter(my_filter) +``` + +## Ignoring notices + +There may be some notices/errors thrown in your application that you're not +interested in sending to Airbrake, you can ignore these using the `add_filter` +function. + +```python +def my_filter(notice): + if notice['context']['environment'] == 'development': + # Ignore notices in development environment. + return None + return notice + +notifier.add_filter(my_filter) +``` + +## Filtering keys + +With `keys_blocklist` option you can specify list of keys containing sensitive information that must be filtered out, e.g.: + +```python +notifier = pybrake.Notifier( + ... + keys_blocklist=[ + 'password', # exact match + re.compile('secret'), # regexp match + ], +) +``` + +## Logging integration + +pybrake provides a logging handler that sends your logs to Airbrake. + +```python +import logging +import pybrake + + +airbrake_handler = pybrake.LoggingHandler(notifier=notifier, + level=logging.ERROR) + +logger = logging.getLogger('test') +logger.addHandler(airbrake_handler) + +logger.error('something bad happened') +``` + +## Disabling pybrake logs + +The pybrake logger can be silenced by setting the logging level to +`logging.CRITICAL`. + +``` python +import logging + + +logging.getLogger("pybrake").setLevel(logging.CRITICAL) +``` + +## Sending route stats + +`notifier.routes.notify` allows sending route stats to Airbrake. The library +provides integrations with Django and Flask. (your routes are tracked +automatically). You can also use this API manually: + +```py +from pybrake import RouteMetric + +metric = RouteMetric(method=request.method, route=route) +metric.status_code = response.status_code +metric.content_type = response.headers.get("Content-Type") +metric.end_time = time.time() + +notifier.routes.notify(metric) +``` + +## Sending route breakdowns + +`notifier.routes.breakdowns.notify` allows sending performance breakdown stats +to Airbrake. You can use this API manually: + +```py +from pybrake import RouteMetric + +metric = RouteMetric( + method=request.method, + route='/things/1', + status_code=200, + content_type=response.headers.get('Content-Type')) +metric._groups = {'db': 12.34, 'view': 56.78} +metric.end_time=time.time() + +notifier.routes.breakdowns.notify(metric) +``` + +## Sending query stats + +`notifier.queries.notify` allows sending SQL query stats to Airbrake. The +library provides integration with Django (your queries are tracked +automatically). You can also use this API manually: + +```py +notifier.queries.notify( + query="SELECT * FROM foos", + method=request.method, + route=route, + function="test", + file="test", + line=10, + start_time=time.time(), + end_time=time.time(), +) +``` + +## Sending queue stats + +`notifier.queues.notify` allows sending queue (job) stats to Airbrake. The +library provides integration with Celery (your queues are tracked +automatically). You can also use this API manually: + +```py +from pybrake import QueueMetric + +metric = QueueMetric(queue="foo_queue") +metric._groups = {'redis': 24.0, 'sql': 0.4} +notifier.queues.notify(metric) +``` + +## Framework Integration + +Pybrake provides a ready-to-use solution with minimal configuration for python +frameworks. + +* [AIOHTTP](https://docs.airbrake.io/docs/platforms/framework/python/aiohttp) +* [BottlePy](https://docs.airbrake.io/docs/platforms/framework/python/bottle) +* [Celery](https://docs.airbrake.io/docs/platforms/framework/python/celery) +* [CherryPy](https://docs.airbrake.io/docs/platforms/framework/python/cherrypy) +* [Django](https://docs.airbrake.io/docs/platforms/framework/python/django) +* [FastAPI](https://docs.airbrake.io/docs/platforms/framework/python/fastapi) +* [Falcon](https://docs.airbrake.io/docs/platforms/framework/python/falcon) +* [Flask](https://docs.airbrake.io/docs/platforms/framework/python/flask) +* [Hug](https://docs.airbrake.io/docs/platforms/framework/python/hug) +* [Masonite](https://docs.airbrake.io/docs/platforms/framework/python/masonite) +* [Pycnic](https://docs.airbrake.io/docs/platforms/framework/python/pycnic) +* [Pyramid](https://docs.airbrake.io/docs/platforms/framework/python/pyramid) +* [Sanic](https://docs.airbrake.io/docs/platforms/framework/python/sanic) +* [Starlette](https://docs.airbrake.io//docs/platforms/framework/python/starlette) +* [Tornado](https://docs.airbrake.io//docs/platforms/framework/python/tornado) +* [Turbogears2](https://docs.airbrake.io//docs/platforms/framework/python/turbogears2) + +## Development + +### Running the tests + +```shell +pip install -r requirements.txt +pip install -r test-requirements.txt +pytest +``` + +### Uploading to PyPI + +```shell +python setup.py sdist upload +``` + +### Remote configuration + +Every 10 minutes the notifier issues an HTTP GET request to fetch remote +configuration. This might be undesirable while running tests. To suppress this +HTTP call, you need to pass `remote_config=False` to the notifier. + +[project-idkey]: https://s3.amazonaws.com/airbrake-github-assets/pybrake/project-id-key.png + + + + +%package -n python3-pybrake +Summary: Python exception notifier for Airbrake +Provides: python-pybrake +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-pybrake +# Python exception notifier for Airbrake + + + +## Installation + +pybrake requires Python 3.6+. + +``` shell +pip install -U pybrake +``` + +## Configuration + +You **must** set both `project_id` & `project_key`. + +To find your `project_id` and `project_key` navigate to your project's +_Settings_ and copy the values from the right sidebar. + +![project-idkey] + +```python +import pybrake + +notifier = pybrake.Notifier(project_id=123, + project_key='FIXME', + environment='production') +``` + +## Sending errors to Airbrake + +```python +try: + raise ValueError('hello') +except Exception as err: + notifier.notify(err) +``` + +### Sending errors synchronously + +By default, the `notify` function sends errors asynchronously using +`ThreadPoolExecutor` and returns a `concurrent.futures.Future`, a synchronous +API is also made available with the `notify_sync` function: + +```python +notice = notifier.notify_sync(err) +if 'id' in notice: + print(notice['id']) +else: + print(notice['error']) +``` + +## Adding custom params + +To set custom params you can build and send notice in separate steps: + +```python +notice = notifier.build_notice(err) +notice['params']['myparam'] = 'myvalue' +notifier.send_notice(notice) +``` + +You can also add custom params to every error notice before it's sent to Airbrake +with the `add_filter` function. + +```python +def my_filter(notice): + notice['params']['myparam'] = 'myvalue' + return notice + +notifier.add_filter(my_filter) +``` + +## Ignoring notices + +There may be some notices/errors thrown in your application that you're not +interested in sending to Airbrake, you can ignore these using the `add_filter` +function. + +```python +def my_filter(notice): + if notice['context']['environment'] == 'development': + # Ignore notices in development environment. + return None + return notice + +notifier.add_filter(my_filter) +``` + +## Filtering keys + +With `keys_blocklist` option you can specify list of keys containing sensitive information that must be filtered out, e.g.: + +```python +notifier = pybrake.Notifier( + ... + keys_blocklist=[ + 'password', # exact match + re.compile('secret'), # regexp match + ], +) +``` + +## Logging integration + +pybrake provides a logging handler that sends your logs to Airbrake. + +```python +import logging +import pybrake + + +airbrake_handler = pybrake.LoggingHandler(notifier=notifier, + level=logging.ERROR) + +logger = logging.getLogger('test') +logger.addHandler(airbrake_handler) + +logger.error('something bad happened') +``` + +## Disabling pybrake logs + +The pybrake logger can be silenced by setting the logging level to +`logging.CRITICAL`. + +``` python +import logging + + +logging.getLogger("pybrake").setLevel(logging.CRITICAL) +``` + +## Sending route stats + +`notifier.routes.notify` allows sending route stats to Airbrake. The library +provides integrations with Django and Flask. (your routes are tracked +automatically). You can also use this API manually: + +```py +from pybrake import RouteMetric + +metric = RouteMetric(method=request.method, route=route) +metric.status_code = response.status_code +metric.content_type = response.headers.get("Content-Type") +metric.end_time = time.time() + +notifier.routes.notify(metric) +``` + +## Sending route breakdowns + +`notifier.routes.breakdowns.notify` allows sending performance breakdown stats +to Airbrake. You can use this API manually: + +```py +from pybrake import RouteMetric + +metric = RouteMetric( + method=request.method, + route='/things/1', + status_code=200, + content_type=response.headers.get('Content-Type')) +metric._groups = {'db': 12.34, 'view': 56.78} +metric.end_time=time.time() + +notifier.routes.breakdowns.notify(metric) +``` + +## Sending query stats + +`notifier.queries.notify` allows sending SQL query stats to Airbrake. The +library provides integration with Django (your queries are tracked +automatically). You can also use this API manually: + +```py +notifier.queries.notify( + query="SELECT * FROM foos", + method=request.method, + route=route, + function="test", + file="test", + line=10, + start_time=time.time(), + end_time=time.time(), +) +``` + +## Sending queue stats + +`notifier.queues.notify` allows sending queue (job) stats to Airbrake. The +library provides integration with Celery (your queues are tracked +automatically). You can also use this API manually: + +```py +from pybrake import QueueMetric + +metric = QueueMetric(queue="foo_queue") +metric._groups = {'redis': 24.0, 'sql': 0.4} +notifier.queues.notify(metric) +``` + +## Framework Integration + +Pybrake provides a ready-to-use solution with minimal configuration for python +frameworks. + +* [AIOHTTP](https://docs.airbrake.io/docs/platforms/framework/python/aiohttp) +* [BottlePy](https://docs.airbrake.io/docs/platforms/framework/python/bottle) +* [Celery](https://docs.airbrake.io/docs/platforms/framework/python/celery) +* [CherryPy](https://docs.airbrake.io/docs/platforms/framework/python/cherrypy) +* [Django](https://docs.airbrake.io/docs/platforms/framework/python/django) +* [FastAPI](https://docs.airbrake.io/docs/platforms/framework/python/fastapi) +* [Falcon](https://docs.airbrake.io/docs/platforms/framework/python/falcon) +* [Flask](https://docs.airbrake.io/docs/platforms/framework/python/flask) +* [Hug](https://docs.airbrake.io/docs/platforms/framework/python/hug) +* [Masonite](https://docs.airbrake.io/docs/platforms/framework/python/masonite) +* [Pycnic](https://docs.airbrake.io/docs/platforms/framework/python/pycnic) +* [Pyramid](https://docs.airbrake.io/docs/platforms/framework/python/pyramid) +* [Sanic](https://docs.airbrake.io/docs/platforms/framework/python/sanic) +* [Starlette](https://docs.airbrake.io//docs/platforms/framework/python/starlette) +* [Tornado](https://docs.airbrake.io//docs/platforms/framework/python/tornado) +* [Turbogears2](https://docs.airbrake.io//docs/platforms/framework/python/turbogears2) + +## Development + +### Running the tests + +```shell +pip install -r requirements.txt +pip install -r test-requirements.txt +pytest +``` + +### Uploading to PyPI + +```shell +python setup.py sdist upload +``` + +### Remote configuration + +Every 10 minutes the notifier issues an HTTP GET request to fetch remote +configuration. This might be undesirable while running tests. To suppress this +HTTP call, you need to pass `remote_config=False` to the notifier. + +[project-idkey]: https://s3.amazonaws.com/airbrake-github-assets/pybrake/project-id-key.png + + + + +%package help +Summary: Development documents and examples for pybrake +Provides: python3-pybrake-doc +%description help +# Python exception notifier for Airbrake + + + +## Installation + +pybrake requires Python 3.6+. + +``` shell +pip install -U pybrake +``` + +## Configuration + +You **must** set both `project_id` & `project_key`. + +To find your `project_id` and `project_key` navigate to your project's +_Settings_ and copy the values from the right sidebar. + +![project-idkey] + +```python +import pybrake + +notifier = pybrake.Notifier(project_id=123, + project_key='FIXME', + environment='production') +``` + +## Sending errors to Airbrake + +```python +try: + raise ValueError('hello') +except Exception as err: + notifier.notify(err) +``` + +### Sending errors synchronously + +By default, the `notify` function sends errors asynchronously using +`ThreadPoolExecutor` and returns a `concurrent.futures.Future`, a synchronous +API is also made available with the `notify_sync` function: + +```python +notice = notifier.notify_sync(err) +if 'id' in notice: + print(notice['id']) +else: + print(notice['error']) +``` + +## Adding custom params + +To set custom params you can build and send notice in separate steps: + +```python +notice = notifier.build_notice(err) +notice['params']['myparam'] = 'myvalue' +notifier.send_notice(notice) +``` + +You can also add custom params to every error notice before it's sent to Airbrake +with the `add_filter` function. + +```python +def my_filter(notice): + notice['params']['myparam'] = 'myvalue' + return notice + +notifier.add_filter(my_filter) +``` + +## Ignoring notices + +There may be some notices/errors thrown in your application that you're not +interested in sending to Airbrake, you can ignore these using the `add_filter` +function. + +```python +def my_filter(notice): + if notice['context']['environment'] == 'development': + # Ignore notices in development environment. + return None + return notice + +notifier.add_filter(my_filter) +``` + +## Filtering keys + +With `keys_blocklist` option you can specify list of keys containing sensitive information that must be filtered out, e.g.: + +```python +notifier = pybrake.Notifier( + ... + keys_blocklist=[ + 'password', # exact match + re.compile('secret'), # regexp match + ], +) +``` + +## Logging integration + +pybrake provides a logging handler that sends your logs to Airbrake. + +```python +import logging +import pybrake + + +airbrake_handler = pybrake.LoggingHandler(notifier=notifier, + level=logging.ERROR) + +logger = logging.getLogger('test') +logger.addHandler(airbrake_handler) + +logger.error('something bad happened') +``` + +## Disabling pybrake logs + +The pybrake logger can be silenced by setting the logging level to +`logging.CRITICAL`. + +``` python +import logging + + +logging.getLogger("pybrake").setLevel(logging.CRITICAL) +``` + +## Sending route stats + +`notifier.routes.notify` allows sending route stats to Airbrake. The library +provides integrations with Django and Flask. (your routes are tracked +automatically). You can also use this API manually: + +```py +from pybrake import RouteMetric + +metric = RouteMetric(method=request.method, route=route) +metric.status_code = response.status_code +metric.content_type = response.headers.get("Content-Type") +metric.end_time = time.time() + +notifier.routes.notify(metric) +``` + +## Sending route breakdowns + +`notifier.routes.breakdowns.notify` allows sending performance breakdown stats +to Airbrake. You can use this API manually: + +```py +from pybrake import RouteMetric + +metric = RouteMetric( + method=request.method, + route='/things/1', + status_code=200, + content_type=response.headers.get('Content-Type')) +metric._groups = {'db': 12.34, 'view': 56.78} +metric.end_time=time.time() + +notifier.routes.breakdowns.notify(metric) +``` + +## Sending query stats + +`notifier.queries.notify` allows sending SQL query stats to Airbrake. The +library provides integration with Django (your queries are tracked +automatically). You can also use this API manually: + +```py +notifier.queries.notify( + query="SELECT * FROM foos", + method=request.method, + route=route, + function="test", + file="test", + line=10, + start_time=time.time(), + end_time=time.time(), +) +``` + +## Sending queue stats + +`notifier.queues.notify` allows sending queue (job) stats to Airbrake. The +library provides integration with Celery (your queues are tracked +automatically). You can also use this API manually: + +```py +from pybrake import QueueMetric + +metric = QueueMetric(queue="foo_queue") +metric._groups = {'redis': 24.0, 'sql': 0.4} +notifier.queues.notify(metric) +``` + +## Framework Integration + +Pybrake provides a ready-to-use solution with minimal configuration for python +frameworks. + +* [AIOHTTP](https://docs.airbrake.io/docs/platforms/framework/python/aiohttp) +* [BottlePy](https://docs.airbrake.io/docs/platforms/framework/python/bottle) +* [Celery](https://docs.airbrake.io/docs/platforms/framework/python/celery) +* [CherryPy](https://docs.airbrake.io/docs/platforms/framework/python/cherrypy) +* [Django](https://docs.airbrake.io/docs/platforms/framework/python/django) +* [FastAPI](https://docs.airbrake.io/docs/platforms/framework/python/fastapi) +* [Falcon](https://docs.airbrake.io/docs/platforms/framework/python/falcon) +* [Flask](https://docs.airbrake.io/docs/platforms/framework/python/flask) +* [Hug](https://docs.airbrake.io/docs/platforms/framework/python/hug) +* [Masonite](https://docs.airbrake.io/docs/platforms/framework/python/masonite) +* [Pycnic](https://docs.airbrake.io/docs/platforms/framework/python/pycnic) +* [Pyramid](https://docs.airbrake.io/docs/platforms/framework/python/pyramid) +* [Sanic](https://docs.airbrake.io/docs/platforms/framework/python/sanic) +* [Starlette](https://docs.airbrake.io//docs/platforms/framework/python/starlette) +* [Tornado](https://docs.airbrake.io//docs/platforms/framework/python/tornado) +* [Turbogears2](https://docs.airbrake.io//docs/platforms/framework/python/turbogears2) + +## Development + +### Running the tests + +```shell +pip install -r requirements.txt +pip install -r test-requirements.txt +pytest +``` + +### Uploading to PyPI + +```shell +python setup.py sdist upload +``` + +### Remote configuration + +Every 10 minutes the notifier issues an HTTP GET request to fetch remote +configuration. This might be undesirable while running tests. To suppress this +HTTP call, you need to pass `remote_config=False` to the notifier. + +[project-idkey]: https://s3.amazonaws.com/airbrake-github-assets/pybrake/project-id-key.png + + + + +%prep +%autosetup -n pybrake-1.10.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-pybrake -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 1.10.1-1 +- Package Spec generated |
