Skip to content

Commit 691a3be

Browse files
kiukchungfacebook-github-bot
authored andcommitted
(torchx/entrypoints) Use importlib.metadata instead of the backported importlib_metadata (#1087)
Summary: torchx dropped support for python<=3.7 2 years ago (see: #728). But we kept using the backported `importlib_metadata` module to load configurations from `entry_points`. Reviewed By: highker Differential Revision: D77619564
1 parent 7fabab4 commit 691a3be

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
pyre-extensions
22
docstring-parser>=0.8.1
3-
importlib-metadata
43
pyyaml
54
docker
65
filelock

torchx/util/entrypoints.py

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66

77
# pyre-strict
88

9+
from importlib import metadata
10+
from importlib.metadata import EntryPoint
911
from typing import Any, Dict, Optional
1012

11-
import importlib_metadata as metadata
12-
from importlib_metadata import EntryPoint
13-
1413

1514
# pyre-ignore-all-errors[3, 2]
1615
def load(group: str, name: str, default=None):
@@ -30,13 +29,29 @@ def load(group: str, name: str, default=None):
3029
raises an error.
3130
"""
3231

33-
entrypoints = metadata.entry_points().select(group=group)
32+
# return type of importlib.metadata.entry_points() is different between python-3.9 and python-3.10
33+
# https://docs.python.org/3.9/library/importlib.metadata.html#importlib.metadata.entry_points
34+
# https://docs.python.org/3.10/library/importlib.metadata.html#importlib.metadata.entry_points
35+
if hasattr(metadata.entry_points(), "select"):
36+
# python>=3.10
37+
entrypoints = metadata.entry_points().select(group=group)
3438

35-
if name not in entrypoints.names and default is not None:
36-
return default
39+
if name not in entrypoints.names and default is not None:
40+
return default
3741

38-
ep = entrypoints[name]
39-
return ep.load()
42+
ep = entrypoints[name]
43+
return ep.load()
44+
else:
45+
# python<3.10 (e.g. 3.9)
46+
entrypoints = metadata.entry_points()[group]
47+
48+
# pyre-ignore[16] entrypoints is a Tuple[EntryPoint] in python-3.9
49+
for ep in entrypoints:
50+
if ep.name == name:
51+
return ep.load()
52+
53+
# [group].name not found
54+
return default
4055

4156

4257
def _defer_load_ep(ep: EntryPoint) -> object:

torchx/util/test/entrypoints_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
import unittest
1010
from configparser import ConfigParser
11+
12+
from importlib.metadata import EntryPoint, EntryPoints
1113
from types import ModuleType
1214
from typing import List
1315
from unittest.mock import MagicMock, patch
1416

15-
from importlib_metadata import EntryPoint, EntryPoints
16-
1717
from torchx.util.entrypoints import load, load_group
1818

1919

0 commit comments

Comments
 (0)