Skip to content

Unstructuring subclasses #354

Open
Open
@AdrianSosic

Description

@AdrianSosic
  • cattrs version: 22.2.0
  • Python version: 3.8
  • Operating System: macOS

Description

Hi @Tinche, I am currently working on several projects where I need to (un)structure objects of subclasses of a common base class. Digging through the documentation and also some issues here on Github, I eventually found your example how this can be done with the current version of cattrs. However, I think I have found two problems (bugs? unsupported features?) with the approach and would love to hear your opinion.

But before I go into the details, a quick question upfront: Is this going to remain the "recommended" approach to unstructure objects from a class hierarchy? I am asking because I also saw #312 which seems about to be merged but I am not entirely sure how/if it's going to replace your described method.

So here are now the two issues I noticed:

  1. With the version described above, your example no longer seems to work. In order to get it running, one now needs to explicitly set slotted=False. I guess this is probably due to due the changes defaults (see also Weird output while structuring unions with custom disambiguation function #267)? On the other hand, I wonder why your example then originally worked because it already uses define instead of attr.s?
  2. Still, I struggled a lot to get it running in my own code until I finally found the problem: The approach crashes when using from __future__ import annotations and throws the following exception:
Traceback (most recent call last):
  File "/usr/local/Caskroom/mambaforge/base/envs/baybe/lib/python3.8/site-packages/cattrs/converters.py", line 461, in _structure_attribute
    return self._structure_func.dispatch(type_)(value, type_)
  File "/usr/local/Caskroom/mambaforge/base/envs/baybe/lib/python3.8/site-packages/cattrs/converters.py", line 377, in _structure_error
    raise StructureHandlerNotFoundError(msg, type_=cl)
cattrs.errors.StructureHandlerNotFoundError: Unsupported type: 'int'. Register a structure hook for it.

Is the second issue related to #215 or is this a bug?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions