No, not described_routes, just something basic to plug a gap. For those suffering Rails-envy there’s no “paster routes” command, but it’s easy enough to use in the Paster shell:
bash-3.2$ paster shell test.ini
Pylons Interactive Shell
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)]
All objects from encore.lib.base are available
Additional Objects:
mapper - Routes mapper object
wsgiapp - This project's WSGI App instance
app - paste.fixture wrapped around wsgiapp
>>> print mapper
Route name Methods Path
/error/{action}
/error/{action}/{id}
home GET /
things GET /things
create_thing POST /things
new_thing GET /things/new
thing GET /thing/{id}
...
It works by subclassing routes.Mapper (I have other reasons to do this which I’ll explain soon) and you’ll need to use this new Mapper in your config/routing.py.
That should be all you need to know. The code for the new Mapper class is below. Note: That second from last join() isn’t coming out very well – it has a backslash and an ‘n’ in it – honest!
Enjoy!
import routes.mapper
class Mapper(routes.Mapper):
#
# Pretty string representation - returns a string formatted like this:
#
# Route name Methods Path
# /error/{action}
# /error/{action}/{id}
# home GET /
# things GET /things
# create_thing POST /things
# new_thing GET /things/new
# thing GET /thing/{id}
#
# etc
#
# Enter 'print mapper' in the paster shell to use it, or (TBD) run it via a
# configured paster command.
#
def __str__(self):
def format_methods(r):
if r.conditions:
method = r.conditions.get('method', '')
return method if type(method) is str else ', '.join(method)
else:
return ''
table = [('Route name', 'Methods', 'Path')] + [
(
r.name or '',
format_methods(r),
r.routepath or''
)
for r in self.matchlist]
widths = [
max(len(row[col]) for row in table)
for col in range(len(table[0]))]
return '
'.join(
' '.join(
row[col].ljust(widths[col])
for col in range(len(widths))
).rstrip()
for row in table)
Pingback: DRY up your routes - UPDATES « Positive Incline