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\"",

Reply via email to