Skip to content
This repository has been archived by the owner on Jan 11, 2021. It is now read-only.

Commit

Permalink
Merge pull request #205 from zenoamaro/fix/urlconf-module
Browse files Browse the repository at this point in the history
Don't try to import urlconf unless it's a string.
  • Loading branch information
ariovistus committed Feb 7, 2015
2 parents 9809bf1 + c44b6df commit 3096323
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 3 deletions.
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ coverage==3.6
django-nose==1.2
djangorestframework==2.4.3
nose==1.3.0
mock==1.0.1
ordereddict==1.1
21 changes: 21 additions & 0 deletions rest_framework_swagger/tests.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import datetime
from mock import patch

from django.core.urlresolvers import RegexURLResolver, RegexURLPattern
from django.conf import settings
Expand Down Expand Up @@ -56,6 +57,12 @@ class NonApiView(View):
pass


class MockUrlconfModule:
""" A mock of an `app.urls`-like module. """
def __init__(self, urlpatterns):
self.urlpatterns = urlpatterns


class CommentSerializer(serializers.Serializer):
email = serializers.EmailField()
content = serializers.CharField(max_length=200)
Expand All @@ -82,7 +89,21 @@ def test_get_apis(self):
# Overwrite settings with test patterns
urls.urlpatterns = self.url_patterns
apis = urlparser.get_apis()
for api in apis:
self.assertIn(api['pattern'], self.url_patterns)

def test_get_apis_urlconf_import(self):
urlparser = UrlParser()
urlconf = MockUrlconfModule(self.url_patterns)
with patch.dict('sys.modules', {'mock_urls': urlconf}):
apis = urlparser.get_apis(urlconf='mock_urls')
for api in apis:
self.assertIn(api['pattern'], self.url_patterns)

def test_get_apis_urlconf_module(self):
urlparser = UrlParser()
urlconf = MockUrlconfModule(self.url_patterns)
apis = urlparser.get_apis(urlconf=urlconf)
for api in apis:
self.assertIn(api['pattern'], self.url_patterns)

Expand Down
7 changes: 5 additions & 2 deletions rest_framework_swagger/urlparser.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import os

from django.conf import settings
from django.utils import six
from django.utils.importlib import import_module
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern
from django.contrib.admindocs.views import simplify_regex
Expand All @@ -20,7 +20,10 @@ def get_apis(self, patterns=None, urlconf=None, filter_path=None, exclude_namesp
exclude_namespaces -- list of namespaces to ignore (optional)
"""
if patterns is None and urlconf is not None:
urls = import_module(urlconf)
if isinstance(urlconf, six.string_types):
urls = import_module(urlconf)
else:
urls = urlconf
patterns = urls.urlpatterns
elif patterns is None and urlconf is None:
urls = import_module(settings.ROOT_URLCONF)
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ deps =
drf2.4.3: djangorestframework==2.4.3
drf3.0.0: djangorestframework==3.0.0
drf3.0.1: djangorestframework==3.0.1
py33-django1.5-drf{2.3.8,2.4.3}: six==1.7.2
{py27,py32,py33,py34}-django{1.5,1.6,1.7}-drf{2.3.8,2.4.3}: PyYAML==3.10
{py27,py32,py33,py34}-django{1.5,1.6,1.7}-drf{2.3.8,2.4.3,3.0.0,3.0.1}: Markdown==2.5.1
py26-django{1.5,1.6}-drf{2.3.8,2.4.3,3.0.0,3.0.1}: Markdown==2.1.1
Expand All @@ -23,6 +22,7 @@ deps =
argparse==1.2.1
argh==0.23.2
nose==1.3.0
mock==1.0.1
django-nose==1.2
coverage==3.6

Expand Down

0 comments on commit 3096323

Please sign in to comment.