Skip to content

Commit d5e70dc

Browse files
committed
tests: add tests for regex and template
Signed-off-by: Henry Schreiner <[email protected]>
1 parent 69e8424 commit d5e70dc

File tree

5 files changed

+17
-21
lines changed

5 files changed

+17
-21
lines changed

src/scikit_build_core/build/metadata.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
extras_build_system,
1414
extras_top_level,
1515
)
16-
from ..builder._load_provider import load_dynamic_metadata
16+
from ..builder._load_provider import process_dynamic_metadata
1717

1818
if TYPE_CHECKING:
1919
from collections.abc import Mapping
@@ -41,7 +41,7 @@ def get_standard_metadata(
4141
new_pyproject_dict = copy.deepcopy(dict(pyproject_dict))
4242

4343
# Handle any dynamic metadata
44-
new_pyproject_dict["project"] = load_dynamic_metadata(
44+
new_pyproject_dict["project"] = process_dynamic_metadata(
4545
new_pyproject_dict["project"], settings.metadata
4646
)
4747

src/scikit_build_core/builder/_load_provider.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from ..metadata import _ALL_FIELDS
1919

20-
__all__ = ["load_dynamic_metadata", "load_provider"]
20+
__all__ = ["load_provider", "process_dynamic_metadata"]
2121

2222

2323
def __dir__() -> list[str]:
@@ -30,7 +30,7 @@ def dynamic_metadata(
3030
self,
3131
fields: Iterable[str],
3232
settings: dict[str, Any],
33-
metadata: Mapping[str, Any],
33+
project: Mapping[str, Any],
3434
) -> dict[str, Any]: ...
3535

3636

@@ -43,9 +43,7 @@ def get_requires_for_dynamic_metadata(
4343

4444
@runtime_checkable
4545
class DynamicMetadataWheelProtocol(DynamicMetadataProtocol, Protocol):
46-
def dynamic_wheel(
47-
self, field: str, settings: Mapping[str, Any] | None = None
48-
) -> bool: ...
46+
def dynamic_wheel(self, field: str, settings: Mapping[str, Any]) -> bool: ...
4947

5048

5149
DMProtocols = Union[
@@ -75,7 +73,7 @@ def load_provider(
7573

7674
def _load_dynamic_metadata(
7775
metadata: Mapping[str, Mapping[str, str]],
78-
) -> Generator[tuple[str, DMProtocols, dict[str, str]], None, None]:
76+
) -> Generator[tuple[str, DMProtocols, dict[str, Any]], None, None]:
7977
for field, orig_config in metadata.items():
8078
if "provider" not in orig_config:
8179
msg = "Missing provider in dynamic metadata"
@@ -92,7 +90,7 @@ def _load_dynamic_metadata(
9290

9391

9492
@dataclasses.dataclass
95-
class DynamicSettings(StrMapping):
93+
class DynamicPyProject(StrMapping):
9694
settings: dict[str, dict[str, Any]]
9795
project: dict[str, Any]
9896
providers: dict[str, DMProtocols]
@@ -117,9 +115,7 @@ def __getitem__(self, key: str) -> Any:
117115
key, self.settings[key]
118116
)
119117
else:
120-
self.project[key] = provider.dynamic_metadata(
121-
key, self.settings[key], self.project
122-
)
118+
self.project[key] = provider.dynamic_metadata(key, self.settings[key], self)
123119
self.project["dynamic"].remove(key)
124120

125121
return self.project[key]
@@ -138,14 +134,14 @@ def __contains__(self, key: object) -> bool:
138134
return key in self.project or key in self.providers
139135

140136

141-
def load_dynamic_metadata(
137+
def process_dynamic_metadata(
142138
project: Mapping[str, Any],
143-
metadata: Mapping[str, Mapping[str, str]],
139+
metadata: Mapping[str, Mapping[str, Any]],
144140
) -> dict[str, Any]:
145141
initial = {f: (p, c) for (f, p, c) in _load_dynamic_metadata(metadata)}
146142

147-
settings = DynamicSettings(
148-
settings={f: c for f, (v, c) in initial.items()},
143+
settings = DynamicPyProject(
144+
settings={f: c for f, (_, c) in initial.items()},
149145
project=dict(project),
150146
providers={k: v for k, (v, _) in initial.items()},
151147
)

src/scikit_build_core/metadata/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def _process_dynamic_metadata(field: str, action: Callable[[str], str], result:
6868
msg = f"Field {field!r} must be a list of strings"
6969
raise RuntimeError(msg)
7070
return [action(r) for r in result] # type: ignore[return-value]
71-
if field in _DICT_STR_FIELDS:
71+
if field in _DICT_STR_FIELDS | {"readme"}:
7272
if not isinstance(result, dict) or not all(
7373
isinstance(v, str) for v in result.values()
7474
):

src/scikit_build_core/metadata/fancy_pypi_readme.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def __dir__() -> list[str]:
2121
def dynamic_metadata(
2222
field: str,
2323
settings: dict[str, list[str] | str],
24-
metadata: Mapping[str, Any],
24+
project: Mapping[str, Any],
2525
) -> str | dict[str, str]:
2626
from hatch_fancy_pypi_readme._builder import build_text
2727
from hatch_fancy_pypi_readme._config import load_and_validate_config
@@ -45,7 +45,7 @@ def dynamic_metadata(
4545
try:
4646
# We don't have access to the version at this point
4747
text = build_text(
48-
config.fragments, config.substitutions, version=metadata["version"]
48+
config.fragments, config.substitutions, version=project["version"]
4949
)
5050
except TypeError:
5151
# Version 23.2.0 and before don't have a version field

src/scikit_build_core/metadata/template.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def __dir__() -> list[str]:
2020
def dynamic_metadata(
2121
field: str,
2222
settings: Mapping[str, str | list[str] | dict[str, str] | dict[str, list[str]]],
23-
metadata: Mapping[str, Any],
23+
project: Mapping[str, Any],
2424
) -> str | list[str] | dict[str, str] | dict[str, list[str]]:
2525
if settings.keys() > KEYS:
2626
msg = f"Only {KEYS} settings allowed by this plugin"
@@ -34,6 +34,6 @@ def dynamic_metadata(
3434

3535
return _process_dynamic_metadata(
3636
field,
37-
lambda r: r.format(project=metadata),
37+
lambda r: r.format(project=project),
3838
result,
3939
)

0 commit comments

Comments
 (0)