builders module.
config module.
curly module.
Convert curly expression into regex with named groups.
Parse s according to group_name:pattern_name.
There is just group_name, return default pattern_name.
plain module.
Route based on string equalty operation.
If the path exactly equals pattern string, return end index of substring matched and a copy of self.kwargs.
Route based on regular expression matching.
Returns path_format and names.
>>> parse_pattern('abc/(?P<id>[^/]+)')
('abc/%(id)s', ['id'])
>>> parse_pattern('abc/(?P<n>[^/]+)/(?P<x>\\w+)')
('abc/%(n)s/%(x)s', ['n', 'x'])
>>> parse_pattern('(?P<locale>(en|ru))/home')
('%(locale)s/home', ['locale'])
>>> from wheezy.routing.curly import convert
>>> parse_pattern(convert('[{locale:(en|ru)}/]home'))
('%(locale)s/home', ['locale'])
>>> parse_pattern(convert('item[/{id:i}]'))
('item/%(id)s', ['id'])
>>> p = convert(r'{controller:w}[/{action:w}[/{id:i}]]')
>>> parse_pattern(p)
('%(controller)s/%(action)s/%(id)s', ['controller', 'action', 'id'])
Strip optional regex group flag.
at the beginning
>>> strip_optional('((?P<locale>(en|ru))/)?home')
'(?P<locale>(en|ru))/home'
at the end
>>> strip_optional('item(/(?P<id>\\d+))?')
'item/(?P<id>\\d+)'
nested:
>>> p = '(?P<controller>\\w+)(/(?P<action>\\w+)(/(?P<id>\\d+))?)?'
>>> strip_optional(p)
'(?P<controller>\\w+)/(?P<action>\\w+)/(?P<id>\\d+)'
route module.
router module.
Adds routes represented as a list of tuple (pattern, handler, kwargs=None, name=None) to route table.
utils module.
Convert CamelCase to camel_case.
>>> camelcase_to_underscore('MainPage')
'main_page'
>>> camelcase_to_underscore('Login')
'login'
Splits given expression by outer most separators.
>>> outer_split('123')
['123']
>>> outer_split('123(45(67)89)123(45)67')
['123', '45(67)89', '123', '45', '67']
If expression is not balanced raises ValueError.
>>> outer_split('123(')
Traceback (most recent call last):
...
ValueError: ...
Return a name for the given handler. handler can be an object, class or callable.
>>> class Login: pass
>>> route_name(Login)
'login'
>>> l = Login()
>>> route_name(l)
'login'
Strips the name per RE_STRIP_NAME regex.
>>> strip_name('Login')
'Login'
>>> strip_name('LoginHandler')
'Login'
>>> strip_name('LoginController')
'Login'
>>> strip_name('LoginPage')
'Login'
>>> strip_name('LoginView')
'Login'
>>> strip_name('LoginHandler2')
'LoginHandler2'