{ "info": { "author": "Timo Furrer", "author_email": "tuxtimo@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "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.
\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': [], 'error': []}\n>>> obs.get_handlers(\"success\")\n[]\n>>> obs.get_handlers(\"other_event\")\n[]\n```\n\n***\n\n*

This project is published under [MIT](LICENSE).
A [Timo Furrer](https://tuxtimo.me) project.
- :tada: -

*\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/timofurrer/observable", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "observable", "package_url": "https://pypi.org/project/observable/", "platform": "", "project_url": "https://pypi.org/project/observable/", "project_urls": { "Homepage": "https://github.com/timofurrer/observable" }, "release_url": "https://pypi.org/project/observable/1.0.3/", "requires_dist": null, "requires_python": "", "summary": "minimalist event system", "version": "1.0.3" }, "last_serial": 4292801, "releases": { "0.00.01": [ { "comment_text": "", "digests": { "md5": "e352c8be32ee859b30be2354413de761", "sha256": "5c1d28751a86e0354779f52b61a51fda831ee66420f241f81ad5b46404a35c2e" }, "downloads": -1, "filename": "observable-0.00.01.tar.gz", "has_sig": false, "md5_digest": "e352c8be32ee859b30be2354413de761", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2839, "upload_time": "2013-03-28T10:27:48", "url": "https://files.pythonhosted.org/packages/66/d3/b4da6572a086463b7a95416f1b7d1963db3951280323c49c6a94883dcbf3/observable-0.00.01.tar.gz" } ], "0.00.02": [ { "comment_text": "", "digests": { "md5": "ecddd98a98c52263e03ddfbb67cd3b5b", "sha256": "ef278c1a3e0b7bb15813cfd5f2121e3f0018f1768e3b02afc417058059fca124" }, "downloads": -1, "filename": "observable-0.00.02.tar.gz", "has_sig": false, "md5_digest": "ecddd98a98c52263e03ddfbb67cd3b5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2872, "upload_time": "2013-03-28T10:38:32", "url": "https://files.pythonhosted.org/packages/53/a5/ec78332d400eb104ef7526a63ae8962374ab4ccdeb14f7d3eef7fe93a0b4/observable-0.00.02.tar.gz" } ], "0.00.03": [ { "comment_text": "", "digests": { "md5": "f99224bf5e2e46f7a90b5a790f5fb489", "sha256": "0ac95d135748ea7034ab2df9928c2ad63a71392883389b54221e4b1f9e3360a6" }, "downloads": -1, "filename": "observable-0.00.03.tar.gz", "has_sig": false, "md5_digest": "f99224bf5e2e46f7a90b5a790f5fb489", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2876, "upload_time": "2013-03-28T10:39:55", "url": "https://files.pythonhosted.org/packages/70/8f/510d91a8ce6f9a3f151bd44068f8ea6745e584c6eeec0d582e0e3da82b9a/observable-0.00.03.tar.gz" } ], "0.01.00": [ { "comment_text": "", "digests": { "md5": "b615485701f14d81093be4ebdfa75af5", "sha256": "f8d442b855c5fe7e45942c245602847710619263866197ea832c0085425bd338" }, "downloads": -1, "filename": "observable-0.01.00.tar.gz", "has_sig": false, "md5_digest": "b615485701f14d81093be4ebdfa75af5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2231, "upload_time": "2013-12-14T18:43:46", "url": "https://files.pythonhosted.org/packages/f2/21/cc946fa7ea43e687c36fe5f02171fe3bae687be0fa5b9b35f85f157cb9c0/observable-0.01.00.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "1791b3354e3a9d010630c6936b6fca23", "sha256": "3fa7c92cc7d09ba0d41a5113d147cf7cc4e32a080454f82b476854de79e5f8e5" }, "downloads": -1, "filename": "observable-0.3.0.tar.gz", "has_sig": false, "md5_digest": "1791b3354e3a9d010630c6936b6fca23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2308, "upload_time": "2016-02-07T02:13:22", "url": "https://files.pythonhosted.org/packages/b1/ca/b2bf35d82ac2533bfab4f34e3192992e8c5fd78510154cc026bdab41edba/observable-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "25d52876d589d72b2a0d5e1b145d5219", "sha256": "8dfb19d548d98eb739e5f7873f6598acab6fdc17505935c9e2fc50c36da88063" }, "downloads": -1, "filename": "observable-0.3.1.tar.gz", "has_sig": false, "md5_digest": "25d52876d589d72b2a0d5e1b145d5219", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2307, "upload_time": "2016-02-07T02:15:14", "url": "https://files.pythonhosted.org/packages/a0/fc/d02287098b688c898f0fc15dc51de545f24d6f2a7017bfc0214c69d12ffd/observable-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "f83e7c63299bc680f769d57770e747a4", "sha256": "1c9fe3e05d3047e900d39f98a514611a29bb81c1aa459c5d7fad669743712d4e" }, "downloads": -1, "filename": "observable-0.3.2.tar.gz", "has_sig": false, "md5_digest": "f83e7c63299bc680f769d57770e747a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2355, "upload_time": "2017-03-11T22:14:49", "url": "https://files.pythonhosted.org/packages/cc/88/448d24481afa4861d7b095014aab2ffac120137accdc8f76494fd315f2dc/observable-0.3.2.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "c67c2d18fd35b2c9fbae55e1ead3543d", "sha256": "48d31585b1e9ee48c1f69565ca635f85f58736539e13d320d04d72d5be95020f" }, "downloads": -1, "filename": "observable-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c67c2d18fd35b2c9fbae55e1ead3543d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8009, "upload_time": "2018-09-20T13:55:30", "url": "https://files.pythonhosted.org/packages/85/e6/1359542ac880c0d8d1db0c2d75fe247255ea26c4a30ef4f4d04d6c289ac2/observable-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "68a7d05d8ccad1b1e8539e1515656fb9", "sha256": "113e5b4df6c50c2459da419fe2aa1f770e0caf2f25a203d3dd396f7fc1f13983" }, "downloads": -1, "filename": "observable-1.0.2.tar.gz", "has_sig": false, "md5_digest": "68a7d05d8ccad1b1e8539e1515656fb9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5749, "upload_time": "2018-09-20T13:55:32", "url": "https://files.pythonhosted.org/packages/42/00/530ff4b163a88a48066a10ef4188349ec53fa9ee066fdd5cce530ec6e8a2/observable-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "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", "url": "https://files.pythonhosted.org/packages/45/7c/b4b63f447378e8a0ebcd338d90f9389f57fb23253127425beacf0129edcb/observable-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "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", "url": "https://files.pythonhosted.org/packages/24/57/013c2610cf93f9ae87e522be17d679bcba0e7cee2cd8da4dc8efddef1138/observable-1.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "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", "url": "https://files.pythonhosted.org/packages/45/7c/b4b63f447378e8a0ebcd338d90f9389f57fb23253127425beacf0129edcb/observable-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "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", "url": "https://files.pythonhosted.org/packages/24/57/013c2610cf93f9ae87e522be17d679bcba0e7cee2cd8da4dc8efddef1138/observable-1.0.3.tar.gz" } ] }