From 20965a170f8e150651af7b1324095640df5f65c0 Mon Sep 17 00:00:00 2001 From: Rohan salwan Date: Fri, 13 Aug 2021 16:55:28 +0530 Subject: [PATCH] . --- CHANGES.rst | 3 ++- src/flask/testing.py | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index eeba61ab..2dd9c639 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -21,7 +21,8 @@ Unreleased :issue:`4096` - The CLI loader handles ``**kwargs`` in a ``create_app`` function. :issue:`4170` - +- Fix Unable to extend FlaskClient with Follow_redirect issue. + :issue:`3396` Version 2.0.1 ------------- diff --git a/src/flask/testing.py b/src/flask/testing.py index fe3b846a..e97194de 100644 --- a/src/flask/testing.py +++ b/src/flask/testing.py @@ -108,6 +108,7 @@ class FlaskClient(Client): application: "Flask" preserve_context = False + ex_builder = None def __init__(self, *args: t.Any, **kwargs: t.Any) -> None: super().__init__(*args, **kwargs) @@ -189,9 +190,9 @@ class FlaskClient(Client): "flask._preserve_context": self.preserve_context, } - if not kwargs and len(args) == 1: - arg = args[0] + arg = args[0] + if not kwargs and len(args) == 1: if isinstance(arg, werkzeug.test.EnvironBuilder): builder = copy(arg) builder.environ_base = copy_environ(builder.environ_base or {}) @@ -204,10 +205,18 @@ class FlaskClient(Client): request = copy(arg) request.environ = copy_environ(request.environ) - if request is None: - kwargs["environ_base"] = copy_environ(kwargs.get("environ_base", {})) - builder = EnvironBuilder(self.application, *args, **kwargs) + if isinstance(arg, werkzeug.test.EnvironBuilder): + builder = copy(arg) + builder.environ_base = copy_environ(builder.environ_base or {}) + request = builder.get_request() + if request is None: + if self.ex_builder is None: + kwargs["environ_base"] = copy_environ(kwargs.get("environ_base", {})) + builder = EnvironBuilder(self.application, *args, **kwargs) + self.ex_builder = builder + else: + builder = self.ex_builder try: request = builder.get_request() finally: