diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d0e3c6f..eb946f0 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -7,11 +7,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: - node-version: 16 + python-version: 3.12 + - uses: actions/setup-node@v4 + with: + node-version: 18 - run: npm install -g @mermaid-js/mermaid-cli diff --git a/CHANGES.md b/CHANGES.md index 2235088..e901f17 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -36,6 +36,8 @@ - Use `pathlib.Path` instead of `os.path`. +- Use importlib.metadata to load entrypoints. + ## 1.0a3 (2024-02-06) - Add `typecheck` target and use it for mypy instead of `check` target. diff --git a/pyproject.toml b/pyproject.toml index feb9b47..099414a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,10 +29,6 @@ dependencies = [ dynamic = ["readme"] [project.optional-dependencies] -mypy = [ - "types-setuptools", - "types-pkg-resources", -] docs = ["Sphinx", "sphinxcontrib-mermaid"] test = ["zope.testrunner"] diff --git a/src/mxmake/topics.py b/src/mxmake/topics.py index 758a4f0..14ac1bf 100644 --- a/src/mxmake/topics.py +++ b/src/mxmake/topics.py @@ -1,7 +1,7 @@ from collections import Counter from dataclasses import dataclass +from importlib.metadata import entry_points from pathlib import Path -from pkg_resources import iter_entry_points import configparser import functools @@ -10,6 +10,15 @@ import typing +try: + # do we have Python 3.12+ + from importlib.metadata import EntryPoints # type: ignore # noqa: F401 + + HAS_IMPORTLIB_ENTRYPOINTS = True +except ImportError: + HAS_IMPORTLIB_ENTRYPOINTS = False + + @dataclass class Setting: name: str @@ -165,7 +174,14 @@ def domain(self, name: str) -> typing.Optional[Domain]: @functools.lru_cache(maxsize=4096) def load_topics() -> typing.List[Topic]: - return [ep.load() for ep in iter_entry_points("mxmake.topics")] + if HAS_IMPORTLIB_ENTRYPOINTS: + topics_eps = entry_points(group="mxmake.topics") # type: ignore + else: + eps = entry_points() + if "mxmake.topics" not in eps: + return [] + topics_eps = eps["mxmake.topics"] # type: ignore + return [ep.load() for ep in topics_eps] # type: ignore def get_topic(name: str) -> Topic: