View difference between Paste ID: 7KfALc0j and
SHOW: | | - or go back to the newest paste.
1-
1+
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver
2
3
__all__ = ('resolve_to_name',)
4
5
def _pattern_resolve_to_name(self, path):
6
    match = self.regex.search(path)
7
    if match:
8
        name = ""
9
        if self.name:
10
            name = self.name
11
        elif hasattr(self, '_callback_str'):
12
            name = self._callback_str
13
        else:
14
            name = "%s.%s" % (self.callback.__module__, self.callback.func_name)
15
        return name
16
17
def _resolver_resolve_to_name(self, path):
18
    tried = []
19
    match = self.regex.search(path)
20
    if match:
21
        new_path = path[match.end():]
22
        for pattern in self.url_patterns:
23
            try:
24
                name = _pattern_resolve_to_name(pattern,new_path)
25
            except Resolver404, e:
26
                tried.extend([(pattern.regex.pattern + '   ' + t) for t in e.args[0]['tried']])
27
            else:
28
                if name:
29
                    return name
30
                tried.append(pattern.regex.pattern)
31
        raise Resolver404, {'tried': tried, 'path': new_path}
32
33
34
def resolve_to_name(path, urlconf=None):
35
    r = get_resolver(urlconf)
36
    if isinstance(r,RegexURLPattern):
37
        return _pattern_resolve_to_name(r,path)
38
    else:
39
        return _resolver_resolve_to_name(r,path)