-
Notifications
You must be signed in to change notification settings - Fork 107
/
utils.py
46 lines (34 loc) · 1.38 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from django.conf.urls import url
from .views import Dashboard
class Router(object):
def __init__(self):
self.registry = []
def register(self, widget, basename, **parameters):
""" Register a widget, URL basename and any optional URL parameters.
Parameters are passed as keyword arguments, i.e.
>>> router.register(MyWidget, 'mywidget', my_parameter="[A-Z0-9]+")
This would be the equivalent of manually adding the following
to urlpatterns:
>>> url(r"^widgets/mywidget/(P<my_parameter>[A-Z0-9]+)/?",
MyWidget.as_view(), "widget_mywidget")
"""
self.registry.append((widget, basename, parameters))
def get_urls(self):
urlpatterns = [
url(r'^$', Dashboard.as_view(), name='dashboard'),
]
for widget, basename, parameters in self.registry:
urlpatterns += [
url(r'/'.join((
r'^widgets/{}'.format(basename),
r'/'.join((r'(?P<{}>{})'.format(parameter, regex)
for parameter, regex in parameters.items())),
)),
widget.as_view(),
name='widget_{}'.format(basename)),
]
return urlpatterns
@property
def urls(self):
return self.get_urls()
router = Router()