From 6c5c66bbb19cb2dcfdc25da97d4d839eec139db7 Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Wed, 22 Dec 2021 18:13:19 +0000 Subject: [PATCH 1/4] Replace pkg_resources with importlib.metadata --- setup.py | 3 +-- sphinx/registry.py | 13 ++++++++----- sphinx/theming.py | 13 ++++++++----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/setup.py b/setup.py index 8245aacefac..31089da18cd 100644 --- a/setup.py +++ b/setup.py @@ -29,8 +29,8 @@ 'alabaster>=0.7,<0.8', 'imagesize', 'requests>=2.5.0', - 'setuptools', 'packaging', + "importlib-metadata>=4.4; python_version < '3.10'", ] extras_require = { @@ -47,7 +47,6 @@ 'mypy>=0.920', 'docutils-stubs', "types-typed-ast", - "types-pkg_resources", "types-requests", ], 'test': [ diff --git a/sphinx/registry.py b/sphinx/registry.py index 543e5802bb2..cc2db06e598 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -21,7 +21,10 @@ from docutils.parsers import Parser from docutils.parsers.rst import Directive from docutils.transforms import Transform -from pkg_resources import iter_entry_points +try: + from importlib_metadata import entry_points +except ImportError: + from importlib.metadata import entry_points from sphinx.builders import Builder from sphinx.config import Config @@ -143,14 +146,14 @@ def preload_builder(self, app: "Sphinx", name: str) -> None: return if name not in self.builders: - entry_points = iter_entry_points('sphinx.builders', name) + builder_eps = entry_points(group='sphinx.builders') try: - entry_point = next(entry_points) - except StopIteration as exc: + entry_point = builder_eps[name] + except KeyError as exc: raise SphinxError(__('Builder name %s not registered or available' ' through entry point') % name) from exc - self.load_extension(app, entry_point.module_name) + self.load_extension(app, entry_point.module) def create_builder(self, app: "Sphinx", name: str) -> Builder: if name not in self.builders: diff --git a/sphinx/theming.py b/sphinx/theming.py index f5004022d5e..763a657fb86 100644 --- a/sphinx/theming.py +++ b/sphinx/theming.py @@ -16,7 +16,10 @@ from typing import TYPE_CHECKING, Any, Dict, List from zipfile import ZipFile -import pkg_resources +try: # Python < 3.10 (backport) + from importlib_metadata import entry_points +except ImportError: + from importlib.metadata import entry_points from sphinx import package_dir from sphinx.errors import ThemeError @@ -201,12 +204,12 @@ def load_external_theme(self, name: str) -> None: Sphinx refers to ``sphinx_themes`` entry_points. """ # look up for new styled entry_points at first - entry_points = pkg_resources.iter_entry_points('sphinx.html_themes', name) + theme_eps = entry_points(group='sphinx.html_themes') try: - entry_point = next(entry_points) - self.app.registry.load_extension(self.app, entry_point.module_name) + entry_point = theme_eps[name] + self.app.registry.load_extension(self.app, entry_point.module) return - except StopIteration: + except KeyError: pass def find_themes(self, theme_path: str) -> Dict[str, str]: From e257533ea7c9ba15283e1c03bafe56371a56dffc Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Wed, 22 Dec 2021 18:18:22 +0000 Subject: [PATCH 2/4] Add comment about import options --- sphinx/registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/registry.py b/sphinx/registry.py index cc2db06e598..f6dc2771fbb 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -21,7 +21,7 @@ from docutils.parsers import Parser from docutils.parsers.rst import Directive from docutils.transforms import Transform -try: +try: # Python < 3.10 (backport) from importlib_metadata import entry_points except ImportError: from importlib.metadata import entry_points From 71b3e2c822143e1f9657bbd2c3c52180cdc851b4 Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Wed, 22 Dec 2021 18:27:13 +0000 Subject: [PATCH 3/4] Run isort --- sphinx/registry.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sphinx/registry.py b/sphinx/registry.py index f6dc2771fbb..c8c6b8b5a5e 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -21,6 +21,7 @@ from docutils.parsers import Parser from docutils.parsers.rst import Directive from docutils.transforms import Transform + try: # Python < 3.10 (backport) from importlib_metadata import entry_points except ImportError: From c7e34936ffb197988b6dfd74227cb73bad05b345 Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Fri, 24 Dec 2021 18:13:17 +0000 Subject: [PATCH 4/4] Rename variables for clarity --- sphinx/registry.py | 4 ++-- sphinx/theming.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sphinx/registry.py b/sphinx/registry.py index c8c6b8b5a5e..3d70f8d9f02 100644 --- a/sphinx/registry.py +++ b/sphinx/registry.py @@ -147,9 +147,9 @@ def preload_builder(self, app: "Sphinx", name: str) -> None: return if name not in self.builders: - builder_eps = entry_points(group='sphinx.builders') + builder_entry_points = entry_points(group='sphinx.builders') try: - entry_point = builder_eps[name] + entry_point = builder_entry_points[name] except KeyError as exc: raise SphinxError(__('Builder name %s not registered or available' ' through entry point') % name) from exc diff --git a/sphinx/theming.py b/sphinx/theming.py index 763a657fb86..7a002201a0c 100644 --- a/sphinx/theming.py +++ b/sphinx/theming.py @@ -204,9 +204,9 @@ def load_external_theme(self, name: str) -> None: Sphinx refers to ``sphinx_themes`` entry_points. """ # look up for new styled entry_points at first - theme_eps = entry_points(group='sphinx.html_themes') + theme_entry_points = entry_points(group='sphinx.html_themes') try: - entry_point = theme_eps[name] + entry_point = theme_entry_points[name] self.app.registry.load_extension(self.app, entry_point.module) return except KeyError: