- Master Build
- 0.1 Build
- Documentation
- Downloads
- Source
This is just a collection of utilities that I found myself putting into every single pyramid project I made. So now they're all in one place.
Here's a quick taste.
Don't do this:
def register_user(request):
username = request.POST['username']
password = request.POST['password']
birthdate = request.POST['birthdate']
Do this:
@argify(birthdate=date)
def register_user(request, username, password, birthdate):
...
What urls does this match?
@view_config(context=Root, name='package')
def get_or_list_packages(request):
...
Well, it matches
/package
/package/
/package/1234
/package/wait/hold/on
/package/this/seems/confusing
Whaaaat? Let's fix that:
@view_config(context=Root, name='package', subpath=())
def list_packages(request):
# return a list of packages
@view_config(context=Root, name='package', subpath=('id/*')
def get_package(request):
package_id = request.named_subpaths['id']
# fetch a single package
The first one matches
/package
/package/
The second matches
/package/*
/package/*/
But that still seems sloppy. You demand consistency!
@view_config(context=Root, name='package', subpath=())
@addslash
def list_packages(request):
# return a list of packages
@view_config(context=Root, name='package', subpath=('id/*')
@addslash
def get_package(request):
package_id = request.named_subpaths['id']
# fetch a single package
Now it's just /package/
and /package/*/
That's the sales pitch. Read the docs for more details.