From c7d7f790c9104186b06d70560382f3613fdc48f5 Mon Sep 17 00:00:00 2001 From: Gertjan van Zwieten Date: Wed, 18 Mar 2026 13:45:19 +0100 Subject: [PATCH] Improve DataClass mapping This patch modifies DataClass.unlower to allow for missing fields that have default values, and to raise an value error when fields are specified that are no member of the dataclass. --- ags/_mapping.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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)