You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I tried to mix cattrs.strategies.configure_tagged_union with a converter configured with forbid_extra_keys=True. Ideally this would work out of the box — structuring would remove the _type key before structuring the specific union member. Failing that this should be mentioned in the docs.
What I Did
Given tagged_union.py:
importattrsfromcattrsimportConverterfromcattrs.strategiesimportconfigure_tagged_union@attrs.defineclassA:
pass@attrs.defineclassB:
passc=Converter(forbid_extra_keys=True)
configure_tagged_union(A|B, c)
data=c.unstructure(A(), A|B)
print(data)
c.structure(data, A|B)
I get an exception because of the _type keys that the tagged union strategy injects:
❯ python tagged_union.py
{'_type': 'A'}
+ Exception Group Traceback (most recent call last):
| File ".../tagged_union.py", line 21, in <module>
| c.structure(data, A | B)
| File ".../venv/lib/python3.10/site-packages/cattrs/converters.py", line 334, in structure
| return self._structure_func.dispatch(cl)(obj, cl)
| File ".../venv/lib/python3.10/site-packages/cattrs/converters.py", line 651, in _structure_union
| return handler(obj, union)
| File ".../venv/lib/python3.10/site-packages/cattrs/strategies/_unions.py", line 86, in structure_tagged_union
| return _tag_to_cl[val[_tag_name]](val)
| File ".../venv/lib/python3.10/site-packages/cattrs/strategies/_unions.py", line 52, in structure_union_member
| return _h(val, _cl)
| File "<cattrs generated structure __main__.A>", line 7, in structure_A
| if errors: raise __c_cve('While structuring ' + 'A', errors, __cl)
| cattrs.errors.ClassValidationError: While structuring A (1 sub-exception)
+-+---------------- 1 ----------------
| cattrs.errors.ForbiddenExtraKeysError: Extra fields in constructor for A: _type
+------------------------------------
The text was updated successfully, but these errors were encountered:
Description
I tried to mix
cattrs.strategies.configure_tagged_union
with a converter configured withforbid_extra_keys=True
. Ideally this would work out of the box — structuring would remove the_type
key before structuring the specific union member. Failing that this should be mentioned in the docs.What I Did
Given
tagged_union.py
:I get an exception because of the
_type
keys that the tagged union strategy injects:The text was updated successfully, but these errors were encountered: