2024年2月20日
Pydantic V2 が2023年6月にリリースされました。結構いろいろ変わっていて移行作業はそこそこ大変な気がしますが対応される方は Migration Guide を読んで頑張ってください。 私はというと V1 のころに Pydantic の `@validator` デコレータをカスタムしまくったので、V2 でそれがほぼ使えなくなってしまいました。そもそもなんでカスタムしたのかというと、バリデータのメソッドに DB にアクセスするためのセッションオブジェクトとかを渡したかったからでした。V2 で
2024年1月24日
個人で使っている LINE bot を賢くしたくて、ChatGPT を組み込んでみました。ChatGPT を自分のアプリに組み込むのは初めてなのですが、LangChain の機能の豊富さに驚かされました。 ## 対象読者 * 人間のあいまいな指示を機械が実行できるアクションに落とし込ませたい人 ## 検証環境 * Python 3.11.6 * LangChain 0.1.1 * langchain-openai 0.0.2.post1 ## できたもの ```python from data
2023年11月18日
Rye は Rust 製の Python パッケージマネージャです。まだ「実験的」なステータスなので全ての方にお勧めできる段階ではないかもしれないですが、十分に実用的で安定していると思います。Pipenv や Poetry との違いは、パッケージ管理だけでなく、Python バージョンの管理までやってくれるところが特徴で、Pipenv/Poetry + pyenv が1つのツールにまとまっているイメージです。 さて、今回は Rye を Docker コンテナで使う時のポイントをまとめてみました。Rye
2023年11月9日
世の中には AWS Signature V4 署名の実装方法についての記事はたくさんありますが、その署名を付与して検証する側(サーバー)の実装方法について見つけるのは難しいです。AWS API Gateway を使えば簡単に自分で書かなくても良いのでそれはそうなのですが、AWS SigV4 は curl のオプションとしても使える くらいの地位を獲得しているので、AWS SigV4 を利用した認証機能の実装方法についての記事があってもいいでしょう。 ということで、今回は Python と FastAPI
2023年5月15日
前回の記事では SQLAlchemy の Session について解説しました。今回はその応用として、Celery においてどのように Session を管理するかを考えたいと思います。 関連記事: * SQLAlchemyのセッション・トランザクションを理解する * SQLAlchemyで'MySQL server has gone away'が発生した時の対処法2つ ## 結論 以下のように DB 操作を行うタスクのためのクラスを作ります。 ```python from typing impo
2023年5月14日
SQLAlchemy の Session や scoped_session、トランザクションに関して理解していきます。 ## 用語おさらい ### セッション(Session) SQLAlchemy の Session オブジェクトは、ORM マッピングされたオブジェクトの永続化に関する操作を管理するオブジェクトです。 `sqlalchemy.orm.Session` を直接インスタンス化しても良いですが、実環境では sessionmaker を使うことが一般的です。sessionmaker は
2023年3月6日
前回の記事を書くときに WebAssembly でブログのコードブロックのコードを実行させられたら面白いかも、ということで PyScript を使って実装してみました。React & Next.js で使う際の注意点についても書こうと思います。 以下については前提知識としてこの記事では解説しません。 * PyScript * Pyodide * WebAssembly * react-markdown のコードブロック(バッククォート3つ \```)をカスタマイズする方法 ## やったこと * r
2023年3月4日
Python 公式ドキュメントの unittest.mock のページにドンピシャの内容が書いてありますが、なかなか気づけずにハマってしまっていたのでメモです。 `unittest.mock.patch` でパッチしたけど当たってない気がする人は参考にしてみてください。 下記の引用に要点が凝縮されています。 > ### どこにパッチするか > > `patch()` は (一時的に) ある 名前 が参照しているオブジェクトを別のものに変更することで適用されます。任意のオブジェクトには、それを参照する
2023年2月8日
サチコ(Google Search Console)を眺めていたら `FastAPI MySQL` がそれなりに需要ありそうと思ったので、FastAPI と SQLAlchemy を組み合わせて ORM を使う方法を紹介したいと思います。最近の SQLAlchemy(1.4以降)ではマッピングされたオブジェクトに型を適用することもできるので、型ヒントを活かして型安全なコードを書くことも難しくなくなっています。 ## 環境 * Python 3.10.6 * FastAPI 0.89.1 * SQLAl
2023年2月6日
Python の dict(辞書)を TypeScript の interface のように扱えて便利な TypedDict ですが、**dict のサブクラスではない**というのが少し落とし穴だなと思ったのでメモ。 ## まずは PEP を見よう 大抵のことは公式ドキュメントを見れば書いてあります。今回も例外なくそうでした。 > First, any TypedDict type is consistent with `Mapping[str, object]`. https://peps.py