mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-03 12:00:12 +03:00
Convert drf to expect 'rest_framework' namespace
This commit is contained in:
parent
1de241d9bf
commit
09343c1874
|
@ -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')
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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/')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user