diff options
author | robot-piglet <robot-piglet@yandex-team.com> | 2024-05-03 00:01:03 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2024-05-03 00:06:37 +0300 |
commit | 38934cfb0b963a0157cf16c13499977ac87f35b9 (patch) | |
tree | 124d141726b8a860761a75fe2b597eecce078ee7 /contrib/python/Flask/py3/flask/testing.py | |
parent | 616419d508d3ee4a3b07a82e5cae5ab4544bd1e2 (diff) | |
download | ydb-38934cfb0b963a0157cf16c13499977ac87f35b9.tar.gz |
Intermediate changes
Diffstat (limited to 'contrib/python/Flask/py3/flask/testing.py')
-rw-r--r-- | contrib/python/Flask/py3/flask/testing.py | 95 |
1 files changed, 40 insertions, 55 deletions
diff --git a/contrib/python/Flask/py3/flask/testing.py b/contrib/python/Flask/py3/flask/testing.py index 1b35cc7a0b..e07e50e7a2 100644 --- a/contrib/python/Flask/py3/flask/testing.py +++ b/contrib/python/Flask/py3/flask/testing.py @@ -172,6 +172,22 @@ class FlaskClient(Client): headers = resp.get_wsgi_headers(c.request.environ) self.cookie_jar.extract_wsgi(c.request.environ, headers) + def _copy_environ(self, other): + return { + **self.environ_base, + **other, + "flask._preserve_context": self.preserve_context, + } + + def _request_from_builder_args(self, args, kwargs): + kwargs["environ_base"] = self._copy_environ(kwargs.get("environ_base", {})) + builder = EnvironBuilder(self.application, *args, **kwargs) + + try: + return builder.get_request() + finally: + builder.close() + def open( self, *args: t.Any, @@ -179,64 +195,30 @@ class FlaskClient(Client): follow_redirects: bool = False, **kwargs: t.Any, ) -> "TestResponse": - as_tuple = kwargs.pop("as_tuple", None) - - # Same logic as super.open, but apply environ_base and preserve_context. - request = None - - def copy_environ(other): - return { - **self.environ_base, - **other, - "flask._preserve_context": self.preserve_context, - } - - if not kwargs and len(args) == 1: - arg = args[0] - - if isinstance(arg, werkzeug.test.EnvironBuilder): - builder = copy(arg) - builder.environ_base = copy_environ(builder.environ_base or {}) + if args and isinstance( + args[0], (werkzeug.test.EnvironBuilder, dict, BaseRequest) + ): + if isinstance(args[0], werkzeug.test.EnvironBuilder): + builder = copy(args[0]) + builder.environ_base = self._copy_environ(builder.environ_base or {}) request = builder.get_request() - elif isinstance(arg, dict): + elif isinstance(args[0], dict): request = EnvironBuilder.from_environ( - arg, app=self.application, environ_base=copy_environ({}) + args[0], app=self.application, environ_base=self._copy_environ({}) ).get_request() - elif isinstance(arg, BaseRequest): - 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) - - try: - request = builder.get_request() - finally: - builder.close() - - if as_tuple is not None: - import warnings - - warnings.warn( - "'as_tuple' is deprecated and will be removed in" - " Werkzeug 2.1 and Flask 2.1. Use" - " 'response.request.environ' instead.", - DeprecationWarning, - stacklevel=3, - ) - return super().open( - request, - as_tuple=as_tuple, - buffered=buffered, - follow_redirects=follow_redirects, - ) + else: + # isinstance(args[0], BaseRequest) + request = copy(args[0]) + request.environ = self._copy_environ(request.environ) else: - return super().open( - request, - buffered=buffered, - follow_redirects=follow_redirects, - ) + # request is None + request = self._request_from_builder_args(args, kwargs) + + return super().open( + request, + buffered=buffered, + follow_redirects=follow_redirects, + ) def __enter__(self) -> "FlaskClient": if self.preserve_context: @@ -245,7 +227,10 @@ class FlaskClient(Client): return self def __exit__( - self, exc_type: type, exc_value: BaseException, tb: TracebackType + self, + exc_type: t.Optional[type], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], ) -> None: self.preserve_context = False |