Convert drf to expect 'rest_framework' namespace

This commit is contained in:
Ryan P Kilby 2017-11-18 20:26:28 -05:00
parent 1de241d9bf
commit 09343c1874
4 changed files with 16 additions and 7 deletions

View File

@ -339,7 +339,8 @@ class HyperlinkedRelatedField(RelatedField):
self.view_name, request self.view_name, request
) )
except AttributeError: except AttributeError:
expected_viewname = self.view_name # by default, expect the 'rest_framework' namespace
expected_viewname = 'rest_framework:' + self.view_name
if match.view_name != expected_viewname: if match.view_name != expected_viewname:
self.fail('incorrect_match') self.fail('incorrect_match')

View File

@ -305,10 +305,7 @@ class APIRootView(views.APIView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
# Return a plain {"name": "hyperlink"} response. # Return a plain {"name": "hyperlink"} response.
ret = OrderedDict() ret = OrderedDict()
namespace = request.resolver_match.namespace
for key, url_name in self.api_root_dict.items(): for key, url_name in self.api_root_dict.items():
if namespace:
url_name = namespace + ':' + url_name
try: try:
ret[key] = reverse( ret[key] = reverse(
url_name, url_name,

View File

@ -135,6 +135,13 @@ class NamespaceVersioning(BaseVersioning):
) )
def get_versioned_viewname(self, viewname, request): def get_versioned_viewname(self, viewname, request):
"""
The incoming `viewname` should be prefixed with the 'rest_framework'
application namespace. We want to replace this with the version
instance namespace.
"""
if viewname.startswith('rest_framework:'):
viewname = viewname[len('rest_framework:'):]
return request.version + ':' + viewname return request.version + ':' + viewname

View File

@ -146,12 +146,16 @@ class TestSimpleRouter(TestCase):
class TestRootView(URLPatternsTestCase, TestCase): class TestRootView(URLPatternsTestCase, TestCase):
urlpatterns = [ urlpatterns = [
url(r'^non-namespaced/', include(namespaced_router.urls)), url(r'^non-namespaced/', include(namespaced_router.urls)),
url(r'^namespaced/', include((namespaced_router.urls, 'namespaced'), namespace='namespaced')), url(r'^namespaced1/', include((namespaced_router.urls, 'namespaced1'), namespace='namespaced1')),
url(r'^namespaced2/', include((namespaced_router.urls, 'namespaced2'), namespace='namespaced2')),
] ]
def test_retrieve_namespaced_root(self): def test_retrieve_namespaced_root(self):
response = self.client.get('/namespaced/') response = self.client.get('/namespaced1/')
assert response.data == {"example": "http://testserver/namespaced/example/"} assert response.data == {"example": "http://testserver/namespaced1/example/"}
response = self.client.get('/namespaced2/')
assert response.data == {"example": "http://testserver/namespaced2/example/"}
def test_retrieve_non_namespaced_root(self): def test_retrieve_non_namespaced_root(self):
response = self.client.get('/non-namespaced/') response = self.client.get('/non-namespaced/')