diff --git a/CHANGES.rst b/CHANGES.rst index 3785f737..cca0c44d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -15,7 +15,7 @@ Unreleased - ``app.json_encoder`` and ``json_decoder`` are only passed to ``dumps`` and ``loads`` if they have custom behavior. This improves performance, mainly on PyPy. :issue:`4349` -- Fix error message for ``after_this_request`` when it used outside +- Clearer error message when ``after_this_request`` is used outside a request context. :issue:`4333` diff --git a/src/flask/ctx.py b/src/flask/ctx.py index 5149c821..47465fd4 100644 --- a/src/flask/ctx.py +++ b/src/flask/ctx.py @@ -131,14 +131,14 @@ def after_this_request(f: AfterRequestCallable) -> AfterRequestCallable: .. versionadded:: 0.9 """ top = _request_ctx_stack.top + if top is None: raise RuntimeError( - "This decorator can only be used at local scopes " - "when a request context is on the stack. For instance within " - "view functions." + "This decorator can only be used when a request context is" + " active, such as within a view function." ) - top._after_request_functions.append(f) + top._after_request_functions.append(f) return f @@ -167,12 +167,13 @@ def copy_current_request_context(f: t.Callable) -> t.Callable: .. versionadded:: 0.10 """ top = _request_ctx_stack.top + if top is None: raise RuntimeError( - "This decorator can only be used at local scopes " - "when a request context is on the stack. For instance within " - "view functions." + "This decorator can only be used when a request context is" + " active, such as within a view function." ) + reqctx = top.copy() def wrapper(*args, **kwargs):