Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

decoroute

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

decoroute

Pattern-matching based WSGI-compliant URL routing tool

  • 0.8.1
  • PyPI
  • Socket score

Maintainers
1

decoroute

.. contents:

Decorator style and pattern-matching based url routing library. No framework! Very compact. Core logic less 100 lines of code. WSGI compliant. No additional API required.

Complete example

::

import decoroute

app = decoroute.App(prefix='')

# pure WSGI
@app.expose('/wsgi/<id:\d+>')
@decoroute.wsgi('wsgiorg.routing_args')
def wsgi_app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return environ['wsgiorg.routing_args']

# pass variables into **kw
def render_response(status = '200 OK', content_type = 'text/plain', add_headers = [], **context):
    return status, [('Content-Type', content_type)] + add_headers, context

@app.expose('/node', id = '1')
@app.expose('/node/<id:\d+>')
def node(env, id):
    return render_response(id = id)

@app.expose('/url_for')
def url_for(env):
    return render_response(url = app.url_for(node, id = 666))

@app.expose('/404')
def not_found(env):
    raise decoroute.NotFound()

@app.not_found
def not_found_handler(env):
    return render_response(status = '404 NF', **env)

@app.render
def render(env, (status, headers, context)):
    context['site_uri'] = '%s://%s' % (env['wsgi.url_scheme'], env['HTTP_HOST'])
    return status, headers, ['%s=%s\n' %(k, context[k]) for k in context.keys()] # fake templating

from wsgiref.simple_server import make_server

make_server('', 6666, app).serve_forever()

Tips

If you place your views (Django term. in ror - controller) in another modules, organize code like werkzeug <http://dev.pocoo.org/hg/werkzeug-main/file/tip/examples/shorty/>_.

::

# utils.py

import decoroute
app = decoroute.App()

::

# view.py and anoter

from utils import *

@app.render
def render(env, ...)
    # returns of your endpoints pass to render handler
    # in render use your prefered template engine and return triple
    # status, generator of response headers, generator of response body
    # ( generator / iterator / list - any )
    # if you use default render endpoints must be return triple

@app.not_found
    # no route enpoint
    # it also pass to render handler

@app.expose('/node', id = '1')
@app.expose('/node/<id:\d+>')
def node(env, id):
    # endpoint passed some variables
    # env is a wsgi environ
    # id = '1' default value of parameter
    #   all parameters must be <type 'str'>
    # <id:\d+> parameter pattern;
    #   \d+ specify regexp constraint of parameter (required)

::

# manage.py - main module

from utils import app
import view # and all other

if __name__ == '__main__':
    # serve app here

decoroute distributed under terms of GNU LGPL v.2.1 <http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt>_.

Copyright 2008 - present Vsevolod Balashov <http://vsevolod.balashov.name/>_.

Source code of decoroute <http://bitbucket.org/sevkin/decoroute/>. Arch Linux PKGBUILD <http://aur.archlinux.org/packages.php?ID=31564>.

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc