Michael Merickel
2011-07-17 671416a96a7add43b7dfbf10019311a6191a95c6
Modified p.urldispatch._compile_route to return the names of the
placeholders in the route pattern.
2 files modified
9 ■■■■■ changed files
pyramid/config.py 2 ●●● patch | view | raw | blame | history
pyramid/urldispatch.py 7 ●●●● patch | view | raw | blame | history
pyramid/config.py
@@ -2783,7 +2783,7 @@
        # 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
pyramid/urldispatch.py
@@ -20,7 +20,7 @@
                 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
@@ -107,6 +107,7 @@
    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()
@@ -115,6 +116,7 @@
            name, reg = name.split(':')
        else:
            reg = '[^/]+'
        args.append(name)
        gen.append('%%(%s)s' % name)
        name = '(?P<%s>%s)' % (name, reg)
        rpat.append(name)
@@ -124,6 +126,7 @@
            gen.append(s)
    if star:
        args.append(star)
        rpat.append('(?P<%s>.*?)' % star)
        gen.append('%%(%s)s' % star)
@@ -167,7 +170,7 @@
            newdict[k] = v
        return gen % newdict
    return matcher, generator
    return matcher, generator, args
def DefaultsPregenerator(defaults, wrapped=None):
    if wrapped is None: