空飛ぶ気まぐれ雑記帳

主に趣味とかプログラミングについて扱います。

pydanticからArgumentParserを作るライブラリをアップデートした

少し前に書いたライブラリであるpydantic-argparse-builderをアップデートした。
ライブラリの詳細については以下にまとめています。
qiita.com

もともと備えている機能は事前定義されているpydanticのオブジェクトにもとづいてPython標準のArgumentParserに引数を追加するだけでした。
しかし、人類は怠惰なので、ArgumentParserさえも内包してしまおうという考えに基づいて実装しています。

実装例は以下のとおりです。

from pydantic import BaseModel

from pydantic_argparse_builder import command, main


class Config(BaseModel):
    name: str
    age: int
    is_active: bool


@command
def launch(config: Config):
    print(config)


if __name__ == "__main__":
    main()

上記は以下のコードと等価です。

from argparse import ArgumentParser
from pydantic import BaseModel
from pydantic_argparse_builder import build_parser


class Config(BaseModel):
    name: str
    age: int
    is_active: bool

def main():
    parser = ArgumentParser()
    build_parser(parser, Config)
    args = parser.parse_args()
    launch(Config(**vars(args)))

def launch(config: Config):
    print(config)


if __name__ == "__main__":
    main()

このようにいい感じに短くできるのでやや使い勝手が向上するはずです。
もちろん、従来どおりの上記のような書き方もできるので、他のArgumentParserを拡張するライブラリとの併用や複雑なユースケースにも容易に対応することができます。