Fixed #20169 -- Ensured that the WSGI request's path is correctly based on the `SCRIPT_NAME` environment parameter or the `FORCE_SCRIPT_NAME` setting, regardless of whether or not those have a trailing slash. Thanks to bmispelon for the review.
This commit is contained in:
parent
8c41bd93c2
commit
2f81a0ca65
|
@ -137,7 +137,7 @@ class WSGIRequest(http.HttpRequest):
|
||||||
path_info = '/'
|
path_info = '/'
|
||||||
self.environ = environ
|
self.environ = environ
|
||||||
self.path_info = path_info
|
self.path_info = path_info
|
||||||
self.path = '%s%s' % (script_name, path_info)
|
self.path = '%s/%s' % (script_name.rstrip('/'), path_info.lstrip('/'))
|
||||||
self.META = environ
|
self.META = environ
|
||||||
self.META['PATH_INFO'] = path_info
|
self.META['PATH_INFO'] = path_info
|
||||||
self.META['SCRIPT_NAME'] = script_name
|
self.META['SCRIPT_NAME'] = script_name
|
||||||
|
|
|
@ -50,6 +50,44 @@ class RequestsTests(unittest.TestCase):
|
||||||
self.assertEqual(request.META['REQUEST_METHOD'], 'bogus')
|
self.assertEqual(request.META['REQUEST_METHOD'], 'bogus')
|
||||||
self.assertEqual(request.META['SCRIPT_NAME'], '')
|
self.assertEqual(request.META['SCRIPT_NAME'], '')
|
||||||
|
|
||||||
|
def test_wsgirequest_with_script_name(self):
|
||||||
|
"""
|
||||||
|
Ensure that the request's path is correctly assembled, regardless of
|
||||||
|
whether or not the SCRIPT_NAME has a trailing slash.
|
||||||
|
Refs #20169.
|
||||||
|
"""
|
||||||
|
# With trailing slash
|
||||||
|
request = WSGIRequest({'PATH_INFO': '/somepath/', 'SCRIPT_NAME': '/PREFIX/', 'REQUEST_METHOD': 'get', 'wsgi.input': BytesIO(b'')})
|
||||||
|
self.assertEqual(request.path, '/PREFIX/somepath/')
|
||||||
|
# Without trailing slash
|
||||||
|
request = WSGIRequest({'PATH_INFO': '/somepath/', 'SCRIPT_NAME': '/PREFIX', 'REQUEST_METHOD': 'get', 'wsgi.input': BytesIO(b'')})
|
||||||
|
self.assertEqual(request.path, '/PREFIX/somepath/')
|
||||||
|
|
||||||
|
def test_wsgirequest_with_force_script_name(self):
|
||||||
|
"""
|
||||||
|
Ensure that the FORCE_SCRIPT_NAME setting takes precedence over the
|
||||||
|
request's SCRIPT_NAME environment parameter.
|
||||||
|
Refs #20169.
|
||||||
|
"""
|
||||||
|
with override_settings(FORCE_SCRIPT_NAME='/FORCED_PREFIX/'):
|
||||||
|
request = WSGIRequest({'PATH_INFO': '/somepath/', 'SCRIPT_NAME': '/PREFIX/', 'REQUEST_METHOD': 'get', 'wsgi.input': BytesIO(b'')})
|
||||||
|
self.assertEqual(request.path, '/FORCED_PREFIX/somepath/')
|
||||||
|
|
||||||
|
def test_wsgirequest_path_with_force_script_name_trailing_slash(self):
|
||||||
|
"""
|
||||||
|
Ensure that the request's path is correctly assembled, regardless of
|
||||||
|
whether or not the FORCE_SCRIPT_NAME setting has a trailing slash.
|
||||||
|
Refs #20169.
|
||||||
|
"""
|
||||||
|
# With trailing slash
|
||||||
|
with override_settings(FORCE_SCRIPT_NAME='/FORCED_PREFIX/'):
|
||||||
|
request = WSGIRequest({'PATH_INFO': '/somepath/', 'REQUEST_METHOD': 'get', 'wsgi.input': BytesIO(b'')})
|
||||||
|
self.assertEqual(request.path, '/FORCED_PREFIX/somepath/')
|
||||||
|
# Without trailing slash
|
||||||
|
with override_settings(FORCE_SCRIPT_NAME='/FORCED_PREFIX'):
|
||||||
|
request = WSGIRequest({'PATH_INFO': '/somepath/', 'REQUEST_METHOD': 'get', 'wsgi.input': BytesIO(b'')})
|
||||||
|
self.assertEqual(request.path, '/FORCED_PREFIX/somepath/')
|
||||||
|
|
||||||
def test_wsgirequest_repr(self):
|
def test_wsgirequest_repr(self):
|
||||||
request = WSGIRequest({'PATH_INFO': '/somepath/', 'REQUEST_METHOD': 'get', 'wsgi.input': BytesIO(b'')})
|
request = WSGIRequest({'PATH_INFO': '/somepath/', 'REQUEST_METHOD': 'get', 'wsgi.input': BytesIO(b'')})
|
||||||
request.GET = {'get-key': 'get-value'}
|
request.GET = {'get-key': 'get-value'}
|
||||||
|
|
Loading…
Reference in New Issue