This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git
The following commit(s) were added to refs/heads/master by this push:
new 61b040c14 make with_trailing_slash and without_trailing_slash apply to
HEAD requests too
61b040c14 is described below
commit 61b040c14d865ca5ea62b3d1244d8d292929b214
Author: Dave Brondsema <[email protected]>
AuthorDate: Mon May 18 11:34:44 2026 -0400
make with_trailing_slash and without_trailing_slash apply to HEAD requests
too
---
Allura/allura/lib/patches.py | 8 ++++----
Allura/allura/tests/test_patches.py | 14 ++++++++++++++
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/Allura/allura/lib/patches.py b/Allura/allura/lib/patches.py
index 42d9afae5..27732184f 100644
--- a/Allura/allura/lib/patches.py
+++ b/Allura/allura/lib/patches.py
@@ -71,10 +71,10 @@ def override_template(controller, template):
@h.monkeypatch(tg, tg.decorators)
@decorator
def without_trailing_slash(func, *args, **kwargs):
- '''Monkey-patched to use 301 redirects for SEO, and handle query
strings'''
+ '''Monkey-patched to use 301 redirects for SEO, and handle query
strings, and HEAD'''
__traceback_hide__ = 'before_and_this' # for paste/werkzeug shorter
traces
response_type = getattr(request, 'response_type', None)
- if (request.method == 'GET' and request.path.endswith('/') and not
response_type):
+ if (request.method in ('GET', 'HEAD') and request.path.endswith('/')
and not response_type):
location = request.path_url[:-1]
if request.query_string:
location += '?' + request.query_string
@@ -84,10 +84,10 @@ def without_trailing_slash(func, *args, **kwargs):
@h.monkeypatch(tg, tg.decorators)
@decorator
def with_trailing_slash(func, *args, **kwargs):
- '''Monkey-patched to use 301 redirects for SEO, and handle query
strings'''
+ '''Monkey-patched to use 301 redirects for SEO, and handle query
strings, and HEAD'''
__traceback_hide__ = 'before_and_this' # for paste/werkzeug shorter
traces
response_type = getattr(request, 'response_type', None)
- if (request.method == 'GET' and not request.path.endswith('/') and not
response_type):
+ if (request.method in ('GET', 'HEAD') and not
request.path.endswith('/') and not response_type):
location = request.path_url + '/'
if request.query_string:
location += '?' + request.query_string
diff --git a/Allura/allura/tests/test_patches.py
b/Allura/allura/tests/test_patches.py
index b66957c6f..281afada2 100644
--- a/Allura/allura/tests/test_patches.py
+++ b/Allura/allura/tests/test_patches.py
@@ -49,6 +49,13 @@ def test_with_trailing_slash_qs():
tg.decorators.with_trailing_slash(empty_func)()
assert raised.value.location == 'http://localhost/foo/bar/?foo=bar&baz=bam'
[email protected](patches, 'request', webob.Request.blank('/foo/bar',
method='HEAD'))
+def test_with_trailing_head():
+ patches.apply()
+ with pytest.raises(webob.exc.HTTPMovedPermanently) as raised:
+ tg.decorators.with_trailing_slash(empty_func)()
+ assert raised.value.location == 'http://localhost/foo/bar/'
+
@patch.object(patches, 'request', webob.Request.blank('/foo/bar/'))
def test_without_trailing_slash():
@@ -71,3 +78,10 @@ def test_without_trailing_slash_qs():
with pytest.raises(webob.exc.HTTPMovedPermanently) as raised:
tg.decorators.without_trailing_slash(empty_func)()
assert raised.value.location == 'http://localhost/foo/bar?foo=bar&baz=bam'
+
[email protected](patches, 'request', webob.Request.blank('/foo/bar/',
method='HEAD'))
+def test_without_trailing_slash_head():
+ patches.apply()
+ with pytest.raises(webob.exc.HTTPMovedPermanently) as raised:
+ tg.decorators.without_trailing_slash(empty_func)()
+ assert raised.value.location == 'http://localhost/foo/bar'