{ "info": { "author": "Keita Oouchi", "author_email": "keita.oouchi@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.0", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "About this module\r\n-----------------\r\nWrapper module which provides iterable object with infix style method chaining. \r\n\r\nUnreadble::\r\n\r\n >>> filter(lambda y: y % 2, map(lambda x: x + 1, iterable))\r\n\r\nReadable::\r\n\r\n >>> iterable = react(iterable)\r\n >>> iterable.map(lambda x: x + 1).filter(lambda y: y % 2)\r\n \r\n.. image:: https://secure.travis-ci.org/keitaoouchi/chainreaction.png\r\n\r\nHow to install\r\n--------------\r\nRequires python2.6 or later (include python3.x).\r\nYou need *pip* or *distribute* or *setuptools*::\r\n\r\n $ pip install chainreaction\r\n\r\nor use easy_install::\r\n\r\n $ easy_install chainreaction\r\n \r\nRecent changed\r\n--------------\r\n0.2.0\r\n^^^^^\r\n* Supported python2.6 .\r\n* Changed to use itertools in 'Chainable.filter/map' methods in python2.x .\r\n\r\n0.1.2\r\n^^^^^\r\n* Supported 'for' statement.\r\n\r\nHow to use\r\n----------\r\nThe simplest and an only way to use this module is to call the **react** function. \r\n**react** is a factory function which looks up *'__iter__'* / *'__getitem__'* \r\nfrom an given iterable, and returns wrapped object.\r\n\r\nExample to use::\r\n\r\n >>> from chainreaction.reactor import react\r\n >>> react(\"hello\")\r\n >>> react([1, 2, 3])\r\n >>> react(iter([1, 2, 3])\r\n >>> class DictLike(dict):pass\r\n >>> react(DictLike())\r\n\r\nChainable object support any methods of its wrapped object,\r\nand try to wrap their return value. \r\nBy convention, side effective methods return nothing, but chainable object\r\nreturns its side affected object wrapped with appropriate wrappper. \r\nIf iterator was passed into **react**, it would be consumed when it called\r\nany iterative methods.\r\n\r\nExample to use::\r\n\r\n >>> tobewrapped = \"hello\"\r\n >>> wrapped = react(tobewrapped)\r\n >>> wrapped = wrapped.upper().map(lambda c: ord(c))\r\n >>> [chr(c) for c in wrapped.unwrap] = [c for c in tobewrapped.upper()]\r\n True\r\n >>> tobewrapped = [1, 2, 3]\r\n >>> wrapped = react(tobewrapped)\r\n >>> wrapped.append(4).count()\r\n 4\r\n >>> len(tobewrapped)\r\n 4\r\n\r\nIf an iterator was given, this iterator would be consumed\r\nwhen it called any method::\r\n\r\n >>> tobewrapped = iter([1,2,3])\r\n >>> wrapped = react(tobewrapped)\r\n >>> wrapped.count()\r\n 4\r\n >>> len(list(tobewrapped))\r\n 0\r\n \r\nTiny percent encoding implementation example::\r\n\r\n >>> test = bytes(\"hello world-._~\", encoding=\"UTF-8\")\r\n >>> wrapped = react(test)\r\n >>> safe = set()\r\n >>> react(\"0123456789\").foreach(lambda c: safe.add(ord(c)))\r\n >>> react(range(ord('a'), ord('z') + 1)).foreach(lambda b: safe.add(b))\r\n >>> react(range(ord('A'), ord('Z') + 1)).foreach(lambda b: safe.add(b))\r\n >>> react(\"-._~\").foreach(lambda c: safe.add(ord(c)))\r\n >>> test = wrapped.map(lambda b: b if b > 0 else 256 + b)\r\n >>> test = test.map(lambda i: '+' if chr(i).isspace() else chr(i) if i in safe else \"%{0:x}\".format(i))\r\n >>> test.tostring == \"hello+world-._~\"\r\n True\r\n \r\nBasic API\r\n---------\r\n* unwrap\r\n Retrieves iterable from wrapped object.\r\n* dump\r\n Elements dump.\r\n* isiterator\r\n True if wrapped object is iterator.\r\n* tostring\r\n Returns almost same with \"\".join((str(x) for x in iterable)). This method always returns str object. str wrapped returns unwrapped, bytes or bytearray wrapped returns str converted, dict wrapped returns \"key=value\" pairs joined with \"&\".\r\n* foreach(f)\r\n Applies a given f to all elements.\r\n* filter(pred)\r\n Selects all elements which satisfy a given predicate.\r\n* map(f)\r\n Builds a new collection by applying a given f.\r\n* forall(pred)\r\n True if all elements satisfy a given predicate.\r\n* forany(pred)\r\n True if any elements satisfy a given predicate.\r\n* dropwhile(pred)\r\n Drops longest prefix of elements that satisfy a given predicate.\r\n* dropright(pred)\r\n Drops longest suffix of elements that satisfy a given predicate.\r\n* takwhile(pred)\r\n Takes longest prefix of elements that satisfy a given predicate.\r\n* takeright(pred)\r\n Takes longest suffix of elements that satisfy a given predicate.\r\n* mkstring(joiner=\"\")\r\n Returns wrapped str object using a joiner string.\r\n* counts(pred=lambda x: True)\r\n Counts the number of elements that satisfy a given predicate.\r\n* contains(key)\r\n Tests whether this wrapped object contains a given key as an element.\r\n* reduce(f)\r\n Returns a value(not wrapped) using a given f.\r\n \r\niterator specific API\r\n^^^^^^^^^^^^^^^^^^^^^\r\n* tolist\r\n Returns a new list wrapped.\r\n* totuple\r\n Returns a new tuple wrapped.\r\n* toset\r\n Returns a new set wrapped.\r\n \r\nstr, bytes, bytearray specific API\r\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n* reverse\r\n Returns a new reversed str wrapped.\r\n\r\nseq specific API\r\n^^^^^^^^^^^^^^^^\r\n* accumulate(f)\r\n Returns a seq of accumulated value.\r\n* reverse\r\n Returns a new reversed seq wrapped.\r\n* sort\r\n Returns a new sorted seq wrapped.\r\n* toset\r\n Returns a new set wrapped.\r\n\r\nset specific API\r\n^^^^^^^^^^^^^^^^\r\n* min\r\n Returns a minimum value.\r\n* max\r\n Returns a maximum value.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/keitaoouchi/chainreaction", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "chainreaction", "package_url": "https://pypi.org/project/chainreaction/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/chainreaction/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/keitaoouchi/chainreaction" }, "release_url": "https://pypi.org/project/chainreaction/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "Wrapper module which provides iterable object with infix style method chaining.", "version": "0.2.0" }, "last_serial": 723214, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "b2a41a07006049f2d9e78a952638217b", "sha256": "da5743140efd1c0e4da54b3d6573a68958b8194590ce6f491b43aebb61082d30" }, "downloads": -1, "filename": "chainreaction-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b2a41a07006049f2d9e78a952638217b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7922, "upload_time": "2011-07-14T02:11:48", "url": "https://files.pythonhosted.org/packages/b1/8f/d1f0ec47a8d7ab7eda2761d27d17f5550d09c4e9fb45710edc32b1a9537f/chainreaction-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "1ea64a99d110b4e66936490bc7372dde", "sha256": "99791bc11814d38642b22957b09365d0acadcb68c694c5b536b9f72250a01021" }, "downloads": -1, "filename": "chainreaction-0.1.0.zip", "has_sig": false, "md5_digest": "1ea64a99d110b4e66936490bc7372dde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13441, "upload_time": "2011-07-14T02:08:11", "url": "https://files.pythonhosted.org/packages/22/0e/a9bd2e60afff742e899ccfc1aec9d735e1da9fd25cc09830d0c3c16aec1e/chainreaction-0.1.0.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7477a2b2b4bf897743e8a64bc9598568", "sha256": "f4b3d97a74382a78d390ed703538b7e8c1b208c298f61b8c0b12b88812d669ca" }, "downloads": -1, "filename": "chainreaction-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7477a2b2b4bf897743e8a64bc9598568", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8179, "upload_time": "2011-07-14T07:53:08", "url": "https://files.pythonhosted.org/packages/e7/6f/b199166d8d2560368e86b5fa182c7659aa6863fdc6960151f29e05485ac7/chainreaction-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "6ae6477a23d5b99a83729f155dfff0f7", "sha256": "a79b1bb3254ddce53e1b2a1c1aeb2d7c8842f24aed73200a47556cb60d89b6cc" }, "downloads": -1, "filename": "chainreaction-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6ae6477a23d5b99a83729f155dfff0f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9420, "upload_time": "2011-08-01T17:15:09", "url": "https://files.pythonhosted.org/packages/8b/64/f30ee7e90d60d2c72d18c322fa16e8978686e355bf5017a3483b6564c3c0/chainreaction-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d8032c17090c7aa4e67e12b4a7bd04f8", "sha256": "a064ecdd518613a657c61b4701e29946b05e4d4a15082d58d1d8121262d55da0" }, "downloads": -1, "filename": "chainreaction-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d8032c17090c7aa4e67e12b4a7bd04f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15338, "upload_time": "2011-08-04T02:09:36", "url": "https://files.pythonhosted.org/packages/db/c0/343836dc4c00094d366790adfe73b00b8ecb7947ad668dd60f105e6063dd/chainreaction-0.2.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "4a25e4f2c8c15735962e3ac8a1aac99a", "sha256": "65eb0b486c5939c14e7248a0649b3ce46496a11c85546bed337d5be82c68196c" }, "downloads": -1, "filename": "chainreaction-0.2.0.zip", "has_sig": false, "md5_digest": "4a25e4f2c8c15735962e3ac8a1aac99a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21066, "upload_time": "2012-05-31T08:53:03", "url": "https://files.pythonhosted.org/packages/7f/1a/ea637cce5c76f1412cc36302d98aee4eb81b317807731b258cc680ba66c6/chainreaction-0.2.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d8032c17090c7aa4e67e12b4a7bd04f8", "sha256": "a064ecdd518613a657c61b4701e29946b05e4d4a15082d58d1d8121262d55da0" }, "downloads": -1, "filename": "chainreaction-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d8032c17090c7aa4e67e12b4a7bd04f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15338, "upload_time": "2011-08-04T02:09:36", "url": "https://files.pythonhosted.org/packages/db/c0/343836dc4c00094d366790adfe73b00b8ecb7947ad668dd60f105e6063dd/chainreaction-0.2.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "4a25e4f2c8c15735962e3ac8a1aac99a", "sha256": "65eb0b486c5939c14e7248a0649b3ce46496a11c85546bed337d5be82c68196c" }, "downloads": -1, "filename": "chainreaction-0.2.0.zip", "has_sig": false, "md5_digest": "4a25e4f2c8c15735962e3ac8a1aac99a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21066, "upload_time": "2012-05-31T08:53:03", "url": "https://files.pythonhosted.org/packages/7f/1a/ea637cce5c76f1412cc36302d98aee4eb81b317807731b258cc680ba66c6/chainreaction-0.2.0.zip" } ] }