PydanticのFieldクラスのdeprecated

きっかけ

  • 将来消す可能性がある変数には、 Field(deprecated=True) をつけておいてほしいと言われた
  • イメージとしてはこんな感じ
from pydantic import BaseModel, Field
from typing import Optional

class User(BaseModel):
    id :int
    name: str
    old_field: Optional[str] = Field(deprecated=True) <- これ
    new_field: str
  • deprecated って何と思ったので調べてみた

結論

  • 2021.6現在まだ、 pydantic には実装されていないので、Field(deprecated=True) をつけても無視される(つけたところで何も変わらない)
  • pydanticField クラスはこんな感じで無視されるようになっている

samuelcolvin/pydantic

  • こちらの方がissueで将来的に追加して欲しい機能としてチケットをあげている

Add deprecated marker for fields in a model · Issue #2255 · samuelcolvin/pydantic

有効になるとどうなるのか?

  • ↑のissueによると、deprecated=True をつけると、つけられたフィールドは将来的に削除される可能性があるので、使わないでね みたいなwarningメッセージみたいなものが出るようになるらしい
(原文)
Pydantic Fields should have a boolean option deprecated (default False) which can be used to mark deprecated fields.
Pydantic plugin for Pycharm can also use this field to see if the field should be used any longer, 
and show code hints if someone is trying to interact with deprecated fields.