{ "info": { "author": "Saad Talaat", "author_email": "saadtalaat@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Financial and Insurance Industry", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Motiv\n**Simple and Efficient processing pipelining.**\n\n[![Build Status](https://travis-ci.com/SaadTalaat/motiv.svg?branch=master)](https://travis-ci.com/SaadTalaat/motiv)\n[![Total alerts](https://img.shields.io/lgtm/alerts/g/SaadTalaat/motiv.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/SaadTalaat/motiv/alerts/)\n[![codecov](https://codecov.io/gh/SaadTalaat/motiv/branch/master/graph/badge.svg)](https://codecov.io/gh/SaadTalaat/motiv)\n[![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://github.com/SaadTalaat/motiv)\n[![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/pymotiv)\n[![PyPI](https://img.shields.io/pypi/v/motiv.svg)](https://pypi.org/project/motiv/)\n\nMotiv is a framework to ease and enables building minimal pipelines and pipeline-like applications. It abstracts away communication, messaging patterns and execution patterns.\n\n## When to use Motiv?\nMotiv is for minimal pipelining and pipeline-like applications, you can build a tightly-coupled or a loosely-coupled pipeline using it. However, if you're pipeline's purpose is data processing, motiv is a good start. If the purpose is *big* data processing, then you're better off using a big data processing engine (e.g. Spark).\n\n## Why Motiv?\nMotiv is simple, it provides many messaging-patterns, it manages them for you and it provides you direct control over them. Motiv is stateless, and so should the applications that use it. Motiv uses efficient and very fast communication/message-passing ([zmq](http://zeromq.org/)) for the underlying communication.\n\n## Installation\n\n```bash\n$ pip install motiv\n```\nor (recommended)\n```bash\n$ git clone git@github.com:SaadTalaat/motiv.git\n$ cd motiv\n$ python3 setup.py install\n```\n\n## Quickstart\nMotiv has two type of patterns that are glued together to form a component in a pipeline. A stream (messaging-pattern) and an actor (execution-pattern). Streams can be a `Emitter`, `Subscriber`, `Ventilator`, `Worker`, `Sink`. an actor can be `Ticker` or `Proxy`.\n\n**Streams?**\n\nStreams are boilerplate messaging-patterns that either send out messages or receive messages. for example an `Emitter` has a typical publisher behavior. Unlike the `Emitter` A `Ventilator` distributes messages between listening components (workers).\n\n**Execution patterns?**\n\nAn execution pattern defines how a component should execute, for example, a component can simply be a `Proxy` between two streams that forwards messages received over subscriber stream to a ventilator, or from a worker to a publisher, or from a worker to a sink. It can also be a `Ticker` which is execute-till-halt event-loop with each cycle calling `Ticker.tick` method function, this type of behavior is convenient for processing incoming messages and sending out results to different actors or do an action depending on these messages.\n\n**Streams + Execution Pattern**\n\nAn execution pattern or an actor expects to have an input stream or output stream or both for it to be runnable.\n\n## Examples\nSee examples: [motiv/examples/](https://github.com/SaadTalaat/motiv/tree/master/motiv/examples)\n\nRun examples,\n```bash\n$ git clone git@github.com:SaadTalaat/motiv.git\n$ cd motiv\n$ python3 motiv/examples/workers.py\n....\n$ python3 motiv/examples/pubsub.py\n```\n## Disclaimer\nMotiv is still in development, master might not be stable, features will be rolled out fast. I encourage you to fix any code you see wrong, raise any issues that concern you and actively participate in developing *Motiv*.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://saadtalaat.com", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "motiv", "package_url": "https://pypi.org/project/motiv/", "platform": "POSIX", "project_url": "https://pypi.org/project/motiv/", "project_urls": { "Homepage": "https://saadtalaat.com" }, "release_url": "https://pypi.org/project/motiv/0.1.0/", "requires_dist": [ "pyzmq (==18.0.0)", "ensure (==0.8.2)" ], "requires_python": "", "summary": "Motiv, Simple and Efficient processing pipelining.", "version": "0.1.0" }, "last_serial": 5554376, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "95d5707c003d7a04798ec163c682d6f0", "sha256": "8fd32deb4484bd93b7f261cb5c4ced215f72ca6b124772908b68349a88e7f22c" }, "downloads": -1, "filename": "motiv-0.0.0-py3.7.egg", "has_sig": false, "md5_digest": "95d5707c003d7a04798ec163c682d6f0", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 34770, "upload_time": "2019-03-29T10:50:18", "url": "https://files.pythonhosted.org/packages/9d/e0/cfae2d4c42516f41f3d457770d3ab4e9d604680a5da240f11aeec88f0d9d/motiv-0.0.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "8fb1c7262a25cb73d0ee4574ae941f57", "sha256": "1da35abd4f989a5f4d27de577d730225a76c084dbc8892c73500ae67bcc8ffc5" }, "downloads": -1, "filename": "motiv-0.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8fb1c7262a25cb73d0ee4574ae941f57", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13088, "upload_time": "2019-03-29T10:50:16", "url": "https://files.pythonhosted.org/packages/01/12/a48ff509bc84bcb2a121ad20c62466dd476632fe1600580f79cebb8eaf34/motiv-0.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3c422d86c2b469f173a8ce055e00304", "sha256": "3d2d33fcb8800e431ec124f27a8eaee201c926cf978416dd8cf6f1bdbd88c40b" }, "downloads": -1, "filename": "motiv-0.0.0.tar.gz", "has_sig": false, "md5_digest": "f3c422d86c2b469f173a8ce055e00304", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5940, "upload_time": "2019-03-29T10:50:20", "url": "https://files.pythonhosted.org/packages/09/8c/93666a24158aa595806e355aa4a7e422868c355aee068d62dc2beec3f6c6/motiv-0.0.0.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "308d0b68bbd40b821b5f380284ecc49a", "sha256": "993eb403e48434e90598be8f272a13e65a69b2f678f7c58373c6e16cc1097b8d" }, "downloads": -1, "filename": "motiv-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "308d0b68bbd40b821b5f380284ecc49a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19366, "upload_time": "2019-07-19T03:21:49", "url": "https://files.pythonhosted.org/packages/50/92/e54375c612774a488f75d8413fb51ed63f7686a567f269a51d9be6b2d0a6/motiv-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57523b4897f6e707fa49ebb0fc82846e", "sha256": "c28d4cc354b9cf68d5a41c3f265d1820e3ac5187cc1beba05532ebbdb4b101e2" }, "downloads": -1, "filename": "motiv-0.1.0.tar.gz", "has_sig": false, "md5_digest": "57523b4897f6e707fa49ebb0fc82846e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12627, "upload_time": "2019-07-19T03:21:51", "url": "https://files.pythonhosted.org/packages/1c/00/56bd737fcc01771b9e1e27ca5aa543f8a81083f3b95e1eab88c625e19fbd/motiv-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "308d0b68bbd40b821b5f380284ecc49a", "sha256": "993eb403e48434e90598be8f272a13e65a69b2f678f7c58373c6e16cc1097b8d" }, "downloads": -1, "filename": "motiv-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "308d0b68bbd40b821b5f380284ecc49a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19366, "upload_time": "2019-07-19T03:21:49", "url": "https://files.pythonhosted.org/packages/50/92/e54375c612774a488f75d8413fb51ed63f7686a567f269a51d9be6b2d0a6/motiv-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57523b4897f6e707fa49ebb0fc82846e", "sha256": "c28d4cc354b9cf68d5a41c3f265d1820e3ac5187cc1beba05532ebbdb4b101e2" }, "downloads": -1, "filename": "motiv-0.1.0.tar.gz", "has_sig": false, "md5_digest": "57523b4897f6e707fa49ebb0fc82846e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12627, "upload_time": "2019-07-19T03:21:51", "url": "https://files.pythonhosted.org/packages/1c/00/56bd737fcc01771b9e1e27ca5aa543f8a81083f3b95e1eab88c625e19fbd/motiv-0.1.0.tar.gz" } ] }