diff --git a/sanic/mixins/routes.py b/sanic/mixins/routes.py index c38b32ee..544cbc36 100644 --- a/sanic/mixins/routes.py +++ b/sanic/mixins/routes.py @@ -218,6 +218,7 @@ class RouteMixin(metaclass=SanicMeta): stream: bool = False, version_prefix: str = "/v", error_format: Optional[str] = None, + unquote: bool = False, **ctx_kwargs: Any, ) -> RouteHandler: """A helper method to register class instance or @@ -264,6 +265,7 @@ class RouteMixin(metaclass=SanicMeta): name=name, version_prefix=version_prefix, error_format=error_format, + unquote=unquote, **ctx_kwargs, )(handler) return handler diff --git a/tests/test_routes.py b/tests/test_routes.py index 4ff5d9fd..6d4317ce 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -803,6 +803,21 @@ def test_static_add_route(app, strict_slashes): assert response.text == "OK2" +@pytest.mark.parametrize("unquote", [True, False, None]) +def test_unquote_add_route(app, unquote): + async def handler1(_, foo): + return text(foo) + + app.add_route(handler1, "/", unquote=unquote) + value = "啊" if unquote else r"%E5%95%8A" + + _, response = app.test_client.get("/啊") + assert response.text == value + + _, response = app.test_client.get(r"/%E5%95%8A") + assert response.text == value + + def test_dynamic_add_route(app): results = []