Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pydanticの紹介
Search
mizzsugar
February 13, 2020
Programming
2
570
pydanticの紹介
mizzsugar
February 13, 2020
Tweet
Share
More Decks by mizzsugar
See All by mizzsugar
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
0
95
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
4
7.7k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
440
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
250
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
990
unittest.mockを使ってテストを書こう
mizzsugar
5
5.8k
変数に変数を代入したら?
mizzsugar
0
2.4k
Djangoのパスワードハッシュアルゴリズムで_PyramidのWebアプリケーション作った.pdf
mizzsugar
0
760
unittest.mockを使ってテストを書こう ~モックオブジェクトを使ってより単体テストの目的に沿ったテストに~
mizzsugar
4
1.8k
Other Decks in Programming
See All in Programming
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
1
210
月間4.5億回再生を超える大規模サービス TVer iOSアプリのリアーキテクチャ戦略 - iOSDC2024
techtver
PRO
1
730
Why Prism?
kddnewton
4
1.6k
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
8
2.3k
Jakarta EE meets AI
ivargrimstad
0
220
The Sequel to a Dream of Ruby Parser's Grammar
ydah
1
200
Kotlin 2.0が与えるAndroid開発の進化
masayukisuda
1
210
暴走のウホーレン 〜想いってのはvimrcにしないと伝わらないんだぜ〜 / iosdc_japan_2024
uhooi
1
250
Rubyのobject_id
qnighy
6
1.3k
XStateでReactに秩序を与えたい
gizm000
0
530
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
460
サーバーレスで負荷試験!Step Functions + Lambdaを使ったk6の分散実行
shuntakahashi
5
1.4k
Featured
See All Featured
A better future with KSS
kneath
235
17k
Speed Design
sergeychernyshev
20
420
We Have a Design System, Now What?
morganepeng
48
7.1k
Designing with Data
zakiwarfel
98
5k
Large-scale JavaScript Application Architecture
addyosmani
508
110k
How to train your dragon (web standard)
notwaldorf
85
5.6k
Designing the Hi-DPI Web
ddemaree
278
34k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
Documentation Writing (for coders)
carmenintech
65
4.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Teambox: Starting and Learning
jrom
131
8.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
401
65k
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
ありがとうございました。