{ "info": { "author": "Takao Magoori", "author_email": "takaomag@users.noreply.github.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Other Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "chatora.dispatch\n================\n\nMultiple argument dispatching for Python.\n\n\n## Usage\nTransform a function into a dispatch generic function, such as the [functools.singledispatch](https://docs.python.org/3/library/functools.html#functools.singledispatch).\nUnlike the [functools.singledispatch](https://docs.python.org/3/library/functools.html#functools.singledispatch), it supports multi-dispatch.\n\n```python\nfrom chatora.dispatch.api import dispatch\n\n\n@dispatch\ndef func(arg0, arg1):\n return '1st func'\n\n\nassert func(0, 0) == '1st func'\nassert func('0', '0') == '1st func'\n\n\n@func.register\ndef _(arg0, arg1: int):\n return '2nd func'\n\n\nassert func(0, 0) == '2nd func'\nassert func('0', 0) == '2nd func'\nassert func('0', '0') == '1st func'\n\n\n@func.register\ndef _(arg0: int, arg1: int):\n return '3rd func'\n\n\nassert func(0, 0) == '3rd func'\nassert func('0', 0) == '2nd func'\nassert func('0', '0') == '1st func'\n```\n\n\nIt partially supports arguments with typing.Union, typing.Optioanl and typing.Any.\ntyping.Any is equivalent to empty annotation.\n\n```python\nfrom chatora.dispatch.api import dispatch\nimport typing\n\n\n@dispatch\ndef func(arg0: typing.Any, arg1: typing.Any):\n return '1st func'\n\n\n@func.register\ndef _(arg0: typing.Optional[str], arg1: typing.Union[str, list, tuple]):\n return '2nd func'\n\n\nassert func(0, 0) == '1st func'\nassert func('0', 0) == '1st func'\nassert func('0', '0') == '2nd func'\nassert func('0', []) == '2nd func'\nassert func(None, ()) == '2nd func'\n```\n\n\nIt also partially supports return type annotation.\n\n```python\nfrom chatora.dispatch.api import dispatch\nimport typing\n\n\nclass ResultTuple(tuple):\n def __new__(cls, *args):\n return super().__new__(cls, args)\n\n\nclass ResultClass:\n def __init__(self, a, b):\n self.a, self.b = a, b\n\n\n@dispatch\ndef func(arg0: typing.Optional[str], arg1: tuple):\n return '1st func'\n\n\n@func.register\ndef _(arg0: typing.Optional[str], arg1: tuple) -> typing.Sequence[str]:\n return ['2nd', 'func']\n\n\n@func.register\ndef _(arg0: typing.Optional[str], arg1: tuple) -> typing.Tuple[str]:\n return ('3rd', 'func')\n\n\n@func.register\ndef _(arg0: typing.Optional[str], arg1: tuple) -> ResultTuple:\n return ResultTuple('4th', 'func')\n\n\n@func.register\ndef _(arg0: typing.Optional[str], arg1: tuple) -> ResultClass:\n return ResultClass('4th', 'func')\n\n\nassert func('0', ()) == '1st func'\nassert func('0', (), _return_type=typing.Sequence[str]) == ['2nd', 'func']\nassert func('0', (), _return_type=typing.Tuple[str]) == ('3rd', 'func')\nassert func('0', (), _return_type=ResultTuple) == ResultTuple('4th', 'func')\nassert isinstance(func('0', (), _return_type=ResultClass), ResultClass)\n```\n\n\n\nChangelog\n=========\n\n0.1 (2019-05-01)\n----------------\n- Birth!\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/takaomag/chatora.dispatch/releases", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/takaomag/chatora.dispatch", "keywords": "dispatch,overload", "license": "MIT", "maintainer": "Takao Magoori", "maintainer_email": "takaomag@users.noreply.github.com", "name": "chatora.dispatch", "package_url": "https://pypi.org/project/chatora.dispatch/", "platform": "", "project_url": "https://pypi.org/project/chatora.dispatch/", "project_urls": { "Download": "https://github.com/takaomag/chatora.dispatch/releases", "Homepage": "https://github.com/takaomag/chatora.dispatch", "documentation": "https://github.com/takaomag/chatora.dispatch/blob/master/README.md", "issues": "https://github.com/takaomag/chatora.dispatch/issues", "source code": "https://github.com/takaomag/chatora.dispatch" }, "release_url": "https://pypi.org/project/chatora.dispatch/0.1/", "requires_dist": [ "setuptools (>=41.0.1)", "pip (>=19.1.1)", "wheel (>=0.33.4)", "packaging (>=19.0)", "bumpversion (>=0.5.3) ; extra == 'dev'", "check-manifest (>=0.38) ; extra == 'dev'", "colorama (>=0.4.1) ; extra == 'dev'", "click-completion (>=0.5.1) ; extra == 'shell'", "click-help-colors (>=0.5) ; extra == 'shell'" ], "requires_python": ">=3.7", "summary": "Multiple argument dispatching for Python.", "version": "0.1" }, "last_serial": 5290483, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "0bd82ae1927a61d1086071d57b6f0edb", "sha256": "a2767494945542334975a3953de612131f43a9ae0e05807ea5046e9542c158b6" }, "downloads": -1, "filename": "chatora.dispatch-0.1-py37-none-any.whl", "has_sig": false, "md5_digest": "0bd82ae1927a61d1086071d57b6f0edb", "packagetype": "bdist_wheel", "python_version": "py37", "requires_python": ">=3.7", "size": 8331, "upload_time": "2019-05-20T06:00:11", "url": "https://files.pythonhosted.org/packages/d0/74/81444c4ba2733ea111d5b2870ed90fb1ae356b998949ff535623ac3af588/chatora.dispatch-0.1-py37-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e32041997cd33fe973323322551f0abb", "sha256": "551cee894149404538642eeef544fb937b4843c596d6be97de6f0bc4796f1307" }, "downloads": -1, "filename": "chatora.dispatch-0.1.tar.gz", "has_sig": false, "md5_digest": "e32041997cd33fe973323322551f0abb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 7962, "upload_time": "2019-05-20T06:00:13", "url": "https://files.pythonhosted.org/packages/df/49/3e51a039ce9ca0b6b027782d0cc71cc7e24fe03aaa208e9c59530df99b13/chatora.dispatch-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0bd82ae1927a61d1086071d57b6f0edb", "sha256": "a2767494945542334975a3953de612131f43a9ae0e05807ea5046e9542c158b6" }, "downloads": -1, "filename": "chatora.dispatch-0.1-py37-none-any.whl", "has_sig": false, "md5_digest": "0bd82ae1927a61d1086071d57b6f0edb", "packagetype": "bdist_wheel", "python_version": "py37", "requires_python": ">=3.7", "size": 8331, "upload_time": "2019-05-20T06:00:11", "url": "https://files.pythonhosted.org/packages/d0/74/81444c4ba2733ea111d5b2870ed90fb1ae356b998949ff535623ac3af588/chatora.dispatch-0.1-py37-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e32041997cd33fe973323322551f0abb", "sha256": "551cee894149404538642eeef544fb937b4843c596d6be97de6f0bc4796f1307" }, "downloads": -1, "filename": "chatora.dispatch-0.1.tar.gz", "has_sig": false, "md5_digest": "e32041997cd33fe973323322551f0abb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 7962, "upload_time": "2019-05-20T06:00:13", "url": "https://files.pythonhosted.org/packages/df/49/3e51a039ce9ca0b6b027782d0cc71cc7e24fe03aaa208e9c59530df99b13/chatora.dispatch-0.1.tar.gz" } ] }