[+] improve modules support

This commit is contained in:
Siarhei Siniak 2025-05-06 18:43:53 +03:00
parent 9f895d52ee
commit 24e116882d

@ -34,6 +34,12 @@ def toml_load(f: BinaryIO) -> Any:
@dataclasses.dataclass @dataclasses.dataclass
class PyProject: class PyProject:
@dataclasses.dataclass
class Module:
name: str
meson: Optional[pathlib.Path] = None
path: pathlib.Path path: pathlib.Path
dependencies: dict[str, list[str]] dependencies: dict[str, list[str]]
early_features: Optional[list[str]] = None early_features: Optional[list[str]] = None
@ -42,6 +48,10 @@ class PyProject:
runtime_preload: Optional[list[pathlib.Path]] = None runtime_preload: Optional[list[pathlib.Path]] = None
requirements: dict[str, pathlib.Path] = dataclasses.field(default_factory=lambda : dict()) requirements: dict[str, pathlib.Path] = dataclasses.field(default_factory=lambda : dict())
modules: list[Module] = dataclasses.field(
default_factory=lambda : [],
)
def pyproject_load( def pyproject_load(
d: pathlib.Path, d: pathlib.Path,
) -> PyProject: ) -> PyProject:
@ -119,6 +129,30 @@ def pyproject_load(
for k, v in content['tool'][tool_name]['requirements'].items() for k, v in content['tool'][tool_name]['requirements'].items()
} }
if 'modules' in content['tool'][tool_name]:
modules = content['tool'][tool_name]
assert isinstance(modules, list)
# res.modules = []
for o in modules:
assert isinstance(o, dict)
assert 'name' in o and isinstance(o['name'], str)
module = PyProject.Module(
name=o['name'],
)
if 'meson' in o:
assert 'meson' in o and isinstance(o['meson'], str)
module.meson = pathlib.Path(o['meson'])
res.modules.append(module)
res.early_features = content['tool'][tool_name]['early_features']
return res return res
@dataclasses.dataclass @dataclasses.dataclass