My favorites | Sign in
Project Home Downloads Wiki Issues Source
Repository:
Checkout   Browse   Changes   Clones    
 
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# -*- coding: utf-8 -*-

"""
Kay routing.

:Copyright: (c) 2009 Takashi Matsuo <tmatsuo@candit.jp> All rights reserved.
:license: BSD, see LICENSE for more details.
"""

import logging

from werkzeug.routing import (
EndpointPrefix, Submount
)
from werkzeug.routing import Rule as OriginalRule

class Rule(OriginalRule):
def __init__(self, pattern, **kwargs):
try:
self.view = kwargs.pop('view')
except KeyError:
self.view = None
OriginalRule.__init__(self, pattern, **kwargs)

class ViewGroup(object):
add_app_prefix_to_endpoint = True
url_prefix = None

def __init__(self, *args, **kwargs):
if kwargs.has_key('add_app_prefix_to_endpoint'):
self.add_app_prefix_to_endpoint = kwargs['add_app_prefix_to_endpoint']
if kwargs.has_key('url_prefix'):
self.url_prefix = kwargs['url_prefix']
self.rules = []
self.views = {}
for rule in args:
if not isinstance(rule, Rule):
continue
self.rules.append(rule)
if self.views.has_key(rule.endpoint):
logging.info('An endpoint is already configured, skipped.')
else:
self.views[rule.endpoint] = rule.view

def get_rules(self, app=None):
if self.add_app_prefix_to_endpoint and app is not None:
ret = [EndpointPrefix(app+'/', self._get_rules())]
else:
ret = self._get_rules()
if self.url_prefix:
return [Submount(self.url_prefix, ret)]
else:
return ret

def get_views(self, app=None):
if self.add_app_prefix_to_endpoint and app is not None:
return self._get_views(app+'/')
else:
return self._get_views()

def _get_views(self, prefix=None):
if not prefix:
return self.views
ret = {}
for key, val in self.views.iteritems():
ret[prefix+key] = val
return ret

def _get_rules(self):
return self.rules

Change log

a616ce7232dc by Takashi Matsuo <tmat...@candit.jp> on Apr 28, 2010   Diff
Small changes related to a new urlmapping
interface.
Go to: 
Project members, sign in to write a code review

Older revisions

ede1e66aa45d by Takashi Matsuo <tmat...@candit.jp> on Apr 16, 2010   Diff
Changed module name.
Docs.
All revisions of this file

File info

Size: 1849 bytes, 71 lines
Powered by Google Project Hosting