Created
March 1, 2026 09:07
-
-
Save paulwinex/9147086dc1e066f097b46ea70a7ea595 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from dataclasses import dataclass | |
| from enum import StrEnum, auto, Enum | |
| from pydantic import BaseModel, ConfigDict | |
| ### StrEnum ###################################### | |
| class Status1(StrEnum): | |
| OK = auto() # with auto value | |
| ERR = auto() | |
| class StatSchema1(BaseModel): | |
| model_config = ConfigDict(from_attributes=True) | |
| name: str | |
| status: Status1 | |
| @dataclass | |
| class Entity1: | |
| name: str | |
| status: Status1 | |
| e1 = Entity1(name='test', status=Status1.OK) | |
| print(StatSchema1.model_validate(e1).model_dump(mode='json')) | |
| # {'name': 'test', 'status': 'ok'} <- good | |
| ### str + Enum ###################################### | |
| class Status2(str, Enum): | |
| OK = auto() | |
| ERR = auto() | |
| class StatSchema2(BaseModel): | |
| model_config = ConfigDict(from_attributes=True) | |
| name: str | |
| status: Status2 | |
| @dataclass | |
| class Entity2: | |
| name: str | |
| status: Status2 | |
| e2 = Entity2(name='test', status=Status2.OK) | |
| print(StatSchema2.model_validate(e2).model_dump(mode='json')) | |
| # {'name': 'test', 'status': '1'} <- wrong value with auto()! | |
| ### Enum #################################### | |
| class Status3(Enum): | |
| OK = 'ok' # no auto() | |
| ERR = 'err' | |
| class StatSchema3(BaseModel): | |
| model_config = ConfigDict(from_attributes=True) | |
| name: str | |
| status: Status3 | |
| @dataclass | |
| class Entity3: | |
| name: str | |
| status: Status3 | |
| e3 = Entity3(name='test', status=Status3.OK) | |
| print(StatSchema3.model_validate(e3).model_dump(mode='json')) | |
| # {'name': 'test', 'status': 'ok'} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment