{ "info": { "author": "Whyme Lyu", "author_email": "callme5long@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Topic :: Software Development :: Code Generators" ], "description": "Forwardable\n===========\n\nUtility for easy object composition via delegation. Roughly ported from\nRuby's forwardable_ standard library.\n\nRequirements\n------------\n\nPython 2.7 or 3.3 w/ standard library. Might work on other version of\nPython, too.\n\nInstallation\n------------\n\n``$ pip install forwardable``\n\nUsage\n-----\n\nMost Common Use Case\n~~~~~~~~~~~~~~~~~~~~\n\nThe ``@forwardable.forwardable()`` decorator enables you to use\n``def_delegator()`` and ``def_delegators()`` in a class definition block.\n\nUse ``def_delegators()`` to define multiple attr forwarding:\n\n.. code-block:: python\n\n from forwardable import forwardable\n\n @forwardable() # Note the () here, which is required.\n class Foo(object):\n def_delegators('bar', 'add, __len__')\n\n def __init__(self):\n self.bar = set()\n\n foo = Foo()\n foo.add(1) # Delegates to foo.bar.add()\n assert len(foo) == 1 # Magic methods works, too\n\nEasy, heh?\n\nDefine a Single Forwarding\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIn case you only need to delegate one method to a delegatee, just\nuse ``def_delegator``:\n\n.. code-block:: python\n\n from forwardable import forwardable\n\n @forwardable()\n class Foo(object):\n def_delegator('bar', '__len__')\n\n def __init__(self):\n self.bar = set()\n\n assert len(Foo()) == 0\n\nAnd it should work just fine. Actually, ``def_delegators()`` calls\n``def_delegator()`` under the hood.\n\nPlucking\n~~~~~~~~\n\n.. code-block:: python\n\n from forwardable import forwardable\n\n @forwardable()\n class MyDict(object):\n def_delegator('dct.get', '__call__')\n def __init__(self):\n self.dct = {'foo', 42}\n\n d = MyDict()\n # Equivlant to d.dct.get('foo')\n assert d('foo') == 42\n\nLess Magical Usage\n~~~~~~~~~~~~~~~~~~\n\nThe ``@forwardable()`` decorator injects ``def_delegator{,s}`` into the\nmodule scope temorarily, which is why you don't have to import them\nexplicitly. This is admittedly magical but discourages the usage\nof ``import *``. And it's always nice to type less characters whenever\nunnecessary.\n\nIf you hesitate to utilize this injection magic, just explicitly say\n``from forwardable import def_delegator, def_delegators``, use them in\na class definition and you'll be fine.\n\nLinks\n-----\n\n* Source Repository: https://github.com/5long/forwardable\n* Feedback: https://github.com/5long/forwardable/issues\n\nLicense\n-------\n\nMIT license.\n\n.. _forwardable: http://ruby-doc.org/stdlib-2.0/libdoc/forwardable/rdoc/Forwardable.html", "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/5long/forwardable", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "forwardable", "package_url": "https://pypi.org/project/forwardable/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/forwardable/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/5long/forwardable" }, "release_url": "https://pypi.org/project/forwardable/0.4.1/", "requires_dist": null, "requires_python": null, "summary": "Forwardable as in Ruby's stdlib", "version": "0.4.1" }, "last_serial": 2119298, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "b10faec57fd5c5745e2faae8444b8e4c", "sha256": "cf937ddbacd27207cf571d59084d1ccd561feaeb3b80ee973fb5679b1cf17c7c" }, "downloads": -1, "filename": "forwardable-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b10faec57fd5c5745e2faae8444b8e4c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3487, "upload_time": "2013-06-16T12:40:14", "url": "https://files.pythonhosted.org/packages/38/3d/6eb5a593e2c8e8fba8cdc6268e48be4a1eefa9cae68cea260919e6cfa6be/forwardable-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f440bbc68001da483f0aaf63003e449a", "sha256": "bafbccfece726db42d83c693db26f0b02ec465c831ae4da9433fa2d2ecd3ecc5" }, "downloads": -1, "filename": "forwardable-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f440bbc68001da483f0aaf63003e449a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3598, "upload_time": "2013-06-16T12:58:30", "url": "https://files.pythonhosted.org/packages/0b/bd/edba8056a9e0162be2de831e087f207342aacec047b9e331998dc7c308be/forwardable-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "b3394089c02c155c6e223989d643bebe", "sha256": "1cab87384bf309958a9d330bdde512116d66f0053333bd049bfaed9e873263b6" }, "downloads": -1, "filename": "forwardable-0.2.0.tar.gz", "has_sig": false, "md5_digest": "b3394089c02c155c6e223989d643bebe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4056, "upload_time": "2013-06-19T14:40:02", "url": "https://files.pythonhosted.org/packages/1d/d2/903b33dda3b2174ba6c93a061405522130fca77e013767edba5960c90c72/forwardable-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "02c1f759217e7100d80f41ee93b6bbeb", "sha256": "55ff0e762880ce589243f6dea6aaa02d4c721d9e74208cae0d4d4134e1ff3689" }, "downloads": -1, "filename": "forwardable-0.2.1.tar.gz", "has_sig": false, "md5_digest": "02c1f759217e7100d80f41ee93b6bbeb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4122, "upload_time": "2013-06-19T15:05:44", "url": "https://files.pythonhosted.org/packages/c8/ab/c8a4ab5e069c3361272f3da5a868192bb2b5dc9aca9cc9e836dc827a780e/forwardable-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "a7c016b6299e2abd2dd02d7f441e5ec4", "sha256": "a94fc6413f15016a8b4ba6ca260ea9aa41985c8bcc701043ee6bfe97e8593b12" }, "downloads": -1, "filename": "forwardable-0.3.0.tar.gz", "has_sig": false, "md5_digest": "a7c016b6299e2abd2dd02d7f441e5ec4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4715, "upload_time": "2013-06-30T05:10:58", "url": "https://files.pythonhosted.org/packages/34/f6/5cf6c70bb3629b1225aed3dc57fd6d8385dc4f1b56bbc62a56190e74d54c/forwardable-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "9245b87ba3b01fe26202d26c81188a8a", "sha256": "9042bfe6bec2c880e9138429920cabcf177fd4134cf3631ca5c0182be8cfcc64" }, "downloads": -1, "filename": "forwardable-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9245b87ba3b01fe26202d26c81188a8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4785, "upload_time": "2013-06-30T05:28:32", "url": "https://files.pythonhosted.org/packages/1a/9b/13f60f86c9c9df24b9147313b3d34cee639b99c682f1740d18fda136a1b8/forwardable-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c6a1f5495c16b44bc8f2cd2d1e7f0ca4", "sha256": "13aba5d309cfee5c809e977a3556e20469d60a05b861b08a64a11ddc3d03d516" }, "downloads": -1, "filename": "forwardable-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c6a1f5495c16b44bc8f2cd2d1e7f0ca4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5075, "upload_time": "2016-05-17T06:34:59", "url": "https://files.pythonhosted.org/packages/10/d5/e166f8d9f13a8af810617429b628eae2ce9509d020667c5c74fa5abbc3bc/forwardable-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "922af49a0a9e727ccf7f78b6c6c382c9", "sha256": "e84abd6aed24b39659304b8765c57fecaec208d372ea287fdbe71409f11139ca" }, "downloads": -1, "filename": "forwardable-0.4.1.tar.gz", "has_sig": false, "md5_digest": "922af49a0a9e727ccf7f78b6c6c382c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5122, "upload_time": "2016-05-17T06:51:43", "url": "https://files.pythonhosted.org/packages/74/01/af9252495478b84ecb6a139b67df57da4e32da5670f33028396111a962c7/forwardable-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "922af49a0a9e727ccf7f78b6c6c382c9", "sha256": "e84abd6aed24b39659304b8765c57fecaec208d372ea287fdbe71409f11139ca" }, "downloads": -1, "filename": "forwardable-0.4.1.tar.gz", "has_sig": false, "md5_digest": "922af49a0a9e727ccf7f78b6c6c382c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5122, "upload_time": "2016-05-17T06:51:43", "url": "https://files.pythonhosted.org/packages/74/01/af9252495478b84ecb6a139b67df57da4e32da5670f33028396111a962c7/forwardable-0.4.1.tar.gz" } ] }