36
36
class DataclassInstance (Protocol ):
37
37
__dataclass_fields__ : T .ClassVar [dict [str , dataclasses .Field [T .Any ]]]
38
38
39
- _UnknownKeysT = T .TypeVar ('_UnknownKeysT' , manifest .FixedPackage ,
40
- manifest .FixedDependency , manifest .FixedLibTarget ,
41
- manifest .FixedBuildTarget )
42
-
43
39
_R = T .TypeVar ('_R' , bound = 'raw._BaseBuildTarget' )
44
40
45
41
@@ -61,19 +57,7 @@ def fixup_meson_varname(name: str) -> str:
61
57
return name .replace ('-' , '_' )
62
58
63
59
64
- # Pylance can figure out that these do not, in fact, overlap, but mypy can't
65
- @T .overload
66
- def _fixup_raw_mappings (d : raw .BuildTarget ) -> manifest .FixedBuildTarget : ... # type: ignore
67
-
68
- @T .overload
69
- def _fixup_raw_mappings (d : raw .LibTarget ) -> manifest .FixedLibTarget : ... # type: ignore
70
-
71
- @T .overload
72
- def _fixup_raw_mappings (d : raw .Dependency ) -> manifest .FixedDependency : ...
73
-
74
- def _fixup_raw_mappings (d : T .Union [raw .BuildTarget , raw .LibTarget , raw .Dependency ]
75
- ) -> T .Union [manifest .FixedBuildTarget , manifest .FixedLibTarget ,
76
- manifest .FixedDependency ]:
60
+ def _fixup_raw_mappings (d : T .Mapping [str , T .Any ], convert_version : bool = True ) -> T .MutableMapping [str , T .Any ]:
77
61
"""Fixup raw cargo mappings to ones more suitable for python to consume.
78
62
79
63
This does the following:
@@ -86,14 +70,14 @@ def _fixup_raw_mappings(d: T.Union[raw.BuildTarget, raw.LibTarget, raw.Dependenc
86
70
:return: the fixed string
87
71
"""
88
72
raw = {fixup_meson_varname (k ): v for k , v in d .items ()}
89
- if 'version' in raw :
73
+ if convert_version and 'version' in raw :
90
74
assert isinstance (raw ['version' ], str ), 'for mypy'
91
75
raw ['version' ] = version .convert (raw ['version' ])
92
- return T . cast ( 'T.Union[manifest.FixedBuildTarget, manifest.FixedLibTarget, manifest.FixedDependency]' , raw )
76
+ return raw
93
77
94
78
95
- def _handle_unknown_keys (data : _UnknownKeysT , cls : T .Union [DataclassInstance , T .Type [DataclassInstance ]],
96
- msg : str ) -> _UnknownKeysT :
79
+ def _handle_unknown_keys (data : T . MutableMapping [ str , T . Any ] , cls : T .Union [DataclassInstance , T .Type [DataclassInstance ]],
80
+ msg : str ) -> T . MutableMapping [ str , T . Any ] :
97
81
"""Remove and warn on keys that are coming from cargo, but are unknown to
98
82
our representations.
99
83
@@ -111,8 +95,7 @@ def _handle_unknown_keys(data: _UnknownKeysT, cls: T.Union[DataclassInstance, T.
111
95
mlog .warning (msg , 'has unexpected keys' , '"{}".' .format (', ' .join (sorted (unexpected ))),
112
96
_EXTRA_KEYS_WARNING )
113
97
for k in unexpected :
114
- # Mypy and Pyright can't prove that this is okay
115
- del data [k ] # type: ignore[misc]
98
+ del data [k ]
116
99
return data
117
100
118
101
@@ -156,8 +139,7 @@ def __post_init__(self) -> None:
156
139
157
140
@classmethod
158
141
def from_raw (cls , raw : raw .Package ) -> Self :
159
- pkg = T .cast ('manifest.FixedPackage' ,
160
- {fixup_meson_varname (k ): v for k , v in raw .items ()})
142
+ pkg = _fixup_raw_mappings (raw , convert_version = False )
161
143
pkg = _handle_unknown_keys (pkg , cls , f'Package entry { pkg ["name" ]} ' )
162
144
return cls (** pkg )
163
145
0 commit comments