deprecate as_tuple

This commit is contained in:
David Lord 2021-11-15 13:08:45 -08:00
parent a2258dd05d
commit 564bb27efa
No known key found for this signature in database
GPG Key ID: 7A1C87E3F5BC42A8
2 changed files with 41 additions and 12 deletions

View File

@ -1,5 +1,16 @@
.. currentmodule:: flask .. currentmodule:: flask
Version 2.0.3
-------------
Unreleased
- The test client's ``as_tuple`` parameter is deprecated and will be
removed in Werkzeug 2.1. It is now also deprecated in Flask, to be
removed in Flask 2.1, while remaining compatible with both in
2.0.x. Use ``response.request.environ`` instead. :pr:`4341`
Version 2.0.2 Version 2.0.2
------------- -------------

View File

@ -9,14 +9,15 @@ from werkzeug.test import Client
from werkzeug.urls import url_parse from werkzeug.urls import url_parse
from werkzeug.wrappers import Request as BaseRequest from werkzeug.wrappers import Request as BaseRequest
from . import _request_ctx_stack
from .cli import ScriptInfo from .cli import ScriptInfo
from .globals import _request_ctx_stack
from .json import dumps as json_dumps from .json import dumps as json_dumps
from .sessions import SessionMixin from .sessions import SessionMixin
if t.TYPE_CHECKING: if t.TYPE_CHECKING:
from werkzeug.test import TestResponse
from .app import Flask from .app import Flask
from .wrappers import Response
class EnvironBuilder(werkzeug.test.EnvironBuilder): class EnvironBuilder(werkzeug.test.EnvironBuilder):
@ -171,14 +172,15 @@ class FlaskClient(Client):
headers = resp.get_wsgi_headers(c.request.environ) headers = resp.get_wsgi_headers(c.request.environ)
self.cookie_jar.extract_wsgi(c.request.environ, headers) self.cookie_jar.extract_wsgi(c.request.environ, headers)
def open( # type: ignore def open(
self, self,
*args: t.Any, *args: t.Any,
as_tuple: bool = False,
buffered: bool = False, buffered: bool = False,
follow_redirects: bool = False, follow_redirects: bool = False,
**kwargs: t.Any, **kwargs: t.Any,
) -> "Response": ) -> "TestResponse":
as_tuple = kwargs.pop("as_tuple", None)
# Same logic as super.open, but apply environ_base and preserve_context. # Same logic as super.open, but apply environ_base and preserve_context.
request = None request = None
@ -213,12 +215,28 @@ class FlaskClient(Client):
finally: finally:
builder.close() builder.close()
return super().open( # type: ignore if as_tuple is not None:
request, import warnings
as_tuple=as_tuple,
buffered=buffered, warnings.warn(
follow_redirects=follow_redirects, "'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:
return super().open(
request,
buffered=buffered,
follow_redirects=follow_redirects,
)
def __enter__(self) -> "FlaskClient": def __enter__(self) -> "FlaskClient":
if self.preserve_context: if self.preserve_context:
@ -272,7 +290,7 @@ class FlaskCliRunner(CliRunner):
:return: a :class:`~click.testing.Result` object. :return: a :class:`~click.testing.Result` object.
""" """
if cli is None: if cli is None:
cli = self.app.cli cli = self.app.cli # type: ignore
if "obj" not in kwargs: if "obj" not in kwargs:
kwargs["obj"] = ScriptInfo(create_app=lambda: self.app) kwargs["obj"] = ScriptInfo(create_app=lambda: self.app)