Skip to content

Instantly share code, notes, and snippets.

@paulwinex
Created March 1, 2026 09:07
Show Gist options
  • Select an option

  • Save paulwinex/9147086dc1e066f097b46ea70a7ea595 to your computer and use it in GitHub Desktop.

Select an option

Save paulwinex/9147086dc1e066f097b46ea70a7ea595 to your computer and use it in GitHub Desktop.
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