Angelo Gladding
Hacker for right homesteading an independent web.


A web application framework.

Strongly influenced by [Aaron Swartz][0]' "anti-framework" this library aims to cleanly abstract low-level web functionality through a Pythonic API.

Think about the ideal way to write a web app. Write the code to make it happen.

~ Aaron Swartz [1]

application(name, _prefix='', prefix='', model=None, db=True, static=None, icon=None, mounts=None, automount=False, autotemplate=False, wrappers=None, sessions=False, host=None, port=False, args=None) -> 'Application' # [source]


load_mounts() # [source]


get_host_hash(path) # [source]


get_sites() # [source]

get_apps() # [source]

best_match(handlers, *args, **kwargs) # [source]

textslug(title, delim='_', lower=True) # [source]

return a path slug containing a normalized version of title

Defaults to delimiting words by "_" and enforcing all lowercase. Also makes intelligent path-friendly replacements (e.g. "&" to "and").

>>> textslug("Surfing with @Alice & @Bob!")

timeslug(dt) # [source]

return a path slug containing date and time

Date is encoded in standard YYYY/MM/DD form while the time is encoded as the NewBase60 equivalent of the day's centiseconds.

anti_csrf(handler) # [source]

serve(wsgi_app, port=9300, socket=None, workers=2, watch_dir='.') # [source]


resume_session(handler, app) # [source]


require_auth(*allowed_roles) # [source]


enqueue(callable, *args, **kwargs) # [source]

append a function call to the end of the job queue

StandaloneServer(app, port) # [source]

A standalone gunicorn webapp context for the canopy.

Resource(**kwargs) # [source]

Application(name, db=True, args=None, model=None, static=None, icon=None, sessions=False, mounts=None, automount=False, autotemplate=False, wrappers=None, host=None, port=False) # [source]

A web application.

>>> app = Application("example")
>>> @app.wrap
... def contextualize(handler, app):
...     yield
>>> @app.control(r"")
... class Greeting:
...     def get(self):
...         return "hello world"

>>-response-=-app.get(r"")-todo->>>-response[0]-todo-'200-ok'-todo->>>-response[2][0]-todo-b'hello-world'>TODO >>> Response = app.get(r"") TODO >>> Response[0] TODO '200 OK' TODO >>> Response[2][0] TODO B'hello World'