😸
Pydanticで常にFieldのValidationを行う
Pydantic とは
Data validation and settings management using python type annotations.
pydantic enforces type hints at runtime, and provides user friendly errors when data is invalid.
Define how data should be in pure, canonical python; validate it with pydantic
Pydanticは、Pythonの型アノテーションを利用し、実行時における型ヒントを提供したり、データのバリデーションエラー設定を簡単に提供してくれるためのライブラリです。
基本的な利用法
これらは割愛。
この記事に備忘録がてら書いておきたいのは
Modelを定義し、インスタンス化した後でもValidationを動作させる方法
デフォルト動作
from pydantic import BaseModel, Field,validator
from typing import Optional
class DemoModel(BaseModel):
name: int
addr: int
hoge = DemoModel(name=1, addr=2)
print(hoge)
hoge.name = "str"
実はこれ動作してしまう。
name=1 addr=2
このままでは、ReturnValueの箱を作って置いて
後から順に値を入力して最後に返す。みたいな使い方をしようとしたときに使えない。
後から値を更新する際にもValidationがかかるようにするにはどうするか?
改定案
以下を追加する。
from pydantic import BaseModel, Field,validator
from typing import Optional
class DemoModel(BaseModel):
name: int
addr: int
class Config:
validate_assignment = True
hoge = DemoModel(name=1, addr=2)
print(hoge)
hoge.name = "str"
---------------------------------------------------------------------------
ValidationError Traceback (most recent call last)
<ipython-input-18-07aede28b224> in <module>
12 hoge = DemoModel(name=1, addr=2)
13 print(hoge)
---> 14 hoge.name = "str"
/usr/local/lib/python3.8/dist-packages/pydantic/main.cpython-38-x86_64-linux-gnu.so in pydantic.main.BaseModel.__setattr__()
ValidationError: 1 validation error for DemoModel
name
value is not a valid integer (type=type_error.integer)
このように無事にエラーが出るようになった。
Discussion