{ "info": { "author": "Vsevolod Balashov", "author_email": "vsevolod@balashov.name", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Natural Language :: Russian", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application" ], "description": "decoroute\n=========\n\n.. contents:\n\nDecorator style and pattern-matching based url routing library. No framework!\nVery compact. Core logic less 100 lines of code. WSGI compliant. No additional API required.\n\nComplete example\n----------------\n\n::\n\n import decoroute\n \n app = decoroute.App(prefix='')\n \n # pure WSGI\n @app.expose('/wsgi/')\n @decoroute.wsgi('wsgiorg.routing_args')\n def wsgi_app(environ, start_response):\n start_response('200 OK', [('Content-Type', 'text/plain')])\n return environ['wsgiorg.routing_args']\n \n # pass variables into **kw\n def render_response(status = '200 OK', content_type = 'text/plain', add_headers = [], **context):\n return status, [('Content-Type', content_type)] + add_headers, context\n \n @app.expose('/node', id = '1')\n @app.expose('/node/')\n def node(env, id):\n return render_response(id = id)\n \n @app.expose('/url_for')\n def url_for(env):\n return render_response(url = app.url_for(node, id = 666))\n \n @app.expose('/404')\n def not_found(env):\n raise decoroute.NotFound()\n \n @app.not_found\n def not_found_handler(env):\n return render_response(status = '404 NF', **env)\n \n @app.render\n def render(env, (status, headers, context)):\n context['site_uri'] = '%s://%s' % (env['wsgi.url_scheme'], env['HTTP_HOST'])\n return status, headers, ['%s=%s\\n' %(k, context[k]) for k in context.keys()] # fake templating\n \n from wsgiref.simple_server import make_server\n \n make_server('', 6666, app).serve_forever()\n\nTips\n----\n\nIf you place your views (Django term. in ror - controller) in another modules, organize code like\n`werkzeug `_.\n\n::\n\n # utils.py\n \n import decoroute\n app = decoroute.App()\n\n::\n\n # view.py and anoter\n \n from utils import *\n \n @app.render\n def render(env, ...)\n # returns of your endpoints pass to render handler\n # in render use your prefered template engine and return triple\n # status, generator of response headers, generator of response body\n # ( generator / iterator / list - any )\n # if you use default render endpoints must be return triple\n \n @app.not_found\n # no route enpoint\n # it also pass to render handler\n \n @app.expose('/node', id = '1')\n @app.expose('/node/')\n def node(env, id):\n # endpoint passed some variables\n # env is a wsgi environ\n # id = '1' default value of parameter\n # all parameters must be \n # parameter pattern;\n # \\d+ specify regexp constraint of parameter (required)\n\n::\n\n # manage.py - main module\n \n from utils import app\n import view # and all other\n \n if __name__ == '__main__':\n # serve app here\n\nLegal\n-----\n\ndecoroute distributed under terms of\n`GNU LGPL v.2.1 `_.\n\nCopyright 2008 - present `Vsevolod Balashov `_.\n\nLinks\n-----\n\nSource code of `decoroute `_.\nArch Linux `PKGBUILD `_.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/decoroute", "keywords": "python wsgi decorator route routing tool mvc mtv web webdev www", "license": "LGPL 2.1", "maintainer": "", "maintainer_email": "", "name": "decoroute", "package_url": "https://pypi.org/project/decoroute/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/decoroute/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/decoroute" }, "release_url": "https://pypi.org/project/decoroute/0.8.1/", "requires_dist": null, "requires_python": null, "summary": "Pattern-matching based WSGI-compliant URL routing tool", "version": "0.8.1" }, "last_serial": 788875, "releases": { "0.8.1": [ { "comment_text": "", "digests": { "md5": "f2af41ad753ad0ad39d728020ac2fe94", "sha256": "54f3f9aef95ce17ad97dc745e6d8445402490bb0906d117a22e26260026bd649" }, "downloads": -1, "filename": "decoroute-0.8.1.tar.gz", "has_sig": false, "md5_digest": "f2af41ad753ad0ad39d728020ac2fe94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5949, "upload_time": "2009-10-28T09:06:20", "url": "https://files.pythonhosted.org/packages/9b/15/a2efe5cc43a6d1f74e1e320acaee1d1dc7e7e24a1b0292d366171fc0579b/decoroute-0.8.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f2af41ad753ad0ad39d728020ac2fe94", "sha256": "54f3f9aef95ce17ad97dc745e6d8445402490bb0906d117a22e26260026bd649" }, "downloads": -1, "filename": "decoroute-0.8.1.tar.gz", "has_sig": false, "md5_digest": "f2af41ad753ad0ad39d728020ac2fe94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5949, "upload_time": "2009-10-28T09:06:20", "url": "https://files.pythonhosted.org/packages/9b/15/a2efe5cc43a6d1f74e1e320acaee1d1dc7e7e24a1b0292d366171fc0579b/decoroute-0.8.1.tar.gz" } ] }