Modified p.urldispatch._compile_route to return the names of the
placeholders in the route pattern.
| | |
| | | # routing args. This causes the ResourceTreeTraverser to use |
| | | # the resolved traverse pattern as the traversal path. |
| | | from pyramid.urldispatch import _compile_route |
| | | _, tgenerate = _compile_route(traverse) |
| | | _, tgenerate, _ = _compile_route(traverse) |
| | | def traverse_predicate(context, request): |
| | | if 'traverse' in context: |
| | | return True |
| | |
| | | pregenerator=None): |
| | | self.pattern = pattern |
| | | self.path = pattern # indefinite b/w compat, not in interface |
| | | self.match, self.generate = _compile_route(pattern) |
| | | self.match, self.generate, self.args = _compile_route(pattern) |
| | | self.name = name |
| | | self.factory = factory |
| | | self.predicates = predicates |
| | |
| | | prefix = pat.pop() # invar: always at least one element (route='/'+route) |
| | | rpat.append(re.escape(prefix)) |
| | | gen.append(prefix) |
| | | args = [] # list of placeholder names in the pattern |
| | | |
| | | while pat: |
| | | name = pat.pop() |
| | |
| | | name, reg = name.split(':') |
| | | else: |
| | | reg = '[^/]+' |
| | | args.append(name) |
| | | gen.append('%%(%s)s' % name) |
| | | name = '(?P<%s>%s)' % (name, reg) |
| | | rpat.append(name) |
| | |
| | | gen.append(s) |
| | | |
| | | if star: |
| | | args.append(star) |
| | | rpat.append('(?P<%s>.*?)' % star) |
| | | gen.append('%%(%s)s' % star) |
| | | |
| | |
| | | newdict[k] = v |
| | | return gen % newdict |
| | | |
| | | return matcher, generator |
| | | return matcher, generator, args |
| | | |
| | | def DefaultsPregenerator(defaults, wrapped=None): |
| | | if wrapped is None: |