From 293041a290178dc1d526075372960c3ca589d366 Mon Sep 17 00:00:00 2001 From: David Lord Date: Tue, 29 Aug 2023 06:03:11 -0700 Subject: [PATCH] deprecate __version__ attribute --- CHANGES.rst | 2 ++ pyproject.toml | 2 +- src/flask/__init__.py | 21 ++++++++++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 30f9122bcc..e5ca2fb174 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,8 @@ Version 3.0.0 Unreleased - Remove previously deprecated code. :pr:`5223` +- Deprecate the ``__version__`` attribute. Use feature detection, or + ``importlib.metadata.version("flask")``, instead. :issue:`5230` - Restructure the code such that the Flask (app) and Blueprint classes have Sans-IO bases. :pr:`5127` diff --git a/pyproject.toml b/pyproject.toml index 7e5b21ffcc..153eb4f3cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,6 @@ [project] name = "Flask" +version = "3.0.0.dev" description = "A simple framework for building complex web applications." readme = "README.rst" license = {file = "LICENSE.rst"} @@ -26,7 +27,6 @@ dependencies = [ "blinker>=1.6.2", "importlib-metadata>=3.6.0; python_version < '3.10'", ] -dynamic = ["version"] [project.urls] Donate = "https://palletsprojects.com/donate" diff --git a/src/flask/__init__.py b/src/flask/__init__.py index 78ba97c243..e86eb43ee9 100644 --- a/src/flask/__init__.py +++ b/src/flask/__init__.py @@ -1,3 +1,7 @@ +from __future__ import annotations + +import typing as t + from . import json as json from .app import Flask as Flask from .blueprints import Blueprint as Blueprint @@ -38,4 +42,19 @@ from .wrappers import Request as Request from .wrappers import Response as Response -__version__ = "3.0.0.dev" + +def __getattr__(name: str) -> t.Any: + if name == "__version__": + import importlib.metadata + import warnings + + warnings.warn( + "The '__version__' attribute is deprecated and will be removed in" + " Flask 3.1. Use feature detection or" + " 'importlib.metadata.version(\"flask\")' instead.", + DeprecationWarning, + stacklevel=2, + ) + return importlib.metadata.version("flask") + + raise AttributeError(name)