{ "info": { "author": "Henri Hulski", "author_email": "henri.hulski@gazeta.pl", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "more.emit: pymitter integration in Morepath\n===============================================\n\nThis package provides Morepath integration for pymitter_.\n\n*pymitter* is a Python port of the extended Node.js `EventEmitter 2`_\napproach providing namespaces, wildcards and TTL.\n\n\nQuick start\n-----------\n\nInstall ``more.emit``:\n\n.. code-block:: console\n\n $ pip install -U more.emit\n\nExtend your App class from EmitApp:\n\n.. code-block:: python\n\n from more.pony import EmitApp\n\n class App(EmitApp):\n pass\n\nNow you can define signals:\n\n.. code-block:: python\n\n from .app import App\n\n\n @App.signal.on('myevent')\n def handler1(arg, request):\n print(request)\n print('handler1 called with', arg)\n\n @App.signal.on('myevent')\n def handler2(arg, request):\n print('handler2 called with', arg)\n\nYou can emit the signals for example from the view:\n\n.. code-block:: python\n\n @App.json(model=Root)\n def root_view(self, request):\n request.app.signal.emit('myevent', 'foo', request)\n return {\n 'name': 'Root'\n }\n\n\nExample\n-------\n\nAn example for emitting signals on user creation\nand user update for sending a confirmation email.\nThis example uses `more.pony`_.\n\nsignal.py\n\n.. code-block:: python\n\n from .app import App\n\n\n @App.signal.on('user.email_updated')\n def send_confirmation_email(user, request):\n mailer = request.app.service(name='mailer')\n mailer.send_confirmation_email(user, request)\n\nview.py\n\n.. code-block:: python\n\n @App.json(model=UserCollection, request_method='POST')\n def user_collection_add(self, request):\n email = request.json['email']\n\n if not User.exists(email=email):\n user = self.add(email=email)\n\n @request.after\n def after(response):\n request.app.signal.emit('user.email_updated', user, request)\n response.status = 201\n\n else:\n @request.after\n def after(response):\n response.status = 409\n\n return {\n 'validationError': 'Email already exists'\n }\n\n\n @App.json(model=User, request_method='PUT')\n def user_update(self, request):\n if 'email' in request.json and User.exists(email=request.json['email']):\n @request.after\n def after(response):\n response.status = 409\n\n return {\n 'validationError': 'Email already exists'\n }\n\n else:\n self.update(request.json)\n if 'email' in request.json:\n self.email_confirmed = False\n\n @request.after\n def after(response):\n request.app.signal.emit('user.email_updated', self, request)\n\n\n.. _pymitter: https://github.com/riga/pymitter\n.. _EventEmitter 2: https://github.com/asyncly/EventEmitter2\n.. _more.pony: https://github.com/morepath/more.pony\n\n\nCHANGES\n=======\n\n0.1 (2017-04-22)\n----------------\n\n* initial public release.", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/morepath/more.emit", "keywords": "morepath pymitter EventEmitter", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "more.emit", "package_url": "https://pypi.org/project/more.emit/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/more.emit/", "project_urls": { "Homepage": "https://github.com/morepath/more.emit" }, "release_url": "https://pypi.org/project/more.emit/0.1/", "requires_dist": null, "requires_python": null, "summary": "Pymitter integration in Morepath", "version": "0.1" }, "last_serial": 2821888, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "c4ef3f6abff75724fc2fc1a5473f7951", "sha256": "05870db9c45b51266e6f1df1f8105269bf4f83d2588ae05d5230a4a624c19476" }, "downloads": -1, "filename": "more.emit-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c4ef3f6abff75724fc2fc1a5473f7951", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5765, "upload_time": "2017-04-22T15:10:01", "url": "https://files.pythonhosted.org/packages/e9/78/4c1fe52da339a97d18e52d0d3b3bd402d7735dfdbb5dafd16477ee88e1e8/more.emit-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92722e53711b98f8e45009d81a57b172", "sha256": "72300bc8c75d1e2534689dca7eef5df36cc8d33f1f4cd5dfeee00db3e1d93545" }, "downloads": -1, "filename": "more.emit-0.1.tar.gz", "has_sig": false, "md5_digest": "92722e53711b98f8e45009d81a57b172", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4496, "upload_time": "2017-04-22T15:10:04", "url": "https://files.pythonhosted.org/packages/db/6e/f158d023e16ad0ecef5a8efc877fcba0f5c31a68fe79ff968b2cb9c6b2dc/more.emit-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c4ef3f6abff75724fc2fc1a5473f7951", "sha256": "05870db9c45b51266e6f1df1f8105269bf4f83d2588ae05d5230a4a624c19476" }, "downloads": -1, "filename": "more.emit-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c4ef3f6abff75724fc2fc1a5473f7951", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5765, "upload_time": "2017-04-22T15:10:01", "url": "https://files.pythonhosted.org/packages/e9/78/4c1fe52da339a97d18e52d0d3b3bd402d7735dfdbb5dafd16477ee88e1e8/more.emit-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92722e53711b98f8e45009d81a57b172", "sha256": "72300bc8c75d1e2534689dca7eef5df36cc8d33f1f4cd5dfeee00db3e1d93545" }, "downloads": -1, "filename": "more.emit-0.1.tar.gz", "has_sig": false, "md5_digest": "92722e53711b98f8e45009d81a57b172", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4496, "upload_time": "2017-04-22T15:10:04", "url": "https://files.pythonhosted.org/packages/db/6e/f158d023e16ad0ecef5a8efc877fcba0f5c31a68fe79ff968b2cb9c6b2dc/more.emit-0.1.tar.gz" } ] }