From feeea394669e53f2a572c90e0c383422568a4dae Mon Sep 17 00:00:00 2001 From: A5rocks Date: Tue, 21 Jan 2025 14:09:43 +0900 Subject: [PATCH 1/5] Deprecate `trio.__version__` --- src/trio/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/trio/__init__.py b/src/trio/__init__.py index 0b675ce473..8ad1c6ce67 100644 --- a/src/trio/__init__.py +++ b/src/trio/__init__.py @@ -115,7 +115,11 @@ _deprecate.enable_attribute_deprecations(__name__) -__deprecated_attributes__: dict[str, _deprecate.DeprecatedAttribute] = {} +__deprecated_attributes__: dict[str, _deprecate.DeprecatedAttribute] = { + "__version__": _deprecate.DeprecatedAttribute( + __version__, "0.29.0", issue=None, instead='importlib.metadata.version("trio")' + ) +} # Having the public path in .__module__ attributes is important for: # - exception names in printed tracebacks From cb3de6a886c7a882da23b4b6ae2e96abe61436b5 Mon Sep 17 00:00:00 2001 From: A5rocks Date: Tue, 21 Jan 2025 14:16:57 +0900 Subject: [PATCH 2/5] Actually deprecate `trio.__version__` --- newsfragments/3190.deprecated.rst | 1 + src/trio/__init__.py | 4 ++-- src/trio/_tests/test_trio.py | 9 +++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 newsfragments/3190.deprecated.rst diff --git a/newsfragments/3190.deprecated.rst b/newsfragments/3190.deprecated.rst new file mode 100644 index 0000000000..0658da9a10 --- /dev/null +++ b/newsfragments/3190.deprecated.rst @@ -0,0 +1 @@ +Deprecate ``trio.__version__`` in favor of `importlib.metadata.version`. diff --git a/src/trio/__init__.py b/src/trio/__init__.py index 8ad1c6ce67..ba3e94e783 100644 --- a/src/trio/__init__.py +++ b/src/trio/__init__.py @@ -104,7 +104,7 @@ sleep_forever as sleep_forever, sleep_until as sleep_until, ) -from ._version import __version__ as __version__ +from ._version import __version__ as trio_version # Not imported by default, but mentioned here so static analysis tools like # pylint will know that it exists. @@ -117,7 +117,7 @@ __deprecated_attributes__: dict[str, _deprecate.DeprecatedAttribute] = { "__version__": _deprecate.DeprecatedAttribute( - __version__, "0.29.0", issue=None, instead='importlib.metadata.version("trio")' + trio_version, "0.29.0", issue=None, instead='importlib.metadata.version("trio")' ) } diff --git a/src/trio/_tests/test_trio.py b/src/trio/_tests/test_trio.py index 65d4ce34f2..aa88ac682c 100644 --- a/src/trio/_tests/test_trio.py +++ b/src/trio/_tests/test_trio.py @@ -6,3 +6,12 @@ def test_trio_import() -> None: del sys.modules[module] import trio # noqa: F401 + + +def test_trio_version_deprecated() -> None: + import pytest + + import trio + + with pytest.warns(DeprecationWarning, match="^trio.__version__ is deprecated"): + _ = trio.__version__ From d7b1902b493ed4adda53a7c18c04e7a65ad6bf0b Mon Sep 17 00:00:00 2001 From: A5rocks Date: Tue, 21 Jan 2025 14:24:05 +0900 Subject: [PATCH 3/5] Ensure `assert_type(trio.version, str)` --- src/trio/__init__.py | 7 +++++-- src/trio/_tests/type_tests/trio_version.py | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 src/trio/_tests/type_tests/trio_version.py diff --git a/src/trio/__init__.py b/src/trio/__init__.py index ba3e94e783..ebd7e4fb12 100644 --- a/src/trio/__init__.py +++ b/src/trio/__init__.py @@ -104,7 +104,7 @@ sleep_forever as sleep_forever, sleep_until as sleep_until, ) -from ._version import __version__ as trio_version +from ._version import __version__ as __version__ # Not imported by default, but mentioned here so static analysis tools like # pylint will know that it exists. @@ -117,10 +117,13 @@ __deprecated_attributes__: dict[str, _deprecate.DeprecatedAttribute] = { "__version__": _deprecate.DeprecatedAttribute( - trio_version, "0.29.0", issue=None, instead='importlib.metadata.version("trio")' + __version__, "0.29.0", issue=None, instead='importlib.metadata.version("trio")' ) } +if not TYPE_CHECKING: + del __version__ + # Having the public path in .__module__ attributes is important for: # - exception names in printed tracebacks # - sphinx :show-inheritance: diff --git a/src/trio/_tests/type_tests/trio_version.py b/src/trio/_tests/type_tests/trio_version.py new file mode 100644 index 0000000000..2441b1b336 --- /dev/null +++ b/src/trio/_tests/type_tests/trio_version.py @@ -0,0 +1,4 @@ +import trio +from typing_extensions import assert_type + +assert_type(trio.__version__, str) From f8a9036baced3893e770e506799e10552837d581 Mon Sep 17 00:00:00 2001 From: A5rocks Date: Wed, 22 Jan 2025 14:20:12 +0900 Subject: [PATCH 4/5] Update conf.py to use importlib.metadata --- docs/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index fb8e60cdc5..275aee0a54 100755 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -315,9 +315,9 @@ def add_mapping( # built documents. # # The short X.Y version. -import trio +import importlib.metadata -version = trio.__version__ +version = importlib.metadata.version("trio") # The full version, including alpha/beta/rc tags. release = version From 6b625e43a6fa56506b56b0b0c16272336b002f92 Mon Sep 17 00:00:00 2001 From: A5rocks Date: Wed, 22 Jan 2025 14:24:29 +0900 Subject: [PATCH 5/5] Install trio in RTD builds --- .readthedocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.readthedocs.yml b/.readthedocs.yml index 0604945f9e..8b1cff2d5d 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -13,6 +13,7 @@ build: python: install: - requirements: docs-requirements.txt + - path: . sphinx: fail_on_warning: true