-
-
Notifications
You must be signed in to change notification settings - Fork 113
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Subclass disambiguation for nested structures. #535
Comments
Another thing I tried was: _cattr_converter.register_unstructure_hook(
Toy,
lambda o: {"_type": type(o).__name__, **_cattr_converter.unstructure(o)},
) but that caused an infinite loop. |
Hi, sorry for the delayed response, I was on vacation. These strategies are somewhat stateful since a lot of them do some of the work at configuration time, rather than structure/unstructure time. This means the order in which they are applied matters. I tried switching the order of the hooks here: c = cattr.Converter()
include_subclasses(Toy, c, union_strategy=configure_tagged_union)
include_subclasses(ToyBox, c, union_strategy=configure_tagged_union) Doing this, the output now is: {'_type': 'SmallToyBox',
'contents': [{'_type': 'Lego', 'name': 'space'},
{'_type': 'Lego', 'name': 'house'},
{'_type': 'Train', 'name': 'stream'},
{'_type': 'Train', 'name': 'electric'}],
'material': 'wood'} That that look like what you were going for? |
Yes! Thank you! I hope you had a good holiday :-) Can you explain why/how it works by registering Also, how might I include the Thanks again, Tin! |
I'm using attrs 23.2.0, if that matters.
Description
Hi! I am having trouble adding the special
_type
key to the unstructured data to inform the structurer how to deal with subtypes. It seems to work for the top level structure, but not a second level structure that also has subtypes.Any help would be appreciated :-)
What I Did
This is some example code:
And I get the following:
which, as you can see, is not including the
_type
argument in the nested data structureToy
that needs to deal with subtypes.A possibly related issue is that I want to be able to string together multiple hooks together. Specifically I want to also include this:
hook = make_dict_unstructure_fn(Toy, c, _cattrs_omit_if_default=True)
in addition to supporting subclasses.How can I do that?
Thanks!
The text was updated successfully, but these errors were encountered: