$30 off During Our Annual Pro Sale. View Details »

pydanticの紹介

mizzsugar
February 13, 2020

 pydanticの紹介

mizzsugar

February 13, 2020
Tweet

More Decks by mizzsugar

Other Decks in Programming

Transcript

  1. 今いち推しのバリデーター
    pydanticの紹介
    20200213 Stapy
    @mizzsugar0424

    View Slide

  2. お前、誰よ
    ● Twitter : @mizzsugar0425
    ● 仕事:データ分析基盤の開発、運用
    ○ GCP, BigQuery
    ● 前の仕事はDjango。今でも追いかけてる。
    ● 趣味:PythonでWeb開発
    ○ Pyramid, Nuxt.js, TypeScript, PostgreSQL
    ● 2/29にPyCon mini Shizuokaに登壇予定
    ○ unittest.mockの話です
    ● ゆるく転職活動
    ○ 面接中に水をガブガブ飲む人間でも良いという企業様、ぜひ

    View Slide

  3. # type: ignore

    View Slide

  4. それは、
    静的型付けとPythonの両方を
    愛する者たちを苦しめる
    コメント

    View Slide

  5. 従来のバリデーターだとTypingのサポートがない
    import colander
    class Item(colander.MappingSchema): # type: ignore
    name = colander.SchemaNode(colander.String())
    price = colander.SchemaNode(colander.Integer())

    View Slide

  6. Typingサポートのあるバリデーター、pydantic
    ● 2017年爆誕
    ● Typingサポートあり
    ● Python製WebフレームワークFastAPIでも紹介されている
    ● mypy pluginあり
    https://pydantic-docs.helpmanual.io/

    View Slide

  7. 基本的な書き方
    import pydantic
    class Item(pydantic.BaseModel):
    name: str
    price: int

    View Slide

  8. 基本的な書き方
    external_data = {
    'name': 'chocolate',
    'price': 500
    }
    try:
    item = Item(**external_data)
    except ValueError e:
    e.json() # エラー内容が返される

    View Slide

  9. まるでオブジェクトを扱うよう
    class User(pydantic.BaseModel):
    name: str
    birthday: datetime.date
    friends: List[int]
    favorite_color: Optional[str]
    int, str, List, Optional, datetime… などわりと使う型はサポートされている

    View Slide

  10. 楽々json!
    user = User.parse_raw('{"id":
    123,"signup_ts":1234567890,"name":"John Doe"}')
    print(user)
    #> id=123 signup_ts=datetime.datetime(2009, 2, 13,
    23, 31, 30,
    #> tzinfo=datetime.timezone.utc) name='John Doe'

    View Slide

  11. 快く使うために: mypy pluginのページは読んでね
    error: Module 'pydantic' has no attribute 'BaseModel'
    [attr-defined]
    ↑mypy から注意されたけど
    ドキュメントのmypy pluginの設定を追加したら解消されたので
    良く読もう
    https://pydantic-docs.helpmanual.io/mypy_plugin/

    View Slide

  12. さらば、
    # type: ignore

    View Slide

  13. ありがとうございました。

    View Slide