Remove urlresolver monkey patch and use Django's resolve function

This commit is contained in:
Roberto Rosario
2014-06-30 00:34:32 -04:00
parent 41d0cfb7bf
commit 16a44015f2
2 changed files with 5 additions and 48 deletions

View File

@@ -5,7 +5,7 @@ import re
import urlparse import urlparse
import urllib import urllib
from django.core.urlresolvers import reverse, NoReverseMatch from django.core.urlresolvers import NoReverseMatch, resolve, reverse
from django.template import (TemplateSyntaxError, Library, from django.template import (TemplateSyntaxError, Library,
VariableDoesNotExist, Node, Variable) VariableDoesNotExist, Node, Variable)
from django.utils.text import unescape_string_literal from django.utils.text import unescape_string_literal
@@ -17,11 +17,14 @@ from common.utils import urlquote
from ..api import (object_navigation, multi_object_navigation, from ..api import (object_navigation, multi_object_navigation,
top_menu_entries, sidebar_templates) top_menu_entries, sidebar_templates)
from ..forms import MultiItemForm from ..forms import MultiItemForm
from ..utils import resolve_to_name
register = Library() register = Library()
def resolve_to_name(path, urlconf=None):
return resolve(path, urlconf=urlconf).view_name
class TopMenuNavigationNode(Node): class TopMenuNavigationNode(Node):
def render(self, context): def render(self, context):
request = Variable('request').resolve(context) request = Variable('request').resolve(context)

View File

@@ -1,46 +0,0 @@
# TODO: Django now has a resolve function use it instead of this
# http://www.djangosnippets.org/snippets/1378/
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver
__all__ = ('resolve_to_name',)
def _pattern_resolve_to_name(self, path):
match = self.regex.search(path)
if match:
name = ""
if self.name:
name = self.name
elif hasattr(self, '_callback_str'):
name = self._callback_str
else:
name = "%s.%s" % (self.callback.__module__, self.callback.func_name)
return name
def _resolver_resolve_to_name(self, path):
tried = []
match = self.regex.search(path)
if match:
new_path = path[match.end():]
for pattern in self.url_patterns:
try:
name = pattern.resolve_to_name(new_path)
except Resolver404, e:
tried.extend([(pattern.regex.pattern + ' ' + t) for t in e.args[0]['tried']])
else:
if name:
return name
tried.append(pattern.regex.pattern)
raise Resolver404, {'tried': tried, 'path': new_path}
# here goes monkeypatching
RegexURLPattern.resolve_to_name = _pattern_resolve_to_name
RegexURLResolver.resolve_to_name = _resolver_resolve_to_name
def resolve_to_name(path, urlconf=None):
return get_resolver(urlconf).resolve_to_name(path)