diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-06-03 23:28:08 +0200 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-08-01 07:55:49 -0700 |
| commit | 09e547fcf289463c5163d2b0fe17a2e2ddf92a33 (patch) | |
| tree | 11c1ab2d7de4d1b41514b0ea75db960033325107 | |
| parent | e88ab40b1cb9b77aa2f0d89fee860f2e7ba402fc (diff) | |
| download | meson-09e547fcf289463c5163d2b0fe17a2e2ddf92a33.tar.gz | |
cargo: remove Fixed* dictionaries
Create the dataclasses directly from the raw dictionaries, without an intermediate
step.
Extracted from a patch by Xavier Classens.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| -rw-r--r-- | mesonbuild/cargo/interpreter.py | 32 | ||||
| -rw-r--r-- | mesonbuild/cargo/manifest.py | 74 |
2 files changed, 7 insertions, 99 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py index 8805980a0..9699d1d2a 100644 --- a/mesonbuild/cargo/interpreter.py +++ b/mesonbuild/cargo/interpreter.py @@ -36,10 +36,6 @@ if T.TYPE_CHECKING: class DataclassInstance(Protocol): __dataclass_fields__: T.ClassVar[dict[str, dataclasses.Field[T.Any]]] - _UnknownKeysT = T.TypeVar('_UnknownKeysT', manifest.FixedPackage, - manifest.FixedDependency, manifest.FixedLibTarget, - manifest.FixedBuildTarget) - _R = T.TypeVar('_R', bound='raw._BaseBuildTarget') @@ -61,19 +57,7 @@ def fixup_meson_varname(name: str) -> str: return name.replace('-', '_') -# Pylance can figure out that these do not, in fact, overlap, but mypy can't -@T.overload -def _fixup_raw_mappings(d: raw.BuildTarget) -> manifest.FixedBuildTarget: ... # type: ignore - -@T.overload -def _fixup_raw_mappings(d: raw.LibTarget) -> manifest.FixedLibTarget: ... # type: ignore - -@T.overload -def _fixup_raw_mappings(d: raw.Dependency) -> manifest.FixedDependency: ... - -def _fixup_raw_mappings(d: T.Union[raw.BuildTarget, raw.LibTarget, raw.Dependency] - ) -> T.Union[manifest.FixedBuildTarget, manifest.FixedLibTarget, - manifest.FixedDependency]: +def _fixup_raw_mappings(d: T.Mapping[str, T.Any], convert_version: bool = True) -> T.MutableMapping[str, T.Any]: """Fixup raw cargo mappings to ones more suitable for python to consume. This does the following: @@ -86,14 +70,14 @@ def _fixup_raw_mappings(d: T.Union[raw.BuildTarget, raw.LibTarget, raw.Dependenc :return: the fixed string """ raw = {fixup_meson_varname(k): v for k, v in d.items()} - if 'version' in raw: + if convert_version and 'version' in raw: assert isinstance(raw['version'], str), 'for mypy' raw['version'] = version.convert(raw['version']) - return T.cast('T.Union[manifest.FixedBuildTarget, manifest.FixedLibTarget, manifest.FixedDependency]', raw) + return raw -def _handle_unknown_keys(data: _UnknownKeysT, cls: T.Union[DataclassInstance, T.Type[DataclassInstance]], - msg: str) -> _UnknownKeysT: +def _handle_unknown_keys(data: T.MutableMapping[str, T.Any], cls: T.Union[DataclassInstance, T.Type[DataclassInstance]], + msg: str) -> T.MutableMapping[str, T.Any]: """Remove and warn on keys that are coming from cargo, but are unknown to our representations. @@ -111,8 +95,7 @@ def _handle_unknown_keys(data: _UnknownKeysT, cls: T.Union[DataclassInstance, T. mlog.warning(msg, 'has unexpected keys', '"{}".'.format(', '.join(sorted(unexpected))), _EXTRA_KEYS_WARNING) for k in unexpected: - # Mypy and Pyright can't prove that this is okay - del data[k] # type: ignore[misc] + del data[k] return data @@ -156,8 +139,7 @@ class Package: @classmethod def from_raw(cls, raw: raw.Package) -> Self: - pkg = T.cast('manifest.FixedPackage', - {fixup_meson_varname(k): v for k, v in raw.items()}) + pkg = _fixup_raw_mappings(raw, convert_version=False) pkg = _handle_unknown_keys(pkg, cls, f'Package entry {pkg["name"]}') return cls(**pkg) diff --git a/mesonbuild/cargo/manifest.py b/mesonbuild/cargo/manifest.py index 753979608..6f9f77c2f 100644 --- a/mesonbuild/cargo/manifest.py +++ b/mesonbuild/cargo/manifest.py @@ -4,77 +4,3 @@ """Type definitions for cargo manifest files.""" from __future__ import annotations -import typing as T - -from typing_extensions import TypedDict, Required - -from .raw import EDITION, CRATE_TYPE - -class FixedPackage(TypedDict, total=False): - - """A description of the Package Dictionary, fixed up.""" - - name: Required[str] - version: Required[str] - authors: T.List[str] - edition: EDITION - rust_version: str - description: str - readme: str - license: str - license_file: str - keywords: T.List[str] - categories: T.List[str] - workspace: str - build: str - links: str - include: T.List[str] - exclude: T.List[str] - publish: bool - metadata: T.Dict[str, T.Dict[str, str]] - default_run: str - autolib: bool - autobins: bool - autoexamples: bool - autotests: bool - autobenches: bool - - -class FixedDependency(TypedDict, total=False): - - """An entry in the *dependencies sections, fixed up.""" - - version: T.List[str] - registry: str - git: str - branch: str - rev: str - path: str - optional: bool - package: str - default_features: bool - features: T.List[str] - - -class _BaseFixedBuildTarget(TypedDict, total=False): - path: str - test: bool - doctest: bool - bench: bool - doc: bool - plugin: bool - harness: bool - edition: EDITION - crate_type: T.List[CRATE_TYPE] - required_features: T.List[str] - - -class FixedBuildTarget(_BaseFixedBuildTarget, total=False): - - name: Required[str] - - -class FixedLibTarget(_BaseFixedBuildTarget, total=False): - - name: str - proc_macro: bool |
