Skip to content
This repository has been archived by the owner on May 4, 2018. It is now read-only.

Commit

Permalink
pull request merge
Browse files Browse the repository at this point in the history
  • Loading branch information
Shaun Sephton committed Sep 9, 2011
2 parents 4f9d11e + a04a5f9 commit 243ca16
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 17 deletions.
21 changes: 11 additions & 10 deletions snippetscream/_1378.py
@@ -1,15 +1,20 @@
# http://djangosnippets.org/snippets/1378/

from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, \
Resolver404, get_resolver
from django.core.urlresolvers import RegexURLPattern, Resolver404, get_resolver

__all__ = ('resolve_to_name',)


def _dispatch(pattern, path):
if isinstance(pattern, RegexURLPattern):
return _pattern_resolve_to_name(pattern, path)
else:
return _resolver_resolve_to_name(pattern, path)

def _pattern_resolve_to_name(self, path):
match = self.regex.search(path)
if match:
name = ""
name = ''
if self.name:
name = self.name
elif hasattr(self, '_callback_str'):
Expand All @@ -27,7 +32,7 @@ def _resolver_resolve_to_name(self, path):
new_path = path[match.end():]
for pattern in self.url_patterns:
try:
name = pattern.resolve_to_name(new_path)
name = _dispatch(pattern, new_path)
except Resolver404, e:
tried.extend([(pattern.regex.pattern + ' ' + t) for t in \
e.args[0]['tried']])
Expand All @@ -38,10 +43,6 @@ def _resolver_resolve_to_name(self, path):
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)
r = get_resolver(urlconf)
return _dispatch(r, path)
16 changes: 11 additions & 5 deletions snippetscream/tests/__init__.py
@@ -1,8 +1,10 @@
import unittest

from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import Resolver404

from snippetscream import PolyModel
from snippetscream import PolyModel, resolve_to_name



class PolyTrunkModel(PolyModel):
Expand Down Expand Up @@ -61,7 +63,11 @@ def test_as_leaf_class(self):
class TestCase1378(unittest.TestCase):

def test_resolve_to_name(self):
from snippetscream import resolve_to_name
result = resolve_to_name('some/url')
result = resolve_to_name('some/other/url')
import pdb; pdb.set_trace()
# URL matching unnamed view should return its callable name.
self.failUnlessEqual(resolve_to_name('/some/url/'), 'app.views.view', 'Return view callable name on unnamed view match')

# URL matching named view should return its name.
self.failUnlessEqual(resolve_to_name('/some/other/url/'), 'this_is_a_named_view', 'Return view name on named view match')

# Bogus URL should result in Resolver404.
self.failUnlessRaises(Resolver404, resolve_to_name, '/some/bogus/url/')
4 changes: 2 additions & 2 deletions snippetscream/tests/urls.py
@@ -1,6 +1,6 @@
from django.conf.urls.defaults import patterns, url

urlpatterns = patterns('',
url(r'/some/url', 'app.views.view'),
url(r'/some/other/url', 'app.views.other.view', name='this_is_a_named_view'),
url(r'^some/url/$', 'app.views.view'),
url(r'^some/other/url/$', 'app.views.other.view', name='this_is_a_named_view'),
)

0 comments on commit 243ca16

Please sign in to comment.