Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
pydanticの紹介
mizzsugar
February 13, 2020
Programming
2
410
pydanticの紹介
mizzsugar
February 13, 2020
Tweet
Share
More Decks by mizzsugar
See All by mizzsugar
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
0
22
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
2
3.9k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
200
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
120
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
580
unittest.mockを使ってテストを書こう
mizzsugar
4
4.5k
変数に変数を代入したら?
mizzsugar
0
2k
Djangoのパスワードハッシュアルゴリズムで_PyramidのWebアプリケーション作った.pdf
mizzsugar
0
400
unittest.mockを使ってテストを書こう ~モックオブジェクトを使ってより単体テストの目的に沿ったテストに~
mizzsugar
4
970
Other Decks in Programming
See All in Programming
Automating Gradle benchmarks at N26
ubiratansoares
PRO
1
140
Rust on Lambda 大きめCSV生成
atsuyokota
1
390
AWS Config Custom Rule、ノーコードでできるかな?
watany
0
250
Pythonで鉄道指向プログラミング
usabarashi
0
130
kintoneでランダム取得を作ってみた(imoniCamp 2022-07-27)
shokun1108
0
140
Records の使い方はこれでいいの? をみんなで考えたい / Java DO #20
gishi_yama
0
110
Amazon SageMakerでImagenを動かして猫画像生成してみた
hotoke_neko
0
110
料理の注文メニューの3D化への挑戦
hideg
0
280
WindowsコンテナDojo: 第4回 Red Hat OpenShift Localを使ってみよう
oniak3ibm
PRO
0
180
これからのスクラムマスターのキャリアプランの話をしよう - スクラムマスターの前に広がる世界
psj59129
0
190
Amazon Lookout for Visionで 筆跡鑑定してみた
cmnakamurashogo
0
150
Scaling Productivity- How we have improved our dev experience
sockeqwe
1
120
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
260
25k
Statistics for Hackers
jakevdp
782
210k
Typedesign – Prime Four
hannesfritz
34
1.4k
Raft: Consensus for Rubyists
vanstee
127
5.5k
Navigating Team Friction
lara
175
11k
Testing 201, or: Great Expectations
jmmastey
21
5.5k
Teambox: Starting and Learning
jrom
123
7.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
344
17k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
213
11k
Writing Fast Ruby
sferik
612
57k
Building Applications with DynamoDB
mza
84
4.7k
WebSockets: Embracing the real-time Web
robhawkes
57
5.5k
Transcript
今いち推しのバリデーター pydanticの紹介 20200213 Stapy @mizzsugar0424
お前、誰よ • Twitter : @mizzsugar0425 • 仕事:データ分析基盤の開発、運用 ◦ GCP, BigQuery
• 前の仕事はDjango。今でも追いかけてる。 • 趣味:PythonでWeb開発 ◦ Pyramid, Nuxt.js, TypeScript, PostgreSQL • 2/29にPyCon mini Shizuokaに登壇予定 ◦ unittest.mockの話です • ゆるく転職活動 ◦ 面接中に水をガブガブ飲む人間でも良いという企業様、ぜひ
# type: ignore
それは、 静的型付けとPythonの両方を 愛する者たちを苦しめる コメント
従来のバリデーターだとTypingのサポートがない import colander class Item(colander.MappingSchema): # type: ignore name =
colander.SchemaNode(colander.String()) price = colander.SchemaNode(colander.Integer())
Typingサポートのあるバリデーター、pydantic • 2017年爆誕 • Typingサポートあり • Python製WebフレームワークFastAPIでも紹介されている • mypy pluginあり
https://pydantic-docs.helpmanual.io/
基本的な書き方 import pydantic class Item(pydantic.BaseModel): name: str price: int
基本的な書き方 external_data = { 'name': 'chocolate', 'price': 500 } try:
item = Item(**external_data) except ValueError e: e.json() # エラー内容が返される
まるでオブジェクトを扱うよう class User(pydantic.BaseModel): name: str birthday: datetime.date friends: List[int] favorite_color:
Optional[str] int, str, List, Optional, datetime… などわりと使う型はサポートされている
楽々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'
快く使うために: mypy pluginのページは読んでね error: Module 'pydantic' has no attribute 'BaseModel'
[attr-defined] ↑mypy から注意されたけど ドキュメントのmypy pluginの設定を追加したら解消されたので 良く読もう https://pydantic-docs.helpmanual.io/mypy_plugin/
さらば、 # type: ignore
ありがとうございました。