Fix entrypoint bug in py3.8/3.9

This commit is contained in:
Alex Mykyta
2023-04-03 22:43:43 -07:00
parent 03d3729ac3
commit 80f670bf30

View File

@@ -16,12 +16,21 @@ if sys.version_info >= (3,10,0):
def _get_name_from_dist(dist: 'Distribution') -> str: def _get_name_from_dist(dist: 'Distribution') -> str:
return dist.name return dist.name
elif sys.version_info >= (3,8,0): elif sys.version_info >= (3,8,0): # pragma: no cover
from importlib import metadata from importlib import metadata
def _get_entry_points(group_name: str) -> List[Tuple['EntryPoint', 'Distribution']]: def _get_entry_points(group_name: str) -> List[Tuple['EntryPoint', 'Distribution']]:
eps = [] eps = []
dist_names = set()
for dist in metadata.distributions(): for dist in metadata.distributions():
# Due to a bug in importlib.metadata's distributions iterator, in
# some cases editable installs will cause duplicate dist entries.
# Filter this out.
dist_name = get_name_from_dist(dist)
if dist_name in dist_names:
continue
dist_names.add(dist_name)
for ep in dist.entry_points: for ep in dist.entry_points:
if ep.group == group_name: if ep.group == group_name:
eps.append((ep, dist)) eps.append((ep, dist))
@@ -30,7 +39,7 @@ elif sys.version_info >= (3,8,0):
def _get_name_from_dist(dist: 'Distribution') -> str: def _get_name_from_dist(dist: 'Distribution') -> str:
return dist.metadata["Name"] return dist.metadata["Name"]
else: else: # pragma: no cover
import pkg_resources # type: ignore import pkg_resources # type: ignore
def _get_entry_points(group_name: str) -> List[Tuple['EntryPoint', 'Distribution']]: def _get_entry_points(group_name: str) -> List[Tuple['EntryPoint', 'Distribution']]: