diff --git a/ags/_mapping.py b/ags/_mapping.py index 43cc8be..7cd9201 100644 --- a/ags/_mapping.py +++ b/ags/_mapping.py @@ -357,7 +357,7 @@ def unlower(self, obj, surject): @dataclasses.dataclass class DataClass: cls: type - fields: dict[str, typing.Any] + fields: dict[str, Mapping] def lower(self, obj, inject): if not dataclasses.is_dataclass(obj) or isinstance(obj, type): @@ -371,9 +371,12 @@ def lower(self, obj, inject): def unlower(self, obj, surject): dobj = surject(obj, dict) d = {} - for name, mapping in self.fields.items(): + for name, value in dobj.items(): + mapping = self.fields.get(name) + if mapping is None: + raise ValueError(f"invalid field: {name!r}") with context(f".{name}"): - d[name] = mapping.unlower(dobj[name], surject) + d[name] = mapping.unlower(value, surject) return self.cls(**d)