From 2c331f67ea514fc510e40e3a99cbaa6a8c98eb9b Mon Sep 17 00:00:00 2001 From: gable-github Date: Fri, 16 May 2025 15:07:40 -0700 Subject: [PATCH] fix: raise TypeError when @app.template_filter is used without parentheses --- src/flask/sansio/app.py | 9 +++++++++ tests/test_templating.py | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/src/flask/sansio/app.py b/src/flask/sansio/app.py index ceab45cb5e..05c75b5dd6 100644 --- a/src/flask/sansio/app.py +++ b/src/flask/sansio/app.py @@ -672,10 +672,19 @@ def template_filter( def reverse(s): return s[::-1] + You must include parentheses when using this decorator, + even if no arguments are provided. + :param name: the optional name of the filter, otherwise the function name will be used. """ + if callable(name): + raise TypeError( + "Did you mean to use @app.template_filter()? " + "Missing parentheses () in decorator" + ) + def decorator(f: T_template_filter) -> T_template_filter: self.add_template_filter(f, name=name) return f diff --git a/tests/test_templating.py b/tests/test_templating.py index c9fb3754a3..423b0134e6 100644 --- a/tests/test_templating.py +++ b/tests/test_templating.py @@ -130,6 +130,14 @@ def my_reverse(s): assert app.jinja_env.filters["my_reverse"]("abcd") == "dcba" +def test_template_filter_requires_parentheses(app): + with pytest.raises(TypeError): + + @app.template_filter + def my_reverse(s): + return s[::-1] + + def test_add_template_filter(app): def my_reverse(s): return s[::-1]