{ "info": { "author": "Atsushi Odagiri", "author_email": "aodagx@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware", "Topic :: Software Development :: Libraries" ], "description": "WebDispatch\n============================\n\n.. image:: https://travis-ci.org/aodag/WebDispatch.svg?branch=master\n :target: https://travis-ci.org/aodag/WebDispatch\n\n.. image:: https://coveralls.io/repos/aodag/WebDispatch/badge.png?branch=master \n :target: https://coveralls.io/r/aodag/WebDispatch?branch=master \n\n.. image:: https://pypip.in/wheel/WebDispatch/badge.png\n :target: https://pypi.python.org/pypi/WebDispatch/\n :alt: Wheel Status\n\nWebDispatch is dispatcher collection for wsgi application. \nThat has no dependency to exsiting frameworks, but works fine with `WebOb `_.\n\nDispatch and Generate URL\n-----------------------------------------------\n\ndispatch with url patterns.\n\nexample helo application::\n\n >>> from webob.dec import wsgify\n >>> @wsgify\n ... def greeting(request):\n ... return \"Hello, %s\" % request.urlvars['name']\n\ncreate and configure URL Dispatcher::\n\n >>> from webdispatch import URLDispatcher\n >>> dispatcher = URLDispatcher()\n >>> dispatcher.add_url('top', '/hello/{name}', greeting)\n\ninvoke dispatcher as WSGI Application::\n\n >>> from webob import Request\n >>> req = Request.blank('/hello/webdispatch')\n >>> res = req.get_response(dispatcher)\n >>> res.body\n b'Hello, webdispatch'\n\n\nWildcard\n+++++++++++++++\n\nYou can use wildcard after last slash.\nPattern with wildcard consumes paths before the wildcard, (and make that new script_name,)\nand remained paths becomes new path_info.\n\n::\n\n >>> @wsgify\n ... def with_pathinfo(request):\n ... return \"Hello, %s\" % request.path_info\n >>> dispatcher.add_url('top', '/with_pathinfo/*', with_pathinfo)\n >>> req = Request.blank('/with_pathinfo/this/is/pathinfo')\n >>> res = req.get_response(dispatcher)\n >>> res.body\n b'Hello, this/is/pathinfo'\n\nType Converter\n++++++++++++++++++\n\nYou can specify converter with varname below \":\".\n\n::\n\n >>> @wsgify\n ... def add(request):\n ... result = request.urlvars['v1'] + request.urlvars['v2']\n ... return \"result, %d\" % result\n >>> dispatcher.add_url('add', '/add/{v1:int}/{v2:int}', add)\n >>> req = Request.blank('/add/1/2')\n >>> res = req.get_response(dispatcher)\n >>> res.body\n b'result, 3'\n\ndefault converters are defined as bellow::\n\n DEFAULT_CONVERTERS = {\n 'int': int,\n 'date': lambda s: datetime.strptime(s, '%Y-%m-%d'),\n 'date_ym': lambda s: datetime.strptime(s, '%Y-%m'),\n }\n\n\nAction Dispatch\n-------------------------------------------------\n\nActionDispatcher invokes object method with action name from urlvars.\n\naction handler class::\n\n >>> class MyHandler(object):\n ... @wsgify\n ... def greeting(self, request):\n ... return \"Hello\"\n\ncreate and configure ActionDispatcher::\n\n >>> from webdispatch import ActionDispatcher\n >>> actiondispatcher = ActionDispatcher()\n >>> actiondispatcher.register_actionhandler(MyHandler)\n\nadd action url with urlvars named action::\n\n >>> dispatcher.add_url('action_dispatch', '/actions/{action}', actiondispatcher)\n\ninvoke wsgi appclication.::\n\n >>> req = Request.blank('/actions/greeting')\n >>> res = req.get_response(dispatcher)\n >>> res.body\n b'Hello'\n\nMethod Dispatch\n-------------------------------------\n\ndispatch by HTTP METHOD restfully.\n\nuse ``register_app`` decorator::\n\n >>> from webdispatch import MethodDispatcher\n >>> restapp = MethodDispatcher()\n >>> @restapp.register('get')\n ... @wsgify\n ... def get_hello(request):\n ... return \"Get Hello\"\n >>> @restapp.register('post')\n ... @wsgify\n ... def post_hello(request):\n ... return \"Post Hello\"\n\n\n\nor use ``registe_app`` method::\n\n >>> from webdispatch import MethodDispatcher\n >>> restapp = MethodDispatcher()\n >>> restapp.register_app('get', get_hello)\n >>> restapp.register_app('post', post_hello)\n\nEach applications are registered with HTTP Method name.\n\ninvoke WSGI application::\n\n >>> req = Request.blank('/')\n >>> res = req.get_response(restapp)\n >>> res.body\n b'Get Hello'\n\nextra_environ\n---------------------------\n\n``DispatchBase`` accepts ``extra_environ`` argument.\nDispatcher adds that argument to wsgi environ by request.\n\nChanges\n=========================\n\n\n1.3\n-------------------------\n\n- added decrator API\n\n1.2\n-------------------------\n\n- added extra_environ argument to constructer\n- drop python2.6 tests\n- drop dependency for python2.6\n- added type converter for url vars\n\n\n1.1\n-------------------------\n\n- added extra_environ method to DispatchBase class\n- added support for Python 3.4\n\n1.0.1\n------------------------\n\n- include char of \"-\" to urlmatch words `#9 `_\n\n1.0\n------------------------\n\n- no changes\n\n1.0b4\n------------------------\n\n- fix response body to bytes\n\n1.0b3\n------------------------\n\n- fix some bugs\n\n\n1.0b2\n-----------------------\n\n- fix setup bug", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/aodag/WebDispatch", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "WebDispatch", "package_url": "https://pypi.org/project/WebDispatch/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/WebDispatch/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/aodag/WebDispatch" }, "release_url": "https://pypi.org/project/WebDispatch/1.3/", "requires_dist": null, "requires_python": null, "summary": "dispatch request on wsgi application.", "version": "1.3" }, "last_serial": 1311544, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "389580cfcad95609531e55b9a8774533", "sha256": "91cb24fa726f7353cc683707e8ee23d197163820151225aeeb44c90803c906f0" }, "downloads": -1, "filename": "WebDispatch-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "389580cfcad95609531e55b9a8774533", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 12107, "upload_time": "2014-01-02T16:08:16", "url": "https://files.pythonhosted.org/packages/2a/80/7d528ed5d491c9af004d188b2baf2554d6cda3e2179b8d81383cffca6de3/WebDispatch-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "646e67f9f0d01cc3ddb009ec847dc1bc", "sha256": "89c8deac470740e5e95ea33cce4ec77e7d68f3c2921e210ea18b0af5c48db6e0" }, "downloads": -1, "filename": "WebDispatch-1.0.zip", "has_sig": false, "md5_digest": "646e67f9f0d01cc3ddb009ec847dc1bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14177, "upload_time": "2013-09-02T12:37:55", "url": "https://files.pythonhosted.org/packages/b6/f1/28824fff13a12391f792d84cb95404db8d90ee92923b602368baeddd146d/WebDispatch-1.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "f34703e67878bc45df27a877853fc076", "sha256": "fa9c7cec96ea79758ca3e029a6a9d22b8885e033c4dd93b10f5b7fdd3c733aaa" }, "downloads": -1, "filename": "WebDispatch-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f34703e67878bc45df27a877853fc076", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 12373, "upload_time": "2014-01-12T05:08:03", "url": "https://files.pythonhosted.org/packages/ab/5b/4046d28527aafc95606aca7e5661ba6e97252fa78ed546a79119a40b8841/WebDispatch-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "418ec3bf64a57cf20d8d6ea61787037a", "sha256": "9e0d3d8bd4ab272956bcf6c15695e134e9638a9562125816407cd80ba7b36805" }, "downloads": -1, "filename": "WebDispatch-1.0.1.tar.gz", "has_sig": false, "md5_digest": "418ec3bf64a57cf20d8d6ea61787037a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7473, "upload_time": "2014-01-12T05:08:05", "url": "https://files.pythonhosted.org/packages/1c/8a/d24add6c0276e2c3f052ae6c4c2da143b2490ebd00215b72b471730e3b37/WebDispatch-1.0.1.tar.gz" } ], "1.0b1": [ { "comment_text": "", "digests": { "md5": "0cc3c09c53f49ca46a30693f70999c0e", "sha256": "93744c1a4abeb68fa69884130b8e77aa401ecbfd8ab5084316f965da22668ce6" }, "downloads": -1, "filename": "WebDispatch-1.0b1.zip", "has_sig": false, "md5_digest": "0cc3c09c53f49ca46a30693f70999c0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5436, "upload_time": "2011-11-01T16:36:39", "url": "https://files.pythonhosted.org/packages/4b/7d/db846f1643bb4188c4a8ee33e766e11562aefe0075fc9050d39b260fb37b/WebDispatch-1.0b1.zip" } ], "1.0b2": [ { "comment_text": "", "digests": { "md5": "92c5658cdbb62f3398329a2d0374073c", "sha256": "5bd9dc7deff779e75a8f14d9556d165f1e4b74dd3eb6ef871d5f6741bee8f9c5" }, "downloads": -1, "filename": "WebDispatch-1.0b2.zip", "has_sig": false, "md5_digest": "92c5658cdbb62f3398329a2d0374073c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11137, "upload_time": "2011-11-05T08:49:01", "url": "https://files.pythonhosted.org/packages/b5/b6/87817e023bd416599a03a0ec95a743462e3fdd241290650488089bb91f92/WebDispatch-1.0b2.zip" } ], "1.0b3": [ { "comment_text": "", "digests": { "md5": "b96cce976e5f83f80f7bc968f71cd494", "sha256": "241244b6965f28a39322b39a0e7850f24fb832bef09306c755447c9c737a7ee3" }, "downloads": -1, "filename": "WebDispatch-1.0b3.tar.gz", "has_sig": false, "md5_digest": "b96cce976e5f83f80f7bc968f71cd494", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12120, "upload_time": "2011-12-03T23:38:51", "url": "https://files.pythonhosted.org/packages/90/23/d139263f1bc9770a479fa2f38d090aa9a63572eb68992b3149f20714a6d5/WebDispatch-1.0b3.tar.gz" } ], "1.0b4": [ { "comment_text": "", "digests": { "md5": "c9c1eea4242248888e82b8400ab37889", "sha256": "498053c8069670f406f46f13bdf9055a9a02bb51df0d4c5b414ab3b8715edc32" }, "downloads": -1, "filename": "WebDispatch-1.0b4.tar.gz", "has_sig": false, "md5_digest": "c9c1eea4242248888e82b8400ab37889", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7448, "upload_time": "2012-09-22T03:52:41", "url": "https://files.pythonhosted.org/packages/2e/99/35f2b7252baea8820364f75b340b1d3b6135d4641b0461c18160ff418d9c/WebDispatch-1.0b4.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "6b28016bf6973cba7e7bb7356f53a82c", "sha256": "8dce31479d8eab73006d0b65e3d5662f9b5a1a16485b6228d55cd8a835d7f0bc" }, "downloads": -1, "filename": "WebDispatch-1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6b28016bf6973cba7e7bb7356f53a82c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 12700, "upload_time": "2014-03-29T08:29:09", "url": "https://files.pythonhosted.org/packages/0e/01/13e812debd2815ca9a149192dbd9a186c9b2c9032accfa3dc71688e731aa/WebDispatch-1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "843ceede932719a65789d49464c677d3", "sha256": "af2cdc509ddb008b074f4d502edbfd19d219997c52390a713b08511e8d44ec89" }, "downloads": -1, "filename": "WebDispatch-1.1.tar.gz", "has_sig": false, "md5_digest": "843ceede932719a65789d49464c677d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7712, "upload_time": "2014-03-29T08:29:07", "url": "https://files.pythonhosted.org/packages/53/53/b3fb3f1d3471d63fc423ce3c65ccf53177c62b02731c4edd2adc395d0a28/WebDispatch-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "a2a06d97e7844162bbe9577e504c1b03", "sha256": "859b2e11536eb0d217a767bfa80f75728ca9409109e9a083deaf784f02e07d91" }, "downloads": -1, "filename": "WebDispatch-1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a2a06d97e7844162bbe9577e504c1b03", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 17574, "upload_time": "2014-04-18T18:23:08", "url": "https://files.pythonhosted.org/packages/ca/45/c9d97a3a827ab8d526c28e5ed787daf179f92b30b912767b0e0fcc24e8c0/WebDispatch-1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e26dffa335333293974b6e5720a115c5", "sha256": "0558eb3c67408ff7b82ddd19ff692dea70bad479a6b6e363c4e5f8921ba01a3b" }, "downloads": -1, "filename": "WebDispatch-1.2.tar.gz", "has_sig": false, "md5_digest": "e26dffa335333293974b6e5720a115c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10357, "upload_time": "2014-04-18T18:23:11", "url": "https://files.pythonhosted.org/packages/f8/f4/b4532d8eeb920b465851f890b9dd6da539be0fcf55ee12de9096db912485/WebDispatch-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "bc44b97e63f53758a3f3d49c5e12a64e", "sha256": "9e49063871935d2ebfd2e025b5071ae8a6147c77057b40db1dfc81becab8a08d" }, "downloads": -1, "filename": "WebDispatch-1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bc44b97e63f53758a3f3d49c5e12a64e", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 17881, "upload_time": "2014-11-18T14:58:34", "url": "https://files.pythonhosted.org/packages/9c/2d/2ee683115383c3ba3e6e063a43b0953a1bb12766e535926f0cfbcb38a3fa/WebDispatch-1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fcaab76d957f2439e8c9bd76e3254891", "sha256": "f5a0971007412208fd5a673343302f97e7ed0fed32eb8440c2cc5b4b279a8c39" }, "downloads": -1, "filename": "WebDispatch-1.3.tar.gz", "has_sig": false, "md5_digest": "fcaab76d957f2439e8c9bd76e3254891", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10358, "upload_time": "2014-11-18T14:58:38", "url": "https://files.pythonhosted.org/packages/b9/8a/9d38473ac330d5242ee967d72157e01ceda79b291eaec41daa2c8bf8512a/WebDispatch-1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bc44b97e63f53758a3f3d49c5e12a64e", "sha256": "9e49063871935d2ebfd2e025b5071ae8a6147c77057b40db1dfc81becab8a08d" }, "downloads": -1, "filename": "WebDispatch-1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bc44b97e63f53758a3f3d49c5e12a64e", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 17881, "upload_time": "2014-11-18T14:58:34", "url": "https://files.pythonhosted.org/packages/9c/2d/2ee683115383c3ba3e6e063a43b0953a1bb12766e535926f0cfbcb38a3fa/WebDispatch-1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fcaab76d957f2439e8c9bd76e3254891", "sha256": "f5a0971007412208fd5a673343302f97e7ed0fed32eb8440c2cc5b4b279a8c39" }, "downloads": -1, "filename": "WebDispatch-1.3.tar.gz", "has_sig": false, "md5_digest": "fcaab76d957f2439e8c9bd76e3254891", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10358, "upload_time": "2014-11-18T14:58:38", "url": "https://files.pythonhosted.org/packages/b9/8a/9d38473ac330d5242ee967d72157e01ceda79b291eaec41daa2c8bf8512a/WebDispatch-1.3.tar.gz" } ] }