File: _entry_points.py

package info (click to toggle)
python-can 4.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,372 kB
  • sloc: python: 25,840; makefile: 38; sh: 20
file content (34 lines) | stat: -rw-r--r-- 883 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import importlib
import sys
from dataclasses import dataclass
from importlib.metadata import entry_points
from typing import Any, List


@dataclass
class _EntryPoint:
    key: str
    module_name: str
    class_name: str

    def load(self) -> Any:
        module = importlib.import_module(self.module_name)
        return getattr(module, self.class_name)


# See https://docs.python.org/3/library/importlib.metadata.html#entry-points,
# "Compatibility Note".
if sys.version_info >= (3, 10):

    def read_entry_points(group: str) -> List[_EntryPoint]:
        return [
            _EntryPoint(ep.name, ep.module, ep.attr) for ep in entry_points(group=group)
        ]

else:

    def read_entry_points(group: str) -> List[_EntryPoint]:
        return [
            _EntryPoint(ep.name, *ep.value.split(":", maxsplit=1))
            for ep in entry_points().get(group, [])
        ]