(cubicweb.web.views.urlpublishing)
(cubicweb.web.views.urlrewrite)
Base class for URL rewriters.
Url rewriters should have a rules dict that maps an input URI to something that should be used for rewriting.
The actual logic that defines how the rules dict is used is implemented in the rewrite method.
A priority attribute might be used to indicate which rewriter should be tried first. The higher the priority is, the earlier the rewriter will be tried.
The SimpleReqRewriters uses a rules dict that maps input URI (regexp or plain string) to a dictionary to update the request’s form.
If the input uri is a regexp, group substitution is allowed.
SimpleReqRewriter is enough for a certain number of simple cases. If it is not sufficient, SchemaBasedRewriter allows to do more elaborate things.
Here is an example of SimpleReqRewriter usage with plain string:
from cubicweb.web.views.urlrewrite import SimpleReqRewriter
class TrackerSimpleReqRewriter(SimpleReqRewriter):
rules = [
('/versions', dict(vid='versionsinfo')),
]
When the url is <base_url>/versions, the view with the __regid__ versionsinfo is displayed.
Here is an example of SimpleReqRewriter usage with regular expressions:
from cubicweb.web.views.urlrewrite import (
SimpleReqRewriter, rgx)
class BlogReqRewriter(SimpleReqRewriter):
rules = [
(rgx('/blogentry/([a-z_]+)\.rss'),
dict(rql=('Any X ORDERBY CD DESC LIMIT 20 WHERE X is BlogEntry,'
'X creation_date CD, X created_by U, '
'U login "%(user)s"'
% {'user': r'\1'}, vid='rss'))),
]
When a url matches the regular expression, the view with the __regid__ rss which match the result set is displayed.
Here is an example of SchemaBasedRewriter usage:
from cubicweb.web.views.urlrewrite import (
SchemaBasedRewriter, rgx, build_rset)
class TrackerURLRewriter(SchemaBasedRewriter):
rules = [
(rgx('/project/([^/]+)/([^/]+)/tests'),
build_rset(rql='Version X WHERE X version_of P, P name %(project)s, X num %(num)s',
rgxgroups=[('project', 1), ('num', 2)], vid='versiontests')),
]