44 "extensions_by_priority" ,
55 "select_from_extension" ,
66 "supports_extending" ,
7+ "DiracEntryPoint" ,
78]
89
910from collections import defaultdict
11+ from enum import StrEnum
1012from importlib .metadata import EntryPoint , entry_points
1113from typing import Callable , ParamSpec , TypeVar , cast
1214
1618P = ParamSpec ("P" )
1719
1820
21+ class DiracEntryPoint (StrEnum ):
22+ """Available entrypoint group values."""
23+
24+ CORE = "diracx"
25+ ACCESS_POLICY = "diracx.access_policies"
26+ CLI = "diracx.cli"
27+ HIDDEN_CLI = "diracx.cli.hidden"
28+ OS_DB = "diracx.dbs.os"
29+ SQL_DB = "diracx.dbs.sql"
30+ MIN_CLIENT_VERSION = "diracx.min_client_version"
31+ RESOURCES = "diracx.resources"
32+ SERVICES = "diracx.services"
33+
34+
1935@cached (cache = LRUCache (maxsize = 1 ))
2036def extensions_by_priority () -> list [str ]:
2137 """Yield extension module names in order of priority.
@@ -24,10 +40,10 @@ def extensions_by_priority() -> list[str]:
2440 importing diracx in the MetaPathFinder as part of unrelated imports
2541 (e.g. http.client).
2642 """
27- selected = entry_points ().select (group = "diracx" )
43+ selected = entry_points ().select (group = DiracEntryPoint . CORE )
2844 if selected is None :
2945 raise NotImplementedError (
30- "No entry points found for group 'diracx' . Do you have it installed?"
46+ f "No entry points found for group { DiracEntryPoint . CORE } . Do you have it installed?"
3147 )
3248 extensions = set ()
3349 for entry_point in selected .select (name = "extension" ):
@@ -73,7 +89,7 @@ def supports_extending(
7389 name: The entry point name to search for
7490
7591 Example:
76- @supports_extending("diracx.resources" , "find_compatible_platforms")
92+ @supports_extending(DiracEntryPoint.RESOURCES , "find_compatible_platforms")
7793 def my_function():
7894 return "default implementation"
7995
0 commit comments