]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Only use importlib.metadata on Python 3.10+ py312-importlib-metadata 1102/head
authorAarni Koskela <akx@iki.fi>
Fri, 19 Jul 2024 09:05:50 +0000 (12:05 +0300)
committerAarni Koskela <akx@iki.fi>
Thu, 25 Jul 2024 09:39:08 +0000 (12:39 +0300)
babel/messages/_compat.py

index cf82245e663885dfb5327e6d14b86a52aba33be4..319b545f0327962b145858e20a89ceb2b641fb67 100644 (file)
@@ -1,3 +1,4 @@
+import sys
 from functools import partial
 
 
@@ -9,19 +10,20 @@ def find_entrypoints(group_name: str):
     Yields tuples of the entrypoint name and a callable function that will
     load the actual entrypoint.
     """
-    try:
-        from importlib.metadata import entry_points
-    except ImportError:
-        pass
-    else:
-        eps = entry_points()
-        if isinstance(eps, dict):  # Old structure before Python 3.10
-            group_eps = eps.get(group_name, [])
-        else:  # New structure in Python 3.10+
-            group_eps = (ep for ep in eps if ep.group == group_name)
-        for entry_point in group_eps:
-            yield (entry_point.name, entry_point.load)
-        return
+    if sys.version_info >= (3, 10):
+        # "Changed in version 3.10: importlib.metadata is no longer provisional."
+        try:
+            from importlib.metadata import entry_points
+        except ImportError:
+            pass
+        else:
+            eps = entry_points(group=group_name)
+            # Only do this if this implementation of `importlib.metadata` is
+            # modern enough to not return a dict.
+            if not isinstance(eps, dict):
+                for entry_point in eps:
+                    yield (entry_point.name, entry_point.load)
+                return
 
     try:
         from pkg_resources import working_set