{ "info": { "author": "Arie Bovenberg", "author_email": "a.c.bovenberg@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "Gentools\n========\n\n.. image:: https://img.shields.io/pypi/v/gentools.svg?style=flat-square\n :target: https://pypi.python.org/pypi/gentools\n\n.. image:: https://img.shields.io/pypi/l/gentools.svg?style=flat-square\n :target: https://pypi.python.org/pypi/gentools\n\n.. image:: https://img.shields.io/pypi/pyversions/gentools.svg?style=flat-square\n :target: https://pypi.python.org/pypi/gentools\n\n.. image:: https://img.shields.io/travis/ariebovenberg/gentools.svg?style=flat-square\n :target: https://travis-ci.org/ariebovenberg/gentools\n\n.. image:: https://img.shields.io/codecov/c/github/ariebovenberg/gentools.svg?style=flat-square\n :target: https://coveralls.io/github/ariebovenberg/gentools?branch=master\n\n.. image:: https://img.shields.io/readthedocs/gentools.svg?style=flat-square\n :target: http://gentools.readthedocs.io/en/latest/?badge=latest\n\n.. image:: https://img.shields.io/codeclimate/maintainability/ariebovenberg/gentools.svg?style=flat-square\n :target: https://codeclimate.com/github/ariebovenberg/gentools/maintainability\n\n\nTools for generators, generator functions, and generator-based coroutines.\n\nKey features:\n\n* Create reusable generators\n* Compose generators\n* Build python 2/3-compatible generators with ``return``.\n\nInstallation\n------------\n\n.. code-block:: bash\n\n pip install gentools\n\nExamples\n--------\n\n- Make generator functions reusable:\n\n.. code-block:: python\n\n >>> @reusable\n ... def countdown(value, step):\n ... while value > 0:\n ... yield value\n ... value -= step\n\n >>> from_3 = countdown(3, step=1)\n >>> list(from_3)\n [3, 2, 1]\n >>> list(from_3)\n [3, 2, 1]\n >>> isinstance(from_3, countdown) # generator func is wrapped in a class\n True\n >>> from_3.step # attribute access to arguments\n 1\n >>> from_3.replace(value=5) # create new instance with replaced fields\n countdown(value=5, step=1) # descriptive repr()\n\n- map a generator's ``yield``, ``send``, and ``return`` values:\n\n.. code-block:: python\n\n >>> @map_return('final value: {}'.format)\n ... @map_send(int)\n ... @map_yield('the current max is: {}'.format)\n ... def my_max(value):\n ... while value < 100:\n ... newvalue = yield value\n ... if newvalue > value:\n ... value = newvalue\n ... return value\n\n >>> gen = my_max(5)\n >>> next(gen)\n 'the current max is: 5'\n >>> gen.send(11.3)\n 'the current max is: 11'\n >>> gen.send(104)\n StopIteration('final value: 104')\n\n- relay a generator's yield/send interactions through another generator:\n\n.. code-block:: python\n\n >>> def try_until_positive(outvalue):\n ... value = yield outvalue\n ... while value < 0:\n ... value = yield 'not positive, try again'\n ... return value\n\n >>> @relay(try_until_positive)\n ... def my_max(value):\n ... while value < 100:\n ... newvalue = yield value\n ... if newvalue > value:\n ... value = newvalue\n ... return value\n\n >>> gen = my_max(5)\n >>> next(gen)\n 5\n >>> gen.send(-4)\n 'not positive, try again'\n >>> gen.send(-1)\n 'not positive, try again'\n >>> gen.send(8)\n 8\n >>> gen.send(104)\n StopIteration(104)\n\n- make python 2/3 compatible generators with ``return``.\n\n.. code-block:: python\n\n >>> @py2_compatible\n ... def my_max(value):\n ... while value < 100:\n ... newvalue = yield value\n ... if newvalue > value:\n ... value = newvalue\n ... return_(value)\n\n\nRelease history\n---------------\n\ndevelopment\n+++++++++++\n\n1.1.0 (2018-03-02)\n++++++++++++++++++\n\n- added support for python 2.7, 3.3\n- new ``py2_compatible`` decorator with py2/3 compatible ``return_``\n- new ``stopiter_value`` helper\n- improvements to documentation\n\n1.0.2 (2018-02-08)\n++++++++++++++++++\n\n- add more examples to docs\n\n1.0.1 (2018-01-27)\n++++++++++++++++++\n\n- update dev status classifier\n\n1.0.0 (2018-01-27)\n++++++++++++++++++\n\n- Include ``compose`` in public API\n\n0.4.0 (2018-01-24)\n++++++++++++++++++\n\n- rename ``pipe`` to ``relay``.\n\n0.3.1 (2018-01-23)\n++++++++++++++++++\n\n- fix copy issue in reusable generator ``.replace()``\n\n0.3.0 (2018-01-22)\n++++++++++++++++++\n\n- make reusable generators callable as methods\n\n0.2.2 (2018-01-21)\n++++++++++++++++++\n\n- updates to readme\n\n0.2.0 (2018-01-21)\n++++++++++++++++++\n\n- reorganized modules, improved docs, renamed functions.\n\n0.1.0 (2018-01-17)\n++++++++++++++++++\n\n- initial release\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ariebovenberg/gentools", "keywords": "generators,itertools,coroutines", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "gentools", "package_url": "https://pypi.org/project/gentools/", "platform": "", "project_url": "https://pypi.org/project/gentools/", "project_urls": { "Homepage": "https://github.com/ariebovenberg/gentools" }, "release_url": "https://pypi.org/project/gentools/1.1.0/", "requires_dist": null, "requires_python": ">=2.7", "summary": "Tools for generators, generator functions, and generator-based coroutines", "version": "1.1.0" }, "last_serial": 3632673, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "661e550b9ebbf1bf92a3f9e586457276", "sha256": "f428002e98ab732d8cd6f77f2a183f92c7f02b527a96163ce2353e36a1930c76" }, "downloads": -1, "filename": "gentools-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "661e550b9ebbf1bf92a3f9e586457276", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 4812, "upload_time": "2018-01-17T17:53:28", "url": "https://files.pythonhosted.org/packages/ca/32/7a0c00b42cd8360fe1349ee44701728c5cec4df869fe15fe16746e260b6d/gentools-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db1e2d0a5401e8d77a23da6fc439de32", "sha256": "3a3d26bc6ae6814df483552692025079206cd0c9e6ed6e33e4f5cf3526cbf3af" }, "downloads": -1, "filename": "gentools-0.1.0.tar.gz", "has_sig": false, "md5_digest": "db1e2d0a5401e8d77a23da6fc439de32", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4029, "upload_time": "2018-01-17T17:53:30", "url": "https://files.pythonhosted.org/packages/2d/f9/efb73eee07887abf523c821e43ec8328893e136331ea7d662efb5c680ec1/gentools-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3dbe21ab707f6977df4328b65197da94", "sha256": "9e319dbb78011386415e41354c59553b48d6a20b079ea51ce16803310e90cee5" }, "downloads": -1, "filename": "gentools-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3dbe21ab707f6977df4328b65197da94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 7863, "upload_time": "2018-01-21T15:29:09", "url": "https://files.pythonhosted.org/packages/cc/6c/80a5b752894593ae34ab602aa9cb71e81a040544b427728fa5203bafef41/gentools-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "32df643c010847f9dddd6ed9a3f28abe", "sha256": "e8bbae407d0059c8f0bf5b7e85d55ac3ea79b83e2dbfa7b5b984ac73f91a1d2b" }, "downloads": -1, "filename": "gentools-0.2.0.tar.gz", "has_sig": false, "md5_digest": "32df643c010847f9dddd6ed9a3f28abe", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6026, "upload_time": "2018-01-21T15:29:12", "url": "https://files.pythonhosted.org/packages/12/e6/d642fce0536b565bc110a980bb868b57a89f64e5665206331efe6cde4aa5/gentools-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "353598a754ceacbaaae6fd390daabd51", "sha256": "97c41b17b786838cef675bbe2d8cfd112fb0a460b2c37ce4a3c580bae1b23c7e" }, "downloads": -1, "filename": "gentools-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "353598a754ceacbaaae6fd390daabd51", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 7891, "upload_time": "2018-01-21T15:52:46", "url": "https://files.pythonhosted.org/packages/4b/3c/d09dae59673342d8c9382fac6847757be5b83f3c88f7502500058b6e11b7/gentools-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4622359ac6ef783676fe198262eefbc", "sha256": "f28a8ff1cba3d9ff3c24433bae85a76001edbf72b44db681983a74d694fbe83f" }, "downloads": -1, "filename": "gentools-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a4622359ac6ef783676fe198262eefbc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6037, "upload_time": "2018-01-21T15:52:49", "url": "https://files.pythonhosted.org/packages/4a/73/f682910f2e90e05d2bd63c356e09ea1493f49abec17ac4103dd637ba6032/gentools-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "0b5d75bb6833e0118431e009ffc0914b", "sha256": "908e74e81c4b4c147bca037236360508079c716eac55603e5ce62e2adc530262" }, "downloads": -1, "filename": "gentools-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0b5d75bb6833e0118431e009ffc0914b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 7922, "upload_time": "2018-01-21T15:53:40", "url": "https://files.pythonhosted.org/packages/29/69/bac48ba78d74096112f56fa74e8f7b0995d83ca0876fa65f67414ea8c0f7/gentools-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "502f7deeac3c7659c17e32c9e2b2b0bb", "sha256": "4338608da24ad5d95a5677d7954ac4a12023e56468c066716dc815989c1b6aca" }, "downloads": -1, "filename": "gentools-0.2.2.tar.gz", "has_sig": false, "md5_digest": "502f7deeac3c7659c17e32c9e2b2b0bb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6072, "upload_time": "2018-01-21T15:53:42", "url": "https://files.pythonhosted.org/packages/22/16/044bacfb5f87a67c4295036c3d5cda60b1f09b8f099ef4bf002d3fb5d353/gentools-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "76c83556f0da6c2330c5733a6f572f54", "sha256": "0926e8ff37e5cebd785e6882e9eeda5a58aba9227dcae546378ff92b0453e85f" }, "downloads": -1, "filename": "gentools-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "76c83556f0da6c2330c5733a6f572f54", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 8109, "upload_time": "2018-01-22T17:52:27", "url": "https://files.pythonhosted.org/packages/0c/e8/1a36502a67df4ce19ecbd7be18afdd4cfa7080944e2a611d31bcd15b59bf/gentools-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7760822c3c6c2871203f85b34ff11e96", "sha256": "d3970d4dc25592538706f5e5079b07efc8277c332028a0590c8c02124521c25a" }, "downloads": -1, "filename": "gentools-0.3.0.tar.gz", "has_sig": false, "md5_digest": "7760822c3c6c2871203f85b34ff11e96", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6210, "upload_time": "2018-01-22T17:52:29", "url": "https://files.pythonhosted.org/packages/73/04/6a713feb9f5c3de72ddefc50cf632028106badf6f309720fdb3f92005c92/gentools-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "8661dfcf00487d491a2c6f31423bcbcf", "sha256": "c3870bef0e27b739e58463cdce29ec09415c7006a05b7c01cf8b2007c5b54894" }, "downloads": -1, "filename": "gentools-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8661dfcf00487d491a2c6f31423bcbcf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 8373, "upload_time": "2018-01-23T07:55:23", "url": "https://files.pythonhosted.org/packages/46/11/1f70e99ddcdd6d33b89c95b058059ed2f9004e890a471d49e9bce76b9f2e/gentools-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f81f8484e500fa3b6969fdf22d17cf17", "sha256": "5f23b764f6223020382403be95bc053dbd0a0377976fcc354e0017ed73124193" }, "downloads": -1, "filename": "gentools-0.3.1.tar.gz", "has_sig": false, "md5_digest": "f81f8484e500fa3b6969fdf22d17cf17", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6386, "upload_time": "2018-01-23T07:55:25", "url": "https://files.pythonhosted.org/packages/46/74/b6e2ed071ec9992be91974068bc6285f7d0943679e843be5c42c4339cc5f/gentools-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "730ca6e2f7b3195b33dab50c28c7aed7", "sha256": "73a4e0339f0acce68f1b9d0084529dae7708723010169e5c862b2fd06b853d6d" }, "downloads": -1, "filename": "gentools-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "730ca6e2f7b3195b33dab50c28c7aed7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 8560, "upload_time": "2018-01-24T21:27:23", "url": "https://files.pythonhosted.org/packages/65/4b/4b70c7e175970cbd62e76a5e94ade31b9884977049a1f7943338310b8e02/gentools-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "928a51c12cbef964a12dac3b5bb0deac", "sha256": "773f06b5bf40d290c17c8657d0ba94125a40d091abf09e1b401fc63da0906b92" }, "downloads": -1, "filename": "gentools-0.4.0.tar.gz", "has_sig": false, "md5_digest": "928a51c12cbef964a12dac3b5bb0deac", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6495, "upload_time": "2018-01-24T21:27:24", "url": "https://files.pythonhosted.org/packages/09/26/c097bd0edc9e7bb281cdfe06673e4f8cfa0d108b419927c762bd1879d1a9/gentools-0.4.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "bcff44539c8271f114a63f451b127f65", "sha256": "8d8c0828e0166e3692127045a6e2aea9b14bae7cef52305e9e29c5e3f7469068" }, "downloads": -1, "filename": "gentools-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bcff44539c8271f114a63f451b127f65", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 8631, "upload_time": "2018-01-27T16:39:29", "url": "https://files.pythonhosted.org/packages/6b/14/c9c041f23782891791004fb6da1c10202c122dc224ac01b396e6a850a251/gentools-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "787768a5d65b2d5825a82759512deac7", "sha256": "04771d4125179b38f046d4868f85a1946e43f0370a0ae46d644c4e8b88c22d12" }, "downloads": -1, "filename": "gentools-1.0.0.tar.gz", "has_sig": false, "md5_digest": "787768a5d65b2d5825a82759512deac7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6559, "upload_time": "2018-01-27T16:39:31", "url": "https://files.pythonhosted.org/packages/55/55/8699dd0d8b8547ae50eb70b016eda83d42bf29a41be4bd1cab863a93eb92/gentools-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a8b2be850081347547afbd8f7d4a9f3f", "sha256": "c277b72e6f9d15b4931219ba5b7cd9be4498b6cd212a50bde121199120b4fa92" }, "downloads": -1, "filename": "gentools-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a8b2be850081347547afbd8f7d4a9f3f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 8672, "upload_time": "2018-01-27T16:48:49", "url": "https://files.pythonhosted.org/packages/04/2f/e4b12a59d387620325641fd2e787fc0ace9c36bbad4741be3fcbe1cea19a/gentools-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b077e3917cc51e05dc05d694dc6d8800", "sha256": "99ddecb4d72b039af79fc62d084a27248896a1be6e26b4611bec415d1fea03e3" }, "downloads": -1, "filename": "gentools-1.0.1.tar.gz", "has_sig": false, "md5_digest": "b077e3917cc51e05dc05d694dc6d8800", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 6596, "upload_time": "2018-01-27T16:48:51", "url": "https://files.pythonhosted.org/packages/1f/80/fcf24cf4cef52101852b5ce8b502218c1bbe8f94f12a1aee80cf04bd20ee/gentools-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "fe87981566297cce2163497ad31c2d0d", "sha256": "874723f2f98b447fdfd818d8e698ade21d3b6cffd5441b100aedae394409b309" }, "downloads": -1, "filename": "gentools-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fe87981566297cce2163497ad31c2d0d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 8992, "upload_time": "2018-02-08T20:18:02", "url": "https://files.pythonhosted.org/packages/bb/e0/2a5a301d78ee7a968e74e3b8cada097ef713058f902b0f598a65042e906d/gentools-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dfd8d7bcdaa47f936db9e061e1a9e63f", "sha256": "141ef28b3a775a3bca2e3ed1f5f5a8c46e93585cc68f02397891a29e4802feaf" }, "downloads": -1, "filename": "gentools-1.0.2.tar.gz", "has_sig": false, "md5_digest": "dfd8d7bcdaa47f936db9e061e1a9e63f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 7534, "upload_time": "2018-02-08T20:18:04", "url": "https://files.pythonhosted.org/packages/3f/94/3ebcaf2996b0470901f94176123039aaa7a4570328ab877668eafd6c3b1f/gentools-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "a84e12190b0e53118453642fe46a810d", "sha256": "0ab3bd0415e3d3660970876012a3da2bf22ef0e563dcf1c9f91abfef240470ee" }, "downloads": -1, "filename": "gentools-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a84e12190b0e53118453642fe46a810d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 10831, "upload_time": "2018-03-02T18:02:32", "url": "https://files.pythonhosted.org/packages/58/c1/889473a5eea7b8c5785c5b4b2f6613902e505d365217275de4ef3b4ad552/gentools-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07488a81a6576b4e11ce40e7d560ba1d", "sha256": "cae5a8b639b19e1f61bc13235ede24dbd587c50843f67604cfaec2e56d352b3d" }, "downloads": -1, "filename": "gentools-1.1.0.tar.gz", "has_sig": false, "md5_digest": "07488a81a6576b4e11ce40e7d560ba1d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9578, "upload_time": "2018-03-02T18:02:36", "url": "https://files.pythonhosted.org/packages/82/87/37f644900c7ca1d3f6fbfd7ba7af9085c329aa275399d906100512578d97/gentools-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a84e12190b0e53118453642fe46a810d", "sha256": "0ab3bd0415e3d3660970876012a3da2bf22ef0e563dcf1c9f91abfef240470ee" }, "downloads": -1, "filename": "gentools-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a84e12190b0e53118453642fe46a810d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 10831, "upload_time": "2018-03-02T18:02:32", "url": "https://files.pythonhosted.org/packages/58/c1/889473a5eea7b8c5785c5b4b2f6613902e505d365217275de4ef3b4ad552/gentools-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07488a81a6576b4e11ce40e7d560ba1d", "sha256": "cae5a8b639b19e1f61bc13235ede24dbd587c50843f67604cfaec2e56d352b3d" }, "downloads": -1, "filename": "gentools-1.1.0.tar.gz", "has_sig": false, "md5_digest": "07488a81a6576b4e11ce40e7d560ba1d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9578, "upload_time": "2018-03-02T18:02:36", "url": "https://files.pythonhosted.org/packages/82/87/37f644900c7ca1d3f6fbfd7ba7af9085c329aa275399d906100512578d97/gentools-1.1.0.tar.gz" } ] }