pydanticの紹介

C98d379da6e5517afff697a6c5615e68?s=47 mizzsugar
February 13, 2020

 pydanticの紹介

C98d379da6e5517afff697a6c5615e68?s=128

mizzsugar

February 13, 2020
Tweet

Transcript

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

  2. お前、誰よ • Twitter : @mizzsugar0425 • 仕事:データ分析基盤の開発、運用 ◦ GCP, BigQuery

    • 前の仕事はDjango。今でも追いかけてる。 • 趣味:PythonでWeb開発 ◦ Pyramid, Nuxt.js, TypeScript, PostgreSQL • 2/29にPyCon mini Shizuokaに登壇予定 ◦ unittest.mockの話です • ゆるく転職活動 ◦ 面接中に水をガブガブ飲む人間でも良いという企業様、ぜひ
  3. # type: ignore

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

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

    colander.SchemaNode(colander.String()) price = colander.SchemaNode(colander.Integer())
  6. Typingサポートのあるバリデーター、pydantic • 2017年爆誕 • Typingサポートあり • Python製WebフレームワークFastAPIでも紹介されている • mypy pluginあり

    https://pydantic-docs.helpmanual.io/
  7. 基本的な書き方 import pydantic class Item(pydantic.BaseModel): name: str price: int

  8. 基本的な書き方 external_data = { 'name': 'chocolate', 'price': 500 } try:

    item = Item(**external_data) except ValueError e: e.json() # エラー内容が返される
  9. まるでオブジェクトを扱うよう class User(pydantic.BaseModel): name: str birthday: datetime.date friends: List[int] favorite_color:

    Optional[str] int, str, List, Optional, datetime… などわりと使う型はサポートされている
  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'
  11. 快く使うために: mypy pluginのページは読んでね error: Module 'pydantic' has no attribute 'BaseModel'

    [attr-defined] ↑mypy から注意されたけど ドキュメントのmypy pluginの設定を追加したら解消されたので 良く読もう https://pydantic-docs.helpmanual.io/mypy_plugin/
  12. さらば、 # type: ignore

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