From b7ce542db1cd1e85f5c47a6ec7eb584aa189bffc Mon Sep 17 00:00:00 2001 From: David Lord Date: Wed, 28 May 2025 11:39:42 -0700 Subject: [PATCH] deprecate `__version__` --- CHANGES.rst | 2 ++ pyproject.toml | 2 +- src/jinja2/__init__.py | 21 ++++++++++++++++++++- uv.lock | 1 + 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 2b384103..338dc996 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,6 +8,8 @@ Unreleased - Drop support for Python 3.7, 3.8, and 3.9. - Update minimum MarkupSafe version to >= 3.0. - Update minimum Babel version to >= 2.17. +- Deprecate the ``__version__`` attribute. Use feature detection or + ``importlib.metadata.version("jinja2")`` instead. - Use modern packaging metadata with ``pyproject.toml`` instead of ``setup.cfg``. :pr:`1793` - Use ``flit_core`` instead of ``setuptools`` as build backend. diff --git a/pyproject.toml b/pyproject.toml index 04cf89aa..efc5d2be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,6 @@ [project] name = "Jinja2" +version = "3.2.0.dev" description = "A very fast and expressive template engine." readme = "README.md" license = "BSD-3-Clause" @@ -17,7 +18,6 @@ classifiers = [ ] requires-python = ">=3.10" dependencies = ["MarkupSafe>=3.0"] -dynamic = ["version"] [project.urls] Donate = "https://palletsprojects.com/donate" diff --git a/src/jinja2/__init__.py b/src/jinja2/__init__.py index 2ac03b96..93bc0233 100644 --- a/src/jinja2/__init__.py +++ b/src/jinja2/__init__.py @@ -3,6 +3,10 @@ non-XML syntax that supports inline expressions and an optional sandboxed environment. """ +from __future__ import annotations + +import typing as t + from .bccache import BytecodeCache as BytecodeCache from .bccache import FileSystemBytecodeCache as FileSystemBytecodeCache from .bccache import MemcachedBytecodeCache as MemcachedBytecodeCache @@ -35,4 +39,19 @@ from .utils import pass_environment as pass_environment from .utils import pass_eval_context as pass_eval_context from .utils import select_autoescape as select_autoescape -__version__ = "3.2.0.dev0" + +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" + " Werkzeug 3.3. Use feature detection or" + ' `importlib.metadata.version("werkzeug")` instead.', + DeprecationWarning, + stacklevel=2, + ) + return importlib.metadata.version("werkzeug") + + raise AttributeError(name) diff --git a/uv.lock b/uv.lock index 49096020..df2fe0ac 100644 --- a/uv.lock +++ b/uv.lock @@ -313,6 +313,7 @@ wheels = [ [[package]] name = "jinja2" +version = "3.2.0.dev0" source = { editable = "." } dependencies = [ { name = "markupsafe" }, -- 2.47.2