Skip to content

Commit 15dca67

Browse files
fix #1131: allow self-build without importlib_metadata
1 parent cd5c8a0 commit 15dca67

File tree

5 files changed

+32
-10
lines changed

5 files changed

+32
-10
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## v8.3.1
4+
5+
### Fixed
6+
7+
- fixed #1131: allow self-build without importlib_metadata avaliable on python3.9
8+
39
## v8.3.0
410

511
### Fixed

pyproject.toml

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ build-backend = "_own_version_helper:build_meta"
55
requires = [
66
"setuptools>=61",
77
'tomli<=2.0.2; python_version < "3.11"',
8-
'importlib-metadata>=4.6; python_version < "3.10"',
98
]
109
backend-path = [
1110
".",

src/setuptools_scm/_entrypoints.py

+19-6
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,33 @@
1212
from . import _log
1313
from . import version
1414

15+
__all__ = [
16+
"entry_points",
17+
"im",
18+
]
1519
if TYPE_CHECKING:
1620
from . import _types as _t
1721
from ._config import Configuration
1822
from ._config import ParseFunction
1923

20-
if sys.version_info[:2] < (3, 10):
21-
from importlib_metadata import EntryPoint as EntryPoint
22-
from importlib_metadata import entry_points as entry_points
23-
else:
24-
from importlib.metadata import EntryPoint as EntryPoint
25-
from importlib.metadata import entry_points as entry_points
24+
if sys.version_info[:2] < (3, 10):
25+
import importlib_metadata as im
26+
else:
27+
from importlib import metadata as im
2628

2729

2830
log = _log.log.getChild("entrypoints")
2931

3032

33+
def entry_points(**kw: Any) -> im.EntryPoints:
34+
if sys.version_info[:2] < (3, 10):
35+
import importlib_metadata as im
36+
else:
37+
import importlib.metadata as im
38+
39+
return im.entry_points(**kw)
40+
41+
3142
def version_from_entrypoint(
3243
config: Configuration, *, entrypoint: str, root: _t.PathT
3344
) -> version.ScmVersion | None:
@@ -52,6 +63,8 @@ def _get_ep(group: str, name: str) -> Any | None:
5263

5364
def _get_from_object_reference_str(path: str, group: str) -> Any | None:
5465
# todo: remove for importlib native spelling
66+
from importlib.metadata import EntryPoint # hack
67+
5568
ep = EntryPoint(path, path, group)
5669
try:
5770
return ep.load()

src/setuptools_scm/_file_finders/__init__.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
from .. import _log
99
from .. import _types as _t
10-
from .._entrypoints import EntryPoint
1110
from .._entrypoints import entry_points
1211
from .pathtools import norm_real
1312

@@ -102,7 +101,7 @@ def is_toplevel_acceptable(toplevel: str | None) -> TypeGuard[str]:
102101

103102

104103
def find_files(path: _t.PathT = "") -> list[str]:
105-
eps: list[EntryPoint] = [
104+
eps = [
106105
*entry_points(group="setuptools_scm.files_command"),
107106
*entry_points(group="setuptools_scm.files_command_fallback"),
108107
]

src/setuptools_scm/discover.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44

55
from pathlib import Path
6+
from typing import TYPE_CHECKING
67
from typing import Iterable
78
from typing import Iterator
89

@@ -11,6 +12,10 @@
1112
from . import _types as _t
1213
from ._config import Configuration
1314

15+
if TYPE_CHECKING:
16+
from ._entrypoints import im
17+
18+
1419
log = _log.log.getChild("discover")
1520

1621

@@ -48,7 +53,7 @@ def match_entrypoint(root: _t.PathT, name: str) -> bool:
4853

4954
def iter_matching_entrypoints(
5055
root: _t.PathT, entrypoint: str, config: Configuration
51-
) -> Iterable[_entrypoints.EntryPoint]:
56+
) -> Iterable[im.EntryPoint]:
5257
"""
5358
Consider different entry-points in ``root`` and optionally its parents.
5459
:param root: File path.

0 commit comments

Comments
 (0)