テクめも

プログラミング関連のちょっとしたTipsなどを書いています。

Clickのテストで例外をキャッチしない

PythonのCLIフレームワークであるClickでは、テストツールも用意されており、容易にテストを書くことができます。 invokeを使えば、コマンドと引数を渡すことができますが、デフォルトでは例外をキャッチします。 通常は、exit_codeの値を比較すればよいので…

Github Actionsでジョブが成功したら次のジョブを実行する

テストが成功したらデプロイするみたいに、あるジョブの実行には前のジョブが成功が必要となるワークフローを書くには、needsを使うとできます。 name: build on: [push] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@master # テス…

Pythonで優先度付きキューを使う

Pythonでの優先度付きキューはheapqを使うとできます。 import heapq 最小ヒープ はじめに、リストをキューに優先度付きキューに変換します。 que = [3, 1, 5, 2] heapq.heapify(que) 先頭に最小値がきます。(先頭以外はソートされているわけではありません…

pyproject.toml利用時にアプリのバージョンを取得する

Pythonパッケージを作成する際、__init__.pyにバージョンを書いておき、setup.pyでは__init__.pyからimportすることが一般的かと思います。しかし、pyproject.toml を利用するとPythonファイルではないので setup.py のようにバージョンをimportすることはで…

Pythonでエスケープされた文字列を戻す

argparser の引数として文字列を入力すると自動的にエスケープされますが、改行などプログラム中で使いたい場合があるかと思います。そこで、エスケープされた文字列を元に戻す方法を紹介します。 はじめに、自動的にエスケープされることを確認します。 # m…

Clickでコマンド別にファイル分割する

PythonのCLIフレームワークの1つにclickがあります。 デコレータを使って簡単にCLIが作成できますが、1ファイルにすべてのコマンドのコードを書いていくと長くなります。 そこで、CommandCollectionを使って複数のコマンドをマージすることで、コマンド別に…

hackingとisortの競合を解決する

isortのデフォルトの設定では、例えば以下のようにソートされます。 import json import time from pathlib import Path from urllib.parse import urljoin, urlparse しかし、hackingを導入していると以下のようにエラーが発生します。 ./main.py:3:1: H306…