From 24df8fc89d5659d041b91b30a2ada9de49ec2264 Mon Sep 17 00:00:00 2001 From: David Lord Date: Wed, 15 Feb 2023 14:24:56 -0800 Subject: [PATCH 01/17] show 'run --debug' in docs Reverts commit 4d69165ab6e17fa754139d348cdfd9edacbcb999. Now that a release has this option, it's ok to show it in the docs. It had been reverted because the 2.2.x docs showed it before 2.2.3 was released. --- docs/cli.rst | 12 ++++++++++-- docs/config.rst | 12 ++++++------ docs/debugging.rst | 4 ++-- docs/quickstart.rst | 2 +- docs/server.rst | 2 +- docs/tutorial/factory.rst | 2 +- examples/celery/README.md | 2 +- examples/tutorial/README.rst | 2 +- 8 files changed, 23 insertions(+), 15 deletions(-) diff --git a/docs/cli.rst b/docs/cli.rst index 22484f17..be5a0b70 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -95,7 +95,7 @@ the ``--debug`` option. .. code-block:: console - $ flask --app hello --debug run + $ flask --app hello run --debug * Serving Flask app "hello" * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) @@ -103,6 +103,14 @@ the ``--debug`` option. * Debugger is active! * Debugger PIN: 223-456-919 +The ``--debug`` option can also be passed to the top level ``flask`` command to enable +debug mode for any command. The following two ``run`` calls are equivalent. + +.. code-block:: console + + $ flask --app hello --debug run + $ flask --app hello run --debug + Watch and Ignore Files with the Reloader ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -550,7 +558,7 @@ a name such as "flask run". Click the *Script path* dropdown and change it to *Module name*, then input ``flask``. The *Parameters* field is set to the CLI command to execute along with any arguments. -This example uses ``--app hello --debug run``, which will run the development server in +This example uses ``--app hello run --debug``, which will run the development server in debug mode. ``--app hello`` should be the import or file with your Flask app. If you installed your project as a package in your virtualenv, you may uncheck the diff --git a/docs/config.rst b/docs/config.rst index 7cffc44b..9db2045f 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -47,17 +47,17 @@ Debug Mode The :data:`DEBUG` config value is special because it may behave inconsistently if changed after the app has begun setting up. In order to set debug mode reliably, use the -``--debug`` option on the ``flask`` command. ``flask run`` will use the interactive -debugger and reloader by default in debug mode. +``--debug`` option on the ``flask`` or ``flask run`` command. ``flask run`` will use the +interactive debugger and reloader by default in debug mode. .. code-block:: text - $ flask --app hello --debug run + $ flask --app hello run --debug Using the option is recommended. While it is possible to set :data:`DEBUG` in your -config or code, this is strongly discouraged. It can't be read early by the ``flask run`` -command, and some systems or extensions may have already configured themselves based on -a previous value. +config or code, this is strongly discouraged. It can't be read early by the +``flask run`` command, and some systems or extensions may have already configured +themselves based on a previous value. Builtin Configuration Values diff --git a/docs/debugging.rst b/docs/debugging.rst index fb3604b0..18f42867 100644 --- a/docs/debugging.rst +++ b/docs/debugging.rst @@ -43,7 +43,7 @@ The debugger is enabled by default when the development server is run in debug m .. code-block:: text - $ flask --app hello --debug run + $ flask --app hello run --debug When running from Python code, passing ``debug=True`` enables debug mode, which is mostly equivalent. @@ -72,7 +72,7 @@ which can interfere. .. code-block:: text - $ flask --app hello --debug run --no-debugger --no-reload + $ flask --app hello run --debug --no-debugger --no-reload When running from Python: diff --git a/docs/quickstart.rst b/docs/quickstart.rst index 02dbc978..ad9e3bc4 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -108,7 +108,7 @@ To enable debug mode, use the ``--debug`` option. .. code-block:: text - $ flask --app hello --debug run + $ flask --app hello run --debug * Serving Flask app 'hello' * Debug mode: on * Running on http://127.0.0.1:5000 (Press CTRL+C to quit) diff --git a/docs/server.rst b/docs/server.rst index a34dfab5..d38aa120 100644 --- a/docs/server.rst +++ b/docs/server.rst @@ -24,7 +24,7 @@ debug mode. .. code-block:: text - $ flask --app hello --debug run + $ flask --app hello run --debug This enables debug mode, including the interactive debugger and reloader, and then starts the server on http://localhost:5000/. Use ``flask run --help`` to see the diff --git a/docs/tutorial/factory.rst b/docs/tutorial/factory.rst index c8e2c5f4..39febd13 100644 --- a/docs/tutorial/factory.rst +++ b/docs/tutorial/factory.rst @@ -137,7 +137,7 @@ follow the tutorial. .. code-block:: text - $ flask --app flaskr --debug run + $ flask --app flaskr run --debug You'll see output similar to this: diff --git a/examples/celery/README.md b/examples/celery/README.md index 91782019..038eb51e 100644 --- a/examples/celery/README.md +++ b/examples/celery/README.md @@ -19,7 +19,7 @@ In a separate terminal, activate the virtualenv and run the Flask development se ```shell $ . ./.venv/bin/activate -$ flask -A task_app --debug run +$ flask -A task_app run --debug ``` Go to http://localhost:5000/ and use the forms to submit tasks. You can see the polling diff --git a/examples/tutorial/README.rst b/examples/tutorial/README.rst index a7e12ca2..1c745078 100644 --- a/examples/tutorial/README.rst +++ b/examples/tutorial/README.rst @@ -48,7 +48,7 @@ Run .. code-block:: text $ flask --app flaskr init-db - $ flask --app flaskr --debug run + $ flask --app flaskr run --debug Open http://127.0.0.1:5000 in a browser. From 41d4f62909bb426c84e9d057151f7d734695320a Mon Sep 17 00:00:00 2001 From: David Lord Date: Wed, 15 Feb 2023 14:20:33 -0800 Subject: [PATCH 02/17] release version 2.2.3 --- CHANGES.rst | 6 ++---- src/flask/__init__.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 79e66e95..cd1a04c4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,11 +1,9 @@ Version 2.2.3 ------------- -Unreleased +Released 2023-02-15 -- Autoescaping is now enabled by default for ``.svg`` files. Inside - templates this behavior can be changed with the ``autoescape`` tag. - :issue:`4831` +- Autoescape is enabled by default for ``.svg`` template files. :issue:`4831` - Fix the type of ``template_folder`` to accept ``pathlib.Path``. :issue:`4892` - Add ``--debug`` option to the ``flask run`` command. :issue:`4777` diff --git a/src/flask/__init__.py b/src/flask/__init__.py index 4bd52311..463f55f2 100644 --- a/src/flask/__init__.py +++ b/src/flask/__init__.py @@ -42,7 +42,7 @@ from .templating import render_template_string as render_template_string from .templating import stream_template as stream_template from .templating import stream_template_string as stream_template_string -__version__ = "2.2.3.dev" +__version__ = "2.2.3" def __getattr__(name): From c4c7f504be222c3aca9062656498ec3c72e2b2ad Mon Sep 17 00:00:00 2001 From: David Lord Date: Thu, 16 Feb 2023 06:27:25 -0800 Subject: [PATCH 03/17] update dependencies --- requirements/build.txt | 6 +++--- requirements/dev.txt | 28 +++++++++++++--------------- requirements/docs.txt | 20 ++++++++++---------- requirements/tests.txt | 14 ++++++++++---- requirements/typing.txt | 14 +++++++++----- src/flask/app.py | 4 ++-- 6 files changed, 47 insertions(+), 39 deletions(-) diff --git a/requirements/build.txt b/requirements/build.txt index a735b3d0..f8a3ce75 100644 --- a/requirements/build.txt +++ b/requirements/build.txt @@ -5,13 +5,13 @@ # # pip-compile-multi # -build==0.9.0 +build==0.10.0 # via -r requirements/build.in packaging==23.0 # via build -pep517==0.13.0 +pyproject-hooks==1.0.0 # via build tomli==2.0.1 # via # build - # pep517 + # pyproject-hooks diff --git a/requirements/dev.txt b/requirements/dev.txt index 41b2619c..ccb1921a 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -8,9 +8,9 @@ -r docs.txt -r tests.txt -r typing.txt -build==0.9.0 +build==0.10.0 # via pip-tools -cachetools==5.2.0 +cachetools==5.3.0 # via tox cfgv==3.3.1 # via pre-commit @@ -24,37 +24,35 @@ colorama==0.4.6 # via tox distlib==0.3.6 # via virtualenv -filelock==3.8.2 +filelock==3.9.0 # via # tox # virtualenv -identify==2.5.11 +identify==2.5.18 # via pre-commit nodeenv==1.7.0 # via pre-commit -pep517==0.13.0 - # via build pip-compile-multi==2.6.1 # via -r requirements/dev.in -pip-tools==6.12.1 +pip-tools==6.12.2 # via pip-compile-multi -platformdirs==2.6.0 +platformdirs==3.0.0 # via # tox # virtualenv -pre-commit==2.20.0 +pre-commit==3.0.4 # via -r requirements/dev.in -pyproject-api==1.2.1 +pyproject-api==1.5.0 # via tox +pyproject-hooks==1.0.0 + # via build pyyaml==6.0 # via pre-commit -toml==0.10.2 - # via pre-commit -toposort==1.7 +toposort==1.9 # via pip-compile-multi -tox==4.0.16 +tox==4.4.5 # via -r requirements/dev.in -virtualenv==20.17.1 +virtualenv==20.19.0 # via # pre-commit # tox diff --git a/requirements/docs.txt b/requirements/docs.txt index b1e46bde..5c0568ca 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -5,13 +5,13 @@ # # pip-compile-multi # -alabaster==0.7.12 +alabaster==0.7.13 # via sphinx babel==2.11.0 # via sphinx certifi==2022.12.7 # via requests -charset-normalizer==2.1.1 +charset-normalizer==3.0.1 # via requests docutils==0.17.1 # via @@ -23,21 +23,21 @@ imagesize==1.4.1 # via sphinx jinja2==3.1.2 # via sphinx -markupsafe==2.1.1 +markupsafe==2.1.2 # via jinja2 -packaging==22.0 +packaging==23.0 # via # pallets-sphinx-themes # sphinx pallets-sphinx-themes==2.0.3 # via -r requirements/docs.in -pygments==2.13.0 +pygments==2.14.0 # via # sphinx # sphinx-tabs -pytz==2022.7 +pytz==2022.7.1 # via babel -requests==2.28.1 +requests==2.28.2 # via sphinx snowballstemmer==2.2.0 # via sphinx @@ -52,11 +52,11 @@ sphinx-issues==3.0.1 # via -r requirements/docs.in sphinx-tabs==3.3.1 # via -r requirements/docs.in -sphinxcontrib-applehelp==1.0.2 +sphinxcontrib-applehelp==1.0.4 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.0 +sphinxcontrib-htmlhelp==2.0.1 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx @@ -66,5 +66,5 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -urllib3==1.26.13 +urllib3==1.26.14 # via requests diff --git a/requirements/tests.txt b/requirements/tests.txt index aff42de2..15cf399d 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -11,13 +11,19 @@ attrs==22.2.0 # via pytest blinker==1.5 # via -r requirements/tests.in -iniconfig==1.1.1 +exceptiongroup==1.1.0 # via pytest -packaging==22.0 +greenlet==2.0.2 ; python_version < "3.11" + # via -r requirements/tests.in +iniconfig==2.0.0 + # via pytest +packaging==23.0 # via pytest pluggy==1.0.0 # via pytest -pytest==7.2.0 +pytest==7.2.1 # via -r requirements/tests.in -python-dotenv==0.21.0 +python-dotenv==0.21.1 # via -r requirements/tests.in +tomli==2.0.1 + # via pytest diff --git a/requirements/typing.txt b/requirements/typing.txt index ad8dd594..fbabf508 100644 --- a/requirements/typing.txt +++ b/requirements/typing.txt @@ -7,19 +7,23 @@ # cffi==1.15.1 # via cryptography -cryptography==38.0.4 +cryptography==39.0.1 # via -r requirements/typing.in -mypy==0.991 +mypy==1.0.0 # via -r requirements/typing.in -mypy-extensions==0.4.3 +mypy-extensions==1.0.0 # via mypy pycparser==2.21 # via cffi +tomli==2.0.1 + # via mypy types-contextvars==2.4.7 # via -r requirements/typing.in types-dataclasses==0.6.6 # via -r requirements/typing.in -types-setuptools==65.6.0.2 +types-docutils==0.19.1.4 + # via types-setuptools +types-setuptools==67.3.0.1 # via -r requirements/typing.in -typing-extensions==4.4.0 +typing-extensions==4.5.0 # via mypy diff --git a/src/flask/app.py b/src/flask/app.py index 0ac4bbb5..ff6b0973 100644 --- a/src/flask/app.py +++ b/src/flask/app.py @@ -1248,7 +1248,7 @@ class Flask(Scaffold): """ cls = self.test_client_class if cls is None: - from .testing import FlaskClient as cls # type: ignore + from .testing import FlaskClient as cls return cls( # type: ignore self, self.response_class, use_cookies=use_cookies, **kwargs ) @@ -1266,7 +1266,7 @@ class Flask(Scaffold): cls = self.test_cli_runner_class if cls is None: - from .testing import FlaskCliRunner as cls # type: ignore + from .testing import FlaskCliRunner as cls return cls(self, **kwargs) # type: ignore From 6650764e9719402de2aaa6f321bdec587699c6b2 Mon Sep 17 00:00:00 2001 From: David Lord Date: Thu, 23 Feb 2023 08:35:16 -0800 Subject: [PATCH 04/17] remove previously deprecated code --- CHANGES.rst | 18 ++ docs/api.rst | 6 - docs/config.rst | 69 +------- src/flask/__init__.py | 4 +- src/flask/app.py | 340 +------------------------------------ src/flask/blueprints.py | 106 +----------- src/flask/globals.py | 29 +--- src/flask/helpers.py | 35 +--- src/flask/json/__init__.py | 220 +++--------------------- src/flask/json/provider.py | 104 +----------- src/flask/scaffold.py | 15 -- tests/conftest.py | 1 - tests/test_async.py | 9 - tests/test_basic.py | 39 ----- tests/test_blueprints.py | 10 +- tests/test_helpers.py | 22 +-- 16 files changed, 81 insertions(+), 946 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 0b8d2cfd..64d5770c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,6 +3,24 @@ Version 2.3.0 Unreleased +- Remove previously deprecated code. :pr:`4995` + + - The ``push`` and ``pop`` methods of the deprecated ``_app_ctx_stack`` and + ``_request_ctx_stack`` objects are removed. ``top`` still exists to give + extensions more time to update, but it will be removed. + - The ``FLASK_ENV`` environment variable, ``ENV`` config key, and ``app.env`` + property are removed. + - The ``session_cookie_name``, ``send_file_max_age_default``, ``use_x_sendfile``, + ``propagate_exceptions``, and ``templates_auto_reload`` properties on ``app`` + are removed. + - The ``JSON_AS_ASCII``, ``JSON_SORT_KEYS``, ``JSONIFY_MIMETYPE``, and + ``JSONIFY_PRETTYPRINT_REGULAR`` config keys are removed. + - The ``app.before_first_request`` and ``bp.before_app_first_request`` decorators + are removed. + - ``json_encoder`` and ``json_decoder`` attributes on app and blueprint, and the + corresponding ``json.JSONEncoder`` and ``JSONDecoder`` classes, are removed. + - The ``json.htmlsafe_dumps`` and ``htmlsafe_dump`` functions are removed. + - Use modern packaging metadata with ``pyproject.toml`` instead of ``setup.cfg``. :pr:`4947` - Ensure subdomains are applied with nested blueprints. :issue:`4834` diff --git a/docs/api.rst b/docs/api.rst index afbe0b79..bf37700f 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -270,12 +270,6 @@ HTML ``