# observable
[![Build Status](https://travis-ci.com/timofurrer/observable.svg?branch=master)](https://travis-ci.com/timofurrer/observable)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
**pyobservable** is a minimalist event system for python. It provides you an easy-to-use interface to trigger arbitrary functions when specific events occur.
```python
from observable import Observable
obs = Observable()
@obs.on("error")
def error_handler(message):
# do some fancy error handling
logging.error(f"An error occured: {message}")
...
def do_time_travel():
# do some time traveling
...
if year != 1291:
obs.trigger("error", "Time travel to 1291 didn't work")
```
**Note:** We are Python 3 only! Only Python Versions >= 3.5 are supported. Use [v0.3.2](https://pypi.org/project/observable/0.3.2/) for older Python Versions.
## How to use
Use a `pip` to install it from PyPI:
pip install observable
After completion you can start using `observable`:
```python
from observable import Observable
obs = Observable()
```
## Usage
### `on`: Register event handler with `on`
There are two ways to register a function to an event.<br />
The first way is to register the event with a decorator like this:
```python
@obs.on("error")
def error_func(message):
print("Error: %s" % message)
```
The second way is to register it with a method call:
```python
def error_func(message):
print("Error: %s" % message)
obs.on("error", error_func)
```
### `once`: Register event handler with `once`
`once` works like `on`, but once the event handler is triggered it will be removed and cannot be triggered again.
### `trigger`: trigger event
You can trigger a registered event with the `trigger` method:
```python
obs.trigger("error", "This is my error message")
```
If no handler for the event `error` could be found an `Observable.NoHandlerFound`-Exception will be raised.
### `off`: remove handler and events
Remove a handler from a specified event:
```python
obs.off("error", error_func)
```
```python
obs.off("error", [error_func, second_error_func])
```
Remove all handlers from a specified event:
```python
obs.off("error")
```
Clear all events:
```python
obs.off()
```
### `get_all_handlers`, `get_handlers` and `is_registered`: Check which handlers are registered
Imagine you registered the following handlers:
```python
@obs.on("success")
def success_func():
print("Success!")
@obs.on("error")
def error_func(message):
print("Error: %s" % message)
```
Then you can do the following to inspect the registered handlers:
```python
>>> obs.get_all_handlers()
{'success': [<function success_func at 0x7f7f32d0a1e0>], 'error': [<function error_func at 0x7f7f32d0a268>]}
>>> obs.get_handlers("success")
[<function success_func at 0x7f7f32d0a1e0>]
>>> obs.get_handlers("other_event")
[]
```
***
*<p align="center">This project is published under [MIT](LICENSE).<br>A [Timo Furrer](https://tuxtimo.me) project.<br>- :tada: -</p>*
Raw data
{
"_id": null,
"home_page": "https://github.com/timofurrer/observable",
"name": "observable",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Timo Furrer",
"author_email": "tuxtimo@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/24/57/013c2610cf93f9ae87e522be17d679bcba0e7cee2cd8da4dc8efddef1138/observable-1.0.3.tar.gz",
"platform": "",
"description": "# observable\n[![Build Status](https://travis-ci.com/timofurrer/observable.svg?branch=master)](https://travis-ci.com/timofurrer/observable)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n\n**pyobservable** is a minimalist event system for python. It provides you an easy-to-use interface to trigger arbitrary functions when specific events occur.\n\n```python\nfrom observable import Observable\n\nobs = Observable()\n\n@obs.on(\"error\")\ndef error_handler(message):\n # do some fancy error handling\n logging.error(f\"An error occured: {message}\")\n\n...\n\ndef do_time_travel():\n # do some time traveling\n ...\n if year != 1291:\n obs.trigger(\"error\", \"Time travel to 1291 didn't work\")\n```\n\n**Note:** We are Python 3 only! Only Python Versions >= 3.5 are supported. Use [v0.3.2](https://pypi.org/project/observable/0.3.2/) for older Python Versions.\n\n## How to use\n\nUse a `pip` to install it from PyPI:\n\n pip install observable\n\nAfter completion you can start using `observable`:\n\n```python\nfrom observable import Observable\n\nobs = Observable()\n```\n\n## Usage\n\n### `on`: Register event handler with `on`\nThere are two ways to register a function to an event.<br />\nThe first way is to register the event with a decorator like this:\n\n```python\n@obs.on(\"error\")\ndef error_func(message):\n print(\"Error: %s\" % message)\n```\n\nThe second way is to register it with a method call:\n\n```python\ndef error_func(message):\n print(\"Error: %s\" % message)\nobs.on(\"error\", error_func)\n```\n\n### `once`: Register event handler with `once`\n`once` works like `on`, but once the event handler is triggered it will be removed and cannot be triggered again.\n\n### `trigger`: trigger event\nYou can trigger a registered event with the `trigger` method:\n\n```python\nobs.trigger(\"error\", \"This is my error message\")\n```\n\nIf no handler for the event `error` could be found an `Observable.NoHandlerFound`-Exception will be raised.\n\n### `off`: remove handler and events\nRemove a handler from a specified event:\n\n```python\nobs.off(\"error\", error_func)\n```\n\n```python\nobs.off(\"error\", [error_func, second_error_func])\n```\n\nRemove all handlers from a specified event:\n\n```python\nobs.off(\"error\")\n```\n\nClear all events:\n\n```python\nobs.off()\n```\n\n### `get_all_handlers`, `get_handlers` and `is_registered`: Check which handlers are registered\nImagine you registered the following handlers:\n\n```python\n@obs.on(\"success\")\ndef success_func():\n print(\"Success!\")\n\n@obs.on(\"error\")\ndef error_func(message):\n print(\"Error: %s\" % message)\n```\n\nThen you can do the following to inspect the registered handlers:\n```python\n>>> obs.get_all_handlers()\n{'success': [<function success_func at 0x7f7f32d0a1e0>], 'error': [<function error_func at 0x7f7f32d0a268>]}\n>>> obs.get_handlers(\"success\")\n[<function success_func at 0x7f7f32d0a1e0>]\n>>> obs.get_handlers(\"other_event\")\n[]\n```\n\n***\n\n*<p align=\"center\">This project is published under [MIT](LICENSE).<br>A [Timo Furrer](https://tuxtimo.me) project.<br>- :tada: -</p>*\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "minimalist event system",
"version": "1.0.3",
"project_urls": {
"Homepage": "https://github.com/timofurrer/observable"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "457cb4b63f447378e8a0ebcd338d90f9389f57fb23253127425beacf0129edcb",
"md5": "3c6c86918bc68c3556b27ff4e21602c3",
"sha256": "955a721a225fe3a1df28b58c0d7add38e08cd49afd88d14669b2884410f47d10"
},
"downloads": -1,
"filename": "observable-1.0.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "3c6c86918bc68c3556b27ff4e21602c3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 8056,
"upload_time": "2018-09-20T13:58:14",
"upload_time_iso_8601": "2018-09-20T13:58:14.981096Z",
"url": "https://files.pythonhosted.org/packages/45/7c/b4b63f447378e8a0ebcd338d90f9389f57fb23253127425beacf0129edcb/observable-1.0.3-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2457013c2610cf93f9ae87e522be17d679bcba0e7cee2cd8da4dc8efddef1138",
"md5": "c023b66b93c2c24936c1ccafc23877da",
"sha256": "97fe8e9d8c2a6185cee3661fa5fba9ce38c7ba388894132940cd6a81633626d9"
},
"downloads": -1,
"filename": "observable-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "c023b66b93c2c24936c1ccafc23877da",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5793,
"upload_time": "2018-09-20T13:58:16",
"upload_time_iso_8601": "2018-09-20T13:58:16.444123Z",
"url": "https://files.pythonhosted.org/packages/24/57/013c2610cf93f9ae87e522be17d679bcba0e7cee2cd8da4dc8efddef1138/observable-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2018-09-20 13:58:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "timofurrer",
"github_project": "observable",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"tox": true,
"lcname": "observable"
}