Skip to content

Final Types are not Recognized #340

Closed
@dtoniolo

Description

@dtoniolo
  • cattrs version: 22.2.0
  • Python version: 3.10.9
  • Operating System: Linux

Description

Hi, first of all thanks for the amazing work, I've recently begun using both attrs and cattrs and I find them very useful and elegant.

I'm trying to structure some custom classes and all of my type annotations are recognized correctly, except for those using typing.Final.

What I Did

Here's a minmum example to reproduce the issue:

from typing import Final
from attrs import frozen
import cattrs

@frozen
class Foo:
    a: Final[float]

cattrs.structure({"a": 1}, Foo)

Running this code results in a ClassValidationError with one sub-exception: a StructureHandlerNotFoundError which says "Unsupported type: Final[float]. Register a structure hook for it.".

Pitch

Final is one of the most basic type annotations in Python. Although I'm not familiar at all with cattrs internals, it shouldn't be too hard to add support for this type hint, as Final attributes should be structured and unstructured in the same way as their non-Finalcounterparts.

A Note About Frozen

attrs provides a frozen attribute (and I'm using that), but it's not the same thing. frozen operates at runtime, while Final can also be used during static analysis.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions