{ "info": { "author": "Marc Fargas", "author_email": "telenieko@telenieko.com", "bugtrack_url": null, "classifiers": [], "description": " \r\r\n This library provides utilities that allow to build simple signal / generator\r\r\n based data flows which provide for clean code on complex data transformations.\r\r\n \r\r\n This was primarily designed to be used in batch works though, in principle,\r\r\n streaming data should work just fine.\r\r\n \r\r\n And it was born because I needed something *really* simple that would allow me\r\r\n to process data on a row-by-row basis and generate events/signals during that\r\r\n processing.\r\r\n \r\r\n ## Usage example (see tests/)\r\r\n \r\r\n ```python\r\r\n from signalflow import Pipe, Plumber\r\r\n \r\r\n \r\r\n class EmitZeroThenOne(Pipe):\r\r\n def once(self):\r\r\n # once is called when the loop has nothing to do and is looking\r\r\n # for new signals.\r\r\n self.emit_number(0)\r\r\n self.emit_number(1)\r\r\n \r\r\n def emit_number(self, i: int):\r\r\n # emit_* are always stubs.\r\r\n pass\r\r\n \r\r\n \r\r\n class FibonacciAcummulator(Pipe):\r\r\n last_number = -1\r\r\n \r\r\n def receive_number(self, sender, i: int):\r\r\n if i > 34:\r\r\n return\r\r\n if self.last_number >= 0:\r\r\n self.emit_number(i + self.last_number)\r\r\n self.last_number = i\r\r\n \r\r\n def emit_number(self, i: int):\r\r\n pass\r\r\n \r\r\n \r\r\n class NumberPrinter(Pipe):\r\r\n def receive_number(self, sender, i: int):\r\r\n print(f\"Received {i}\")\r\r\n \r\r\n \r\r\n flow = Plumber()\r\r\n flow.add_pipe(EmitZeroThenOne())\r\r\n flow.add_pipe(FibonacciAcummulator())\r\r\n flow.add_pipe(NumberPrinter())\r\r\n \r\r\n flow.go() # Prints Fibonacci Sequence\r\r\n ```\r\r\n \r\nKeywords: flow signal datapipe pipe development\r\nPlatform: UNKNOWN\r\nClassifier: Development Status :: 3 - Alpha\r\nClassifier: Intended Audience :: Developers\r\nClassifier: Topic :: Software Development :: Build Tools\r\nClassifier: License :: OSI Approved :: BSD License\r\nClassifier: Programming Language :: Python :: 3\r\nClassifier: Programming Language :: Python :: 3.6\r\nDescription-Content-Type: text/markdown\r\nProvides-Extra: dev\r\nProvides-Extra: test\r\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/telenieko/signalflow", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "signalflow", "package_url": "https://pypi.org/project/signalflow/", "platform": "", "project_url": "https://pypi.org/project/signalflow/", "project_urls": { "Bug Reports": "https://github.com/telenieko/signalflow/issues", "Homepage": "https://github.com/telenieko/signalflow", "Source": "https://github.com/telenieko/signalflow/" }, "release_url": "https://pypi.org/project/signalflow/0.0.1/", "requires_dist": null, "requires_python": "", "summary": "Python signal based flow based programming", "version": "0.0.1" }, "last_serial": 3869553, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c24f407f83b43344055da940cf705290", "sha256": "03df43f60647f607a644313710b0aecc4e1b29007706e4c10348b8860dea467b" }, "downloads": -1, "filename": "signalflow-0.0.1-py3.6.egg", "has_sig": false, "md5_digest": "c24f407f83b43344055da940cf705290", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 5398, "upload_time": "2018-05-16T17:39:34", "url": "https://files.pythonhosted.org/packages/3c/5d/d2d3a2168bd313cccd4530ce1303c1da8d3a7e4eda772e2f0ea0555b1593/signalflow-0.0.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "a4ad22d9cd5c865b9c05045f27cb0587", "sha256": "338a7d2247743d16053d31c3a7a96a0882359bca35ef95b315dc64f341df92e7" }, "downloads": -1, "filename": "signalflow-0.0.1.tar.gz", "has_sig": false, "md5_digest": "a4ad22d9cd5c865b9c05045f27cb0587", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4930, "upload_time": "2018-05-16T17:39:35", "url": "https://files.pythonhosted.org/packages/5e/fc/132ddc4da176c4305cbb8a08e051d99764c069b5586c4a0cfff828a58945/signalflow-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c24f407f83b43344055da940cf705290", "sha256": "03df43f60647f607a644313710b0aecc4e1b29007706e4c10348b8860dea467b" }, "downloads": -1, "filename": "signalflow-0.0.1-py3.6.egg", "has_sig": false, "md5_digest": "c24f407f83b43344055da940cf705290", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 5398, "upload_time": "2018-05-16T17:39:34", "url": "https://files.pythonhosted.org/packages/3c/5d/d2d3a2168bd313cccd4530ce1303c1da8d3a7e4eda772e2f0ea0555b1593/signalflow-0.0.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "a4ad22d9cd5c865b9c05045f27cb0587", "sha256": "338a7d2247743d16053d31c3a7a96a0882359bca35ef95b315dc64f341df92e7" }, "downloads": -1, "filename": "signalflow-0.0.1.tar.gz", "has_sig": false, "md5_digest": "a4ad22d9cd5c865b9c05045f27cb0587", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4930, "upload_time": "2018-05-16T17:39:35", "url": "https://files.pythonhosted.org/packages/5e/fc/132ddc4da176c4305cbb8a08e051d99764c069b5586c4a0cfff828a58945/signalflow-0.0.1.tar.gz" } ] }