observable


Nameobservable JSON
Version 1.0.3 PyPI version JSON
download
home_pagehttps://github.com/timofurrer/observable
Summaryminimalist event system
upload_time2018-09-20 13:58:16
maintainer
docs_urlNone
authorTimo Furrer
requires_python
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.09334s