From 5bf3f38ff3d8b2de47b7baa7b652c697d7a64776 Mon Sep 17 00:00:00 2001 From: Eli Schwartz Date: Wed, 26 Jun 2024 15:07:43 -0400 Subject: [PATCH] Use the stdlib importlib.metadata when available (#1024) * Use the stdlib importlib.metadata when available The use of importlib_metadata relies on features that were introduced in python 3.10. Aside for that, it should be fine to use the stdlib directly. Fixes #773 * Add news fragment. * Import the full email.utils module as used. --------- Co-authored-by: Jason R. Coombs --- changelog/1024.misc.rst | 1 + twine/__init__.py | 8 ++++++-- twine/cli.py | 14 ++++++++++---- twine/package.py | 7 ++++++- 4 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 changelog/1024.misc.rst diff --git a/changelog/1024.misc.rst b/changelog/1024.misc.rst new file mode 100644 index 00000000..4448c34b --- /dev/null +++ b/changelog/1024.misc.rst @@ -0,0 +1 @@ +Only require ``importlib_metadata`` on older Pythons. diff --git a/twine/__init__.py b/twine/__init__.py index 0952da38..c6147574 100644 --- a/twine/__init__.py +++ b/twine/__init__.py @@ -30,9 +30,13 @@ __copyright__ = "Copyright 2019 Donald Stufft and individual contributors" -import email +import email.utils +import sys -import importlib_metadata +if sys.version_info >= (3, 10): + import importlib.metadata as importlib_metadata +else: + import importlib_metadata metadata = importlib_metadata.metadata("twine") diff --git a/twine/cli.py b/twine/cli.py index debe6199..749a6452 100644 --- a/twine/cli.py +++ b/twine/cli.py @@ -13,9 +13,14 @@ # limitations under the License. import argparse import logging.config +import sys from typing import Any, List, Tuple -import importlib_metadata +if sys.version_info >= (3, 10): + import importlib.metadata as importlib_metadata +else: + import importlib_metadata + import rich import rich.highlighter import rich.logging @@ -70,14 +75,15 @@ def configure_output() -> None: def list_dependencies_and_versions() -> List[Tuple[str, str]]: - deps = ( - "importlib-metadata", + deps = [ "keyring", "pkginfo", "requests", "requests-toolbelt", "urllib3", - ) + ] + if sys.version_info < (3, 10): + deps.append("importlib-metadata") return [(dep, importlib_metadata.version(dep)) for dep in deps] diff --git a/twine/package.py b/twine/package.py index 7283ea47..ac8e4cf1 100644 --- a/twine/package.py +++ b/twine/package.py @@ -18,9 +18,14 @@ import os import re import subprocess +import sys from typing import Any, Dict, List, NamedTuple, Optional, Sequence, Tuple, Union, cast -import importlib_metadata +if sys.version_info >= (3, 10): + import importlib.metadata as importlib_metadata +else: + import importlib_metadata + import pkginfo from rich import print