Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
今いち推しのバリデーター pydanticの紹介 20200213 Stapy @mizzsugar0424
Slide 2
Slide 2 text
お前、誰よ ● Twitter : @mizzsugar0425 ● 仕事:データ分析基盤の開発、運用 ○ GCP, BigQuery ● 前の仕事はDjango。今でも追いかけてる。 ● 趣味:PythonでWeb開発 ○ Pyramid, Nuxt.js, TypeScript, PostgreSQL ● 2/29にPyCon mini Shizuokaに登壇予定 ○ unittest.mockの話です ● ゆるく転職活動 ○ 面接中に水をガブガブ飲む人間でも良いという企業様、ぜひ
Slide 3
Slide 3 text
# type: ignore
Slide 4
Slide 4 text
それは、 静的型付けとPythonの両方を 愛する者たちを苦しめる コメント
Slide 5
Slide 5 text
従来のバリデーターだとTypingのサポートがない import colander class Item(colander.MappingSchema): # type: ignore name = colander.SchemaNode(colander.String()) price = colander.SchemaNode(colander.Integer())
Slide 6
Slide 6 text
Typingサポートのあるバリデーター、pydantic ● 2017年爆誕 ● Typingサポートあり ● Python製WebフレームワークFastAPIでも紹介されている ● mypy pluginあり https://pydantic-docs.helpmanual.io/
Slide 7
Slide 7 text
基本的な書き方 import pydantic class Item(pydantic.BaseModel): name: str price: int
Slide 8
Slide 8 text
基本的な書き方 external_data = { 'name': 'chocolate', 'price': 500 } try: item = Item(**external_data) except ValueError e: e.json() # エラー内容が返される
Slide 9
Slide 9 text
まるでオブジェクトを扱うよう class User(pydantic.BaseModel): name: str birthday: datetime.date friends: List[int] favorite_color: Optional[str] int, str, List, Optional, datetime… などわりと使う型はサポートされている
Slide 10
Slide 10 text
楽々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'
Slide 11
Slide 11 text
快く使うために: mypy pluginのページは読んでね error: Module 'pydantic' has no attribute 'BaseModel' [attr-defined] ↑mypy から注意されたけど ドキュメントのmypy pluginの設定を追加したら解消されたので 良く読もう https://pydantic-docs.helpmanual.io/mypy_plugin/
Slide 12
Slide 12 text
さらば、 # type: ignore
Slide 13
Slide 13 text
ありがとうございました。