Replies: 1 comment 1 reply
pydantic で stdlib dataclass field の metadata alias が使えるpydantic/pydantic#8379 が解決できる。 from dataclasses import dataclass, field
from pydantic import TypeAdapter, ValidationError
@dataclass
class User:
name: str = field(metadata={"alias": "userName"})
ta = TypeAdapter(User)
# -----------------------------------------
# Case: Non-alias validation is not allowed
# -----------------------------------------
try:
ta.validate_json('{"name":"John Doe"}')
raise AssertionError
except ValidationError as e:
print(e)
# 1 validation error for User
# userName
# Field required [type=missing, input_value={'name': 'John Doe'}, input_type=dict]
# For further information visit https://errors.pydantic.dev/2.10/v/missing
# ---------------------------------
# Case: Alias validation is allowed
# ---------------------------------
instance = ta.validate_json('{"userName":"John Doe"}')
print(instance)
# User(name='John Doe')
# ------------------------------------
# Case: Alias serialization is allowed
# ------------------------------------
data = ta.dump_json(instance, by_alias=True)
print(data)
# b'{"userName":"John Doe"}'
# ----------------------------------------
# Case: Non-alias serialization is allowed
# ----------------------------------------
data = ta.dump_json(instance)
print(data)
# b'{"name":"John Doe"}'
# ---------------------------------------------
# Case: Alias class construction is not allowed
# ---------------------------------------------
try:
User(userName="John Doe") # typechecker: No parameter named "userName"
raise AssertionError
except TypeError as e:
print(e)
# User.__init__() got an unexpected keyword argument 'userName'
# ---------------------------------------------
# Case: Non-alias class construction is allowed
# ---------------------------------------------
print(User(name="John Doe"))
# User(name='John Doe') |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Today I Learned ...
All reactions