{ "info": { "author": "Kilte Leichnam", "author_email": "nwotnbm@gmail.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "========\nMediator\n========\n\nA library implements the Mediator pattern to make your code extensible.\n\nInspired by `symfony/event-dispatcher `_ component.\n\n.. image:: https://img.shields.io/travis/Kilte/mediator.svg?style=flat-square\n :target: https://travis-ci.org/Kilte/mediator\n\nInstallation\n============\n\nUsing pip:\n\n.. code:: sh\n\n # pip install mediator\n\nManually:\n\n.. code:: sh\n\n $ git clone https://github.com/Kilte/mediator\n $ cd mediator\n # python setup.py install\n\nUsage\n=====\n\n.. code:: python\n\n from mediator import Mediator\n\n m = Mediator()\n\nDefining events\n----------------------\n\n.. code:: python\n\n from mediator import Event\n\n\n class EventOne(Event):\n pass\n\n\n class EventTwo(Event):\n event_name = 'event_two'\n\nAdding a listener\n-----------------\n\n.. code:: python\n\n def event_listener(event):\n print('Got event: %r' % event)\n\n m.add_listener(EventOne, event_listener)\n # or m.add_listener('EventOne', event_listener)\n m.add_listener('event_two', event_listener)\n # or m.add_listener(EventTwo, event_listener)\n\nTriggering events\n-----------------\n\n.. code:: python\n\n event1 = EventOne()\n event2 = EventTwo()\n\n m.dispatch(event1)\n # Got event: \n\n m.dispatch(event2)\n # Got event: \n\nRemoving a listener\n-------------------\n\n.. code:: python\n\n def another_listener(event):\n print('Got another event: %r' % event)\n\n m.add_listener(EventOne, another_listener)\n m.remove_listener('EventOne', event_listener)\n m.dispatch(event1)\n # Got another event: \n\n\nRemoving all listeners\n----------------------\n\n.. code:: python\n\n m.remove_listener('EventOne')\n m.dispatch(event1)\n # Nothing was happened\n\n\nUsing priorities\n----------------\n\n.. code:: python\n\n m.add_listener('EventOne', another_listener, -255)\n m.add_listener('EventOne', event_listener, 255)\n m.dispatch(event1)\n # Got another event: \n # Got event: \n\n\nUsing Subscribers\n-----------------\n\n.. code:: python\n\n from mediator import SubscriberInterface\n\n\n class Subscriber(SubscriberInterface):\n def first(self, event):\n event.first = True\n\n def middle(self, event):\n event.middle = True\n\n def last(self, event):\n event.last = True\n\n def event2_handler(self, event):\n event.success = True\n\n def event3_handler(self, event):\n event.success = True\n\n def get_subscribed_events(self):\n return {\n 'event1': [\n ['middle'],\n ['first', -100],\n ['last', 100]\n ],\n 'event2': 'event2_handler',\n 'event3': ['event3_handler']\n }\n\n class Event1(Event):\n event_name = 'event1'\n\n def __init__(self):\n self.first = False\n self.middle = False\n self.last = False\n\n class Event2(Event):\n event_name = 'event2'\n\n def __init__(self):\n self.success = True\n\n class Event3(Event2):\n event_name = 'event3'\n\n subscriber = Subscriber()\n event1 = Event1()\n event2 = Event2()\n event3 = Event3()\n\n m.add_subscriber(subscriber)\n\n m.dispatch(event1)\n print('%s;%s;%s' % (event1.first, event1.middle, event1.last))\n # True;True;True\n\n m.dispatch(event2)\n print(event2.success)\n # True\n\n m.dispatch(event3)\n print(event3.success)\n # True\n\n\nAdding listeners using decorator\n--------------------------------\n\n.. code:: python\n\n import sys\n import venusian\n\n from mediator import VENUSIAN_CATEGORY\n\n\n @SomeEvent.listen(priority=255, instance='mediator', category=VENUSIAN_CATEGORY) # All args are optional\n def some_event_listener(event):\n event.attr = 'value'\n\n scanner = venusian.Scanner(mediator=mediator)\n scanner.scan(package=sys.modules[__name__], categories=[VENUSIAN_CATEGORY])\n m.dispatch(SomeEvent())\n\nSee source code and tests for more information.\n\nChangelog\n=========\n\n\n0.4.0 (17.03.2017)\n------------------\n\n- Fixed multiple inheritance support\n- Improved venusian support\n\n0.3.0 (25.02.2016)\n------------------\n\n- ``Mediator.__init__`` and ``Mediator.scan`` now takes keyword arguments only.\n- Removed ``Mediator.set_scanner`` method.\n- ``Mediator.dispatch()`` now takes event instances only.\n- ``Mediator.add_listener`` and ``Mediator.remove_listener`` takes subclass of ``Event`` or ``str``.\n- ``Event.get_name()`` and ``Event.set_name()`` were removed in favor of ``Event.get_event_name()`` and ``Event.event_name`` class attribute.\n- And now there is no requirement to call ``super().__init__()`` in your own events.\n\n0.2.1 (18.12.2015)\n------------------\n\n- Added ``Mediator.set_scanner`` method in order to allow use custom scanner instance.\n\n0.2.0 (17.12.2015)\n------------------\n\n- Automatic event name detection based on a class name.\n- Added ``%Event%.listen`` decorator.\n\n0.1.0 (19.11.2015)\n------------------\n\n- First release.\n\nContributing\n============\n\n- Fork and clone it\n- Create your feature branch (git checkout -b awesome-feature)\n- Make your changes\n- Write/update tests, if it's necessary (make buildout && make tests)\n- Update README.md, if it's necessary\n- Push your branch (git push origin awesome-feature)\n- Send a pull request\n\nLICENSE\n=======\n\nThe MIT License (MIT)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Kilte/mediator", "keywords": "event,events,mediator,dispatcher,event dispatcher", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "mediator", "package_url": "https://pypi.org/project/mediator/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/mediator/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/Kilte/mediator" }, "release_url": "https://pypi.org/project/mediator/0.4.0/", "requires_dist": null, "requires_python": null, "summary": "A library implements the Mediator pattern to make your code extensible", "version": "0.4.0" }, "last_serial": 3713625, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "b20ae6d8c54b03230ba0b505cde60b9e", "sha256": "e533eabc08a542de2143b8ec82b14141eb18d28e93edb23c5960c32e1ac3595c" }, "downloads": -1, "filename": "mediator-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b20ae6d8c54b03230ba0b505cde60b9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3447, "upload_time": "2015-11-18T21:15:23", "url": "https://files.pythonhosted.org/packages/1a/e9/e7ac0061dd09f72ecc093fe4862895039129fd74711170912c5b1a22f470/mediator-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "082ac42d979447c608e7c7b3b55e292f", "sha256": "469a9fd9241abd40c8ddcdcae9f487b325e4ebcdcec020043b7d51299635a13d" }, "downloads": -1, "filename": "mediator-0.2.0.tar.gz", "has_sig": false, "md5_digest": "082ac42d979447c608e7c7b3b55e292f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4179, "upload_time": "2015-12-17T19:53:26", "url": "https://files.pythonhosted.org/packages/fc/6c/91f68e2cc9a5cd5da408c41d994e2553d377cbcf3af9c874dbd31ec55308/mediator-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "49aff8380c7f7ed92b0523b7cc00924c", "sha256": "ad9b40c92e50efd4dbfd4936fc5f46bc380d22e5ba337d634d1d91bd21200c9b" }, "downloads": -1, "filename": "mediator-0.2.1.tar.gz", "has_sig": false, "md5_digest": "49aff8380c7f7ed92b0523b7cc00924c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4282, "upload_time": "2015-12-18T12:26:23", "url": "https://files.pythonhosted.org/packages/14/3f/f49f6288f650fa91d5aa695e3a346d38a21c694528278448bb2ad2aa1a1d/mediator-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c85cbb646a4b1fa51c09032dc37446e0", "sha256": "5c24970dd354e6bc154850b84c45cb4606738c19de0352f5783f1867e7c4b8b3" }, "downloads": -1, "filename": "mediator-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c85cbb646a4b1fa51c09032dc37446e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4260, "upload_time": "2016-02-25T08:19:31", "url": "https://files.pythonhosted.org/packages/6a/29/0ead08df222400bd5bb7ec8b853b533135de58f8495e23223ef31ee2efad/mediator-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "988bd6e9acbfc214ed5729124290b651", "sha256": "3db6e2e702ba1e74503631e2a04b5ccaef996a919ad4b17f18a23d017950a577" }, "downloads": -1, "filename": "mediator-0.4.0.tar.gz", "has_sig": false, "md5_digest": "988bd6e9acbfc214ed5729124290b651", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4276, "upload_time": "2017-03-17T17:53:20", "url": "https://files.pythonhosted.org/packages/24/da/63a795a7f69febb712ac693e4fcb56b2db47b472703bbf9e2a6ad335b740/mediator-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "988bd6e9acbfc214ed5729124290b651", "sha256": "3db6e2e702ba1e74503631e2a04b5ccaef996a919ad4b17f18a23d017950a577" }, "downloads": -1, "filename": "mediator-0.4.0.tar.gz", "has_sig": false, "md5_digest": "988bd6e9acbfc214ed5729124290b651", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4276, "upload_time": "2017-03-17T17:53:20", "url": "https://files.pythonhosted.org/packages/24/da/63a795a7f69febb712ac693e4fcb56b2db47b472703bbf9e2a6ad335b740/mediator-0.4.0.tar.gz" } ] }