Skip to content

Commit

Permalink
Merge pull request #38 from 1vank1n/master
Browse files Browse the repository at this point in the history
add support i18n_patterns
  • Loading branch information
raiderrobert committed Nov 5, 2019
2 parents 15f6e73 + 18b55e7 commit ca5fc71
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
2 changes: 1 addition & 1 deletion multiurl.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def resolve(self, path):


class MultiResolverMatch(object):
def __init__(self, matches, exceptions, patterns_matched, path, route=None):
def __init__(self, matches, exceptions, patterns_matched, path, route=''):
self.matches = matches
self.exceptions = exceptions
self.patterns_matched = patterns_matched
Expand Down
41 changes: 39 additions & 2 deletions tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@

from django.conf import settings
from django.conf.urls import url

from django.conf.urls.i18n import i18n_patterns
from django.http import HttpResponse
from django.urls import path

from multiurl import multiurl, ContinueResolving
from multiurl import ContinueResolving, multiurl

try:
from django import urls as urlresolvers
Expand All @@ -33,6 +34,14 @@ def setUp(self):
)
])

self.patterns_pathall = urlresolvers.URLResolver(RegexPattern(r'^/'), i18n_patterns(
multiurl(
path('<str:name>/', brand, name='brand'),
path('<str:name>/', model, name='model'),
),
))


# Patterns with no "catch all" - last view could still raise ContinueResolving.
self.patterns_no_fallthrough = urlresolvers.URLResolver(RegexPattern(r'^/'), [
multiurl(
Expand All @@ -56,6 +65,16 @@ def test_resolve_match_last(self):
response = m.func(request=None, *m.args, **m.kwargs)
self.assertEqual(response.content, b"Thing: Bacon")

def test_resolve_match_path_brand(self):
m = self.patterns_pathall.resolve('/en-us/bmw/')
response = m.func(request=None, *m.args, **m.kwargs)
self.assertEqual(response.content, b"Brand: BMW Series")

def test_resolve_match_path_model(self):
m = self.patterns_pathall.resolve('/en-us/x5/')
response = m.func(request=None, *m.args, **m.kwargs)
self.assertEqual(response.content, b"Model: X5 2019")

def test_resolve_match_faillthrough(self):
m = self.patterns_no_fallthrough.resolve('/bacon/')
with self.assertRaises(urlresolvers.Resolver404):
Expand Down Expand Up @@ -103,6 +122,24 @@ def thing(request, name):
return HttpResponse("Thing: " + name.title())


def brand(request, name):
brand = {
'bmw': 'BMW Series',
}
if name in brand:
return HttpResponse("Brand: " + brand[name])
raise ContinueResolving


def model(request, name):
model = {
'x5': 'X5 2019',
}
if name in model:
return HttpResponse("Model: " + model[name])
raise ContinueResolving


if __name__ == '__main__':
settings.configure()
unittest.main()

0 comments on commit ca5fc71

Please sign in to comment.