This is an automated email from the ASF dual-hosted git repository. taragolis pushed a commit to branch bump-importlib-metadata in repository https://gitbox.apache.org/repos/asf/airflow.git
commit a869e33ee0288f8346e8c3981b15da775fa941c0 Author: Andrey Anshin <[email protected]> AuthorDate: Thu Mar 21 14:38:05 2024 +0400 Use `importlib_metadata` with compat to Python 3.10/3.12 stdlib --- airflow/operators/python.py | 9 ++++----- airflow/plugins_manager.py | 6 +++--- airflow/utils/docs.py | 14 ++++++++------ airflow/utils/entry_points.py | 9 +++++---- pyproject.toml | 2 +- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/airflow/operators/python.py b/airflow/operators/python.py index ee4069b31b..d358167105 100644 --- a/airflow/operators/python.py +++ b/airflow/operators/python.py @@ -900,16 +900,15 @@ class ExternalPythonOperator(_BasePythonVirtualenvOperator): On the other hand, `importlib.metadata.version` will retrieve the package version pretty fast something below 100ms; this includes new subprocess overhead. - Possible side effect: it might be a situation that backport package is not available - in Python 3.8 and below, which indicates that venv doesn't contain an `apache-airflow` + Possible side effect: It might be a situation that `importlib.metadata` is not available (Python < 3.8), + as well as backport `importlib_metadata` which might indicate that venv doesn't contain an `apache-airflow` or something wrong with the environment. """ return textwrap.dedent( """ - import sys - if sys.version_info >= (3, 9): + try: from importlib.metadata import version - else: + except ImportError: from importlib_metadata import version print(version("apache-airflow")) """ diff --git a/airflow/plugins_manager.py b/airflow/plugins_manager.py index 13ce0c1b66..93372b1997 100644 --- a/airflow/plugins_manager.py +++ b/airflow/plugins_manager.py @@ -41,9 +41,9 @@ from airflow.utils.module_loading import import_string, qualname if TYPE_CHECKING: try: - import importlib_metadata + import importlib_metadata as metadata except ImportError: - from importlib import metadata as importlib_metadata # type: ignore[no-redef] + from importlib import metadata # type: ignore[no-redef] from types import ModuleType from airflow.hooks.base import BaseHook @@ -125,7 +125,7 @@ class PluginsDirectorySource(AirflowPluginSource): class EntryPointSource(AirflowPluginSource): """Class used to define Plugins loaded from entrypoint.""" - def __init__(self, entrypoint: importlib_metadata.EntryPoint, dist: importlib_metadata.Distribution): + def __init__(self, entrypoint: metadata.EntryPoint, dist: metadata.Distribution): self.dist = dist.metadata["Name"] self.version = dist.version self.entrypoint = str(entrypoint) diff --git a/airflow/utils/docs.py b/airflow/utils/docs.py index 478904e4b9..254b04c4b6 100644 --- a/airflow/utils/docs.py +++ b/airflow/utils/docs.py @@ -16,10 +16,12 @@ # under the License. from __future__ import annotations -try: - import importlib_metadata -except ImportError: - from importlib import metadata as importlib_metadata # type: ignore[no-redef] +import sys + +if sys.version_info >= (3, 10): + from importlib import metadata +else: + import importlib_metadata as metadata # type: ignore[no-redef] def get_docs_url(page: str | None = None) -> str: @@ -40,7 +42,7 @@ def get_docs_url(page: str | None = None) -> str: def get_doc_url_for_provider(provider_name: str, provider_version: str) -> str: """Prepare link to Airflow Provider documentation.""" try: - metadata_items = importlib_metadata.metadata(provider_name).get_all("Project-URL") + metadata_items = metadata.metadata(provider_name).get_all("Project-URL") if isinstance(metadata_items, str): metadata_items = [metadata_items] if metadata_items: @@ -49,7 +51,7 @@ def get_doc_url_for_provider(provider_name: str, provider_version: str) -> str: _, _, url = item.partition(",") if url: return url.strip() - except importlib_metadata.PackageNotFoundError: + except metadata.PackageNotFoundError: pass # Fallback if provider is apache one if provider_name.startswith("apache-airflow"): diff --git a/airflow/utils/entry_points.py b/airflow/utils/entry_points.py index aff4c0a9f9..461244da9e 100644 --- a/airflow/utils/entry_points.py +++ b/airflow/utils/entry_points.py @@ -18,13 +18,14 @@ from __future__ import annotations import functools import logging +import sys from collections import defaultdict from typing import Iterator, Tuple -try: - import importlib_metadata as metadata -except ImportError: - from importlib import metadata # type: ignore[no-redef] +if sys.version_info >= (3, 12): + from importlib import metadata +else: + import importlib_metadata as metadata # type: ignore[no-redef] log = logging.getLogger(__name__) diff --git a/pyproject.toml b/pyproject.toml index 04b5b7d197..373c9e0027 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,7 +107,7 @@ dependencies = [ "google-re2>=1.0", "gunicorn>=20.1.0", "httpx", - "importlib_metadata>=1.7;python_version<\"3.9\"", + "importlib_metadata>=6.5;python_version<\"3.12\"", # Importib_resources 6.2.0-6.3.1 break pytest_rewrite # see https://github.com/python/importlib_resources/issues/299 "importlib_resources>=5.2,!=6.2.0,!=6.3.0,!=6.3.1;python_version<\"3.9\"",
