From: Aarni Koskela Date: Fri, 19 Jul 2024 09:05:50 +0000 (+0300) Subject: Only use importlib.metadata on Python 3.10+ X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a029e095d8ed6b937a5f842c9edb718c943ddbb;p=thirdparty%2Fbabel.git Only use importlib.metadata on Python 3.10+ --- diff --git a/babel/messages/_compat.py b/babel/messages/_compat.py index cf82245e..319b545f 100644 --- a/babel/messages/_compat.py +++ b/babel/messages/_compat.py @@ -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