{ "info": { "author": "Ewald R. de Wit", "author_email": "ewald.de.wit@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only" ], "description": "|Build| |PyVersion| |Status| |PyPiVersion| |License| |Docs|\n\nIntroduction\n------------\n\nThe primary use cases of eventkit are\n\n* to send events between loosely coupled components;\n* to compose all kinds of event-driven data pipelines.\n\nThe interface is kept as Pythonic as possible,\nwith familiar names from Python and its libraries where possible.\nFor scheduling asyncio is used and there is seamless integration with it.\n\nSee the examples and the\n`introduction notebook `_\nto get a true feel for the possibilities.\n\nInstallation\n------------\n\n::\n\n pip3 install eventkit\n\nPython_ version 3.6 or higher is required.\n\n\nExamples\n--------\n\n**Create an event and connect two listeners**\n\n.. code-block:: python\n\n import eventkit as ev\n\n def f(a, b):\n print(a * b)\n\n def g(a, b):\n print(a / b)\n\n event = ev.Event()\n event += f\n event += g\n event.emit(10, 5)\n\n**Create a simple pipeline**\n\n.. code-block:: python\n\n import eventkit as ev\n\n event = (\n ev.Sequence('abcde')\n .map(str.upper)\n .enumerate()\n )\n\n print(event.run()) # in Jupyter: await event.list()\n\nOutput::\n\n [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E')]\n\n**Create a pipeline to get a running average and standard deviation**\n\n.. code-block:: python\n\n import random\n import eventkit as ev\n\n source = ev.Range(1000).map(lambda i: random.gauss(0, 1))\n\n event = source.array(500)[ev.ArrayMean, ev.ArrayStd].zip()\n\n print(event.last().run()) # in Jupyter: await event.last()\n\nOutput::\n\n [(0.00790957852672618, 1.0345673260655333)]\n\n**Combine async iterators together**\n\n.. code-block:: python\n\n import asyncio\n import eventkit as ev\n\n async def ait(r):\n for i in r:\n await asyncio.sleep(0.1)\n yield i\n\n async def main():\n async for t in ev.Zip(ait('XYZ'), ait('123')):\n print(t)\n\n asyncio.get_event_loop().run_until_complete(main()) # in Jupyter: await main()\n\nOutput::\n\n ('X', '1')\n ('Y', '2')\n ('Z', '3')\n\n**Real-time video analysis pipeline**\n\n.. code-block:: python\n\n self.video = VideoStream(conf.CAM_ID)\n scene = self.video | FaceTracker | SceneAnalyzer\n lastScene = scene.aiter(skip_to_last=True)\n async for frame, persons in lastScene:\n ...\n\n`Full source code `_\n\nDistributed computing\n---------------------\n\nThe `distex `_ library provides a\n``poolmap`` extension method to put multiple cores or machines to use:\n\n.. code-block:: python\n\n from distex import Pool\n import eventkit as ev\n import bz2\n\n pool = Pool()\n # await pool # un-comment in Jupyter\n data = [b'A' * 1000000] * 1000\n\n pipe = ev.Sequence(data).poolmap(pool, bz2.compress).map(len).mean().last()\n\n print(pipe.run()) # in Jupyter: print(await pipe)\n pool.shutdown()\n\n\nInspired by:\n------------\n\n * `Qt Signals & Slots `_\n * `itertools `_\n * `aiostream `_\n * `Bacon `_\n * `aioreactive `_\n * `Reactive extensions `_\n * `underscore.js `_\n * `.NET Events `_\n\nDocumentation\n-------------\n\nThe complete `API documentation `_.\n\n\n\n.. _Python: http://www.python.org\n.. _`Interactive Brokers Python API`: http://interactivebrokers.github.io\n\n.. |Build| image:: https://api.travis-ci.org/erdewit/eventkit.svg?branch=master\n :alt: Travis build\n :target: https://travis-ci.org/erdewit/eventkit\n\n.. |PyPiVersion| image:: https://img.shields.io/pypi/v/eventkit.svg\n :alt: PyPi\n :target: https://pypi.python.org/pypi/eventkit\n\n\n.. |PyVersion| image:: https://img.shields.io/badge/python-3.6+-blue.svg\n :alt:\n\n.. |Status| image:: https://img.shields.io/badge/status-beta-green.svg\n :alt:\n\n.. |License| image:: https://img.shields.io/badge/license-BSD-blue.svg\n :alt:\n\n.. |Docs| image:: https://readthedocs.org/projects/eventkit/badge/?version=latest\n :alt: Documentation\n :target: https://eventkit.readthedocs.io\n\n\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/erdewit/eventkit", "keywords": "python asyncio event driven data pipelines", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "eventkit", "package_url": "https://pypi.org/project/eventkit/", "platform": "", "project_url": "https://pypi.org/project/eventkit/", "project_urls": { "Homepage": "https://github.com/erdewit/eventkit" }, "release_url": "https://pypi.org/project/eventkit/0.8.5/", "requires_dist": [ "numpy" ], "requires_python": "", "summary": "Event-driven data pipelines", "version": "0.8.5" }, "last_serial": 5155006, "releases": { "0.8.0": [ { "comment_text": "", "digests": { "md5": "a156c000e8ed00da35f2c5ef32d04cfe", "sha256": "19fea56ed4e735ae07b9bedf76ad36b6cba9469d05d52d480868972123574167" }, "downloads": -1, "filename": "eventkit-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a156c000e8ed00da35f2c5ef32d04cfe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15336, "upload_time": "2019-03-16T12:41:05", "url": "https://files.pythonhosted.org/packages/b4/50/897aa342a6642576807b8c341356728a9351bc88096307793d2c154842ab/eventkit-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e14fce5cdb34a459fa6df4c6d2454162", "sha256": "68a14aecd8164984efb3d82d32026d675378a972afa46f18e4aed6e48204d46c" }, "downloads": -1, "filename": "eventkit-0.8.0.tar.gz", "has_sig": false, "md5_digest": "e14fce5cdb34a459fa6df4c6d2454162", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15752, "upload_time": "2019-03-16T12:41:08", "url": "https://files.pythonhosted.org/packages/b5/fa/a9b2b6fe31dba8365a75ce5087f26ff84ce45ade85b3ed8ffb4b0f35a663/eventkit-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "19b3661337dcb8027c13a32c940547ee", "sha256": "45780fb26edd4b2f0970d1dce67e69574d1948f7680e708af7e780759a17cbf4" }, "downloads": -1, "filename": "eventkit-0.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "19b3661337dcb8027c13a32c940547ee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15335, "upload_time": "2019-03-16T13:33:42", "url": "https://files.pythonhosted.org/packages/96/dc/211fe11e772a5de126888c0e7c75d62ed61f36fe40ce1128747a2bfb2fa8/eventkit-0.8.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9aa54fdabac0bbd3e442d75a477106c3", "sha256": "ced0e3083a15aef6fd6c21ebca9c8b475834c331d02bcf478bc71dd0ca6231e1" }, "downloads": -1, "filename": "eventkit-0.8.1.tar.gz", "has_sig": false, "md5_digest": "9aa54fdabac0bbd3e442d75a477106c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15749, "upload_time": "2019-03-16T13:33:43", "url": "https://files.pythonhosted.org/packages/62/c7/a602750beaa2cafdc0dfd5ee5ad1b0e70d56a524a855fec82dc5dd751cbd/eventkit-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "61f5843895da59bb3838a7f99fa614f9", "sha256": "d7ee1232b4b1a2c7f97b76c1e30485a25d4f01d2cc3f87c6305f57c550e5a447" }, "downloads": -1, "filename": "eventkit-0.8.2-py3-none-any.whl", "has_sig": false, "md5_digest": "61f5843895da59bb3838a7f99fa614f9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30602, "upload_time": "2019-03-16T13:40:46", "url": "https://files.pythonhosted.org/packages/54/24/d9325939044d26fd23150353f1caf52b89a26c815eec24e52035d52ee806/eventkit-0.8.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8232ea50b9129f47dfc1322143e79557", "sha256": "4f29f0acc6c26512b6e235a3aadebbe45e19baedceaa877249bb7465573c6afe" }, "downloads": -1, "filename": "eventkit-0.8.2.tar.gz", "has_sig": false, "md5_digest": "8232ea50b9129f47dfc1322143e79557", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25499, "upload_time": "2019-03-16T13:40:48", "url": "https://files.pythonhosted.org/packages/22/c4/bbed0b4c395e4be12b8bb535161b9a9d7edf237291c92931fd19bc99ac60/eventkit-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "499eb3e1f908dde2ce3e0ce44ba684f4", "sha256": "7edc349cfa46fea86c7409346d7e28838f4ad2a2d59497314ae4a9fbe3882916" }, "downloads": -1, "filename": "eventkit-0.8.3-py3-none-any.whl", "has_sig": false, "md5_digest": "499eb3e1f908dde2ce3e0ce44ba684f4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30872, "upload_time": "2019-03-17T09:33:04", "url": "https://files.pythonhosted.org/packages/72/75/b0a2c985aaedb5131dd76486fb266a612f6c68200e5154f17ba280bf9fdc/eventkit-0.8.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c219a05414a45ec0fe9cb2aa96a37d54", "sha256": "1bae5afeb37c98cda273cbb9374c4eafa76be0f9ba4f4ac3cb42c688a373422e" }, "downloads": -1, "filename": "eventkit-0.8.3.tar.gz", "has_sig": false, "md5_digest": "c219a05414a45ec0fe9cb2aa96a37d54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26038, "upload_time": "2019-03-17T09:33:06", "url": "https://files.pythonhosted.org/packages/6b/a2/0df01762f4095cd06464e4fe179b2937a91e008e35c8a50a3f8062860735/eventkit-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "4fea2c78f4e62a16373ea70e3360b092", "sha256": "082a62be683e3594c9fc89722000b6754582c3148e9ed3c150d055f48f0faf10" }, "downloads": -1, "filename": "eventkit-0.8.4-py3-none-any.whl", "has_sig": false, "md5_digest": "4fea2c78f4e62a16373ea70e3360b092", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31037, "upload_time": "2019-03-30T17:50:47", "url": "https://files.pythonhosted.org/packages/af/ea/4bc9ebf0f216281ccad5afee25bfc43d347aeecf97bd438d6c5966288224/eventkit-0.8.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc5e38a998c58ba8aa9cc4b9d4013ef5", "sha256": "5800d674b3b61b14bf0a69a40a0937663a3b0ac6cffd7a02248f7a7d4508c8bd" }, "downloads": -1, "filename": "eventkit-0.8.4.tar.gz", "has_sig": false, "md5_digest": "dc5e38a998c58ba8aa9cc4b9d4013ef5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26146, "upload_time": "2019-03-30T17:50:49", "url": "https://files.pythonhosted.org/packages/92/3e/17f2fd0fdbeaed9c4594e05c6f1c280e357db3f3ae0b6b9ef91ec684a68a/eventkit-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "59a9c443006e59229c0ed6e23e69a23b", "sha256": "8aa233289c0134fc05f230974b55e00ed31d4c9526141336d671aece771bba79" }, "downloads": -1, "filename": "eventkit-0.8.5-py3-none-any.whl", "has_sig": false, "md5_digest": "59a9c443006e59229c0ed6e23e69a23b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31030, "upload_time": "2019-04-17T12:32:13", "url": "https://files.pythonhosted.org/packages/d4/63/f72176f587675866707291524a70be25d719941f112b8cfeaccd9a6b7415/eventkit-0.8.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4fff4d6ec0a150f3efaf7c350513d85", "sha256": "da0435aeb34dbf3ea14c7f6840cde0766c8cdc6a2206b972eb649ecd86067c26" }, "downloads": -1, "filename": "eventkit-0.8.5.tar.gz", "has_sig": false, "md5_digest": "a4fff4d6ec0a150f3efaf7c350513d85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26145, "upload_time": "2019-04-17T12:32:14", "url": "https://files.pythonhosted.org/packages/d4/47/0f6d5433d51d14d5de44812b16e56f72b3cb2320f8b7bacb96d1d23065fb/eventkit-0.8.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "59a9c443006e59229c0ed6e23e69a23b", "sha256": "8aa233289c0134fc05f230974b55e00ed31d4c9526141336d671aece771bba79" }, "downloads": -1, "filename": "eventkit-0.8.5-py3-none-any.whl", "has_sig": false, "md5_digest": "59a9c443006e59229c0ed6e23e69a23b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31030, "upload_time": "2019-04-17T12:32:13", "url": "https://files.pythonhosted.org/packages/d4/63/f72176f587675866707291524a70be25d719941f112b8cfeaccd9a6b7415/eventkit-0.8.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4fff4d6ec0a150f3efaf7c350513d85", "sha256": "da0435aeb34dbf3ea14c7f6840cde0766c8cdc6a2206b972eb649ecd86067c26" }, "downloads": -1, "filename": "eventkit-0.8.5.tar.gz", "has_sig": false, "md5_digest": "a4fff4d6ec0a150f3efaf7c350513d85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26145, "upload_time": "2019-04-17T12:32:14", "url": "https://files.pythonhosted.org/packages/d4/47/0f6d5433d51d14d5de44812b16e56f72b3cb2320f8b7bacb96d1d23065fb/eventkit-0.8.5.tar.gz" } ] }