Routes is a Python re-implementation of the Rails routes system that allows for a two-way mapping between URLs and a dictionary. That is, you can pass it a URL and it will make sure it conforms to your specifications and it will then pull out the relavent bits as specified. Just as importantly it allows you to pass info back in and it will generate the appropriate URL.


>>> from routes import Mapper
>>> m = Mapper()
>>> m.prefix = 'http://bitworking.org/some.cgi'
>>> m.connect(':(collection)/:(id)')
>>> m.create_regs([])

>>> m.match("http://bitworking.org/some.cgi/trash")
{'action': 'index', 'controller': 'content', 'id': None,
'collection': 'trash'}
>>> m.match("http://bitworking.org/some.cgi/trash/QWERT")
{'action': 'index', 'controller': 'content', 'id': 'QWERT',
'collection': 'trash'}
>>> m.match("http://bitworking.org/some.cgi/livestore/QWERT/junk")
None

>>> m.generate(collection='livestore', id="Thisisatest")
http://bitworking.org/some.cgi/livestore/Thisisatest


Seems like a pretty nice library with lots of unit tests. The one downside is the .egg distribution, which has never worked for me. It was simpler to just pull the latest out of the subversion repository and copy it into site-packages.

Routes, dispatch and Kid together would make a nice un-framework.