Skip to content

Commit

Permalink
fix URLPathVersioning reverse fallback (#7247)
Browse files Browse the repository at this point in the history
* fix URLPathVersioning reverse fallback

* add test for URLPathVersioning reverse fallback

* Update tests/test_versioning.py

---------

Co-authored-by: Jorn van Wier <[email protected]>
Co-authored-by: Asif Saif Uddin <[email protected]>
  • Loading branch information
3 people committed May 18, 2023
1 parent 332e956 commit a25aac7
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
6 changes: 4 additions & 2 deletions rest_framework/versioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,10 @@ def determine_version(self, request, *args, **kwargs):

def reverse(self, viewname, args=None, kwargs=None, request=None, format=None, **extra):
if request.version is not None:
kwargs = {} if (kwargs is None) else kwargs
kwargs[self.version_param] = request.version
kwargs = {
self.version_param: request.version,
**(kwargs or {})
}

return super().reverse(
viewname, args, kwargs, request, format, **extra
Expand Down
10 changes: 10 additions & 0 deletions tests/test_versioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ class TestURLReversing(URLPatternsTestCase, APITestCase):
path('v1/', include((included, 'v1'), namespace='v1')),
path('another/', dummy_view, name='another'),
re_path(r'^(?P<version>[v1|v2]+)/another/$', dummy_view, name='another'),
re_path(r'^(?P<foo>.+)/unversioned/$', dummy_view, name='unversioned'),

]

def test_reverse_unversioned(self):
Expand Down Expand Up @@ -198,6 +200,14 @@ def test_reverse_url_path_versioning(self):
response = view(request)
assert response.data == {'url': 'http://testserver/another/'}

# Test fallback when kwargs is not None
request = factory.get('/v1/endpoint/')
request.versioning_scheme = scheme()
request.version = 'v1'

reversed_url = reverse('unversioned', request=request, kwargs={'foo': 'bar'})
assert reversed_url == 'http://testserver/bar/unversioned/'

def test_reverse_namespace_versioning(self):
class FakeResolverMatch(ResolverMatch):
namespace = 'v1'
Expand Down

0 comments on commit a25aac7

Please sign in to comment.