6
6
from typing import cast
7
7
from typing import Iterator
8
8
from typing import overload
9
- from typing import Protocol
10
9
from typing import TYPE_CHECKING
11
10
12
11
from . import _log
17
16
from ._config import Configuration , ParseFunction
18
17
19
18
20
- log = _log .log .getChild ("entrypoints" )
19
+ from importlib .metadata import EntryPoint as EntryPoint
20
+
21
+
22
+ if sys .version_info [:2 ] < (3 , 10 ):
23
+ from importlib .metadata import entry_points as legacy_entry_points
24
+
25
+ class EntryPoints :
26
+ _groupdata : list [EntryPoint ]
27
+
28
+ def __init__ (self , groupdata : list [EntryPoint ]) -> None :
29
+ self ._groupdata = groupdata
30
+
31
+ def select (self , name : str ) -> EntryPoints :
32
+ return EntryPoints ([x for x in self ._groupdata if x .name == name ])
21
33
34
+ def __iter__ (self ) -> Iterator [EntryPoint ]:
35
+ return iter (self ._groupdata )
22
36
23
- class EntrypointProtocol (Protocol ):
24
- name : str
25
- value : str
37
+ def entry_points (group : str ) -> EntryPoints :
38
+ return EntryPoints (legacy_entry_points ()[group ])
26
39
27
- def load (self ) -> Any :
28
- pass
40
+ else :
41
+ from importlib .metadata import entry_points , EntryPoints
42
+
43
+
44
+ log = _log .log .getChild ("entrypoints" )
29
45
30
46
31
47
def version_from_entrypoint (
@@ -43,27 +59,11 @@ def version_from_entrypoint(
43
59
return None
44
60
45
61
46
- if sys .version_info [:2 ] < (3 , 10 ):
47
- from importlib_metadata import entry_points
48
- from importlib_metadata import EntryPoint
49
- else :
50
- from importlib .metadata import entry_points
51
- from importlib .metadata import EntryPoint
52
-
53
-
54
- def iter_entry_points (
55
- group : str , name : str | None = None
56
- ) -> Iterator [EntrypointProtocol ]:
57
- eps = entry_points (group = group )
58
- res = (
59
- eps
60
- if name is None
61
- else eps .select ( # type: ignore [no-untyped-call]
62
- name = name ,
63
- )
64
- )
62
+ def iter_entry_points (group : str , name : str | None = None ) -> Iterator [EntryPoint ]:
63
+ eps : EntryPoints = entry_points (group = group )
64
+ res = eps if name is None else eps .select (name = name )
65
65
66
- return cast ( Iterator [ EntrypointProtocol ], iter (res ) )
66
+ return iter (res )
67
67
68
68
69
69
def _get_ep (group : str , name : str ) -> Any | None :
@@ -76,7 +76,7 @@ def _get_ep(group: str, name: str) -> Any | None:
76
76
77
77
def _get_from_object_reference_str (path : str , group : str ) -> Any | None :
78
78
# todo: remove for importlib native spelling
79
- ep : EntrypointProtocol = EntryPoint (path , path , group )
79
+ ep = EntryPoint (path , path , group )
80
80
try :
81
81
return ep .load ()
82
82
except (AttributeError , ModuleNotFoundError ):
0 commit comments