メソッドの開始終了を通知するパッケージをリリースした

Posted on 2021.07.22

deco-slackをリリースしました

deco-slack というPythonのパッケージをリリースしました。なんぞや、というとメソッドにデコレータをくっつけると、そのメソッドの開始、終了、エラーをSlackに通知してくれるというものです。それだけです

もともと社内で似たようなものを作って使っていたんですが、いろんなバッチとかにコピペしまくっていてこれならパッケージにしたほうが楽そうなのと、依存していたSlackSDKがv1系でLegacyになっちゃってるので、バージョンアップして書き直しました

使い方

pip install deco-slack

でインストールできます

Slack関連のTOKENやら設定が必要です

SlackBotを作成して、chat:write.public scopeをつけたトークンを発行して、 SLACK_TOKEN の環境変数に設定します。通知を飛ばしたいChannel名を #なしで SLACK_CHANNEL の環境変数に設定します

そこまで終わればあとはdecoratorで start, success, error の引数にdictで attachments を渡します。そのままSlackのAPIに渡されます。使うイメージとしてはバッチの大元のメソッドをデコレートしておくとその通知が楽にできる感じです Legacyと書かれてるんですが、layout block ほど凝ったことをやる想定じゃなかったので…

不要な引数は渡さなければ無視されます。なので例えばエラーのときだけ教えてほしい、とかsuccessとerrorだけほしい、とかも対応可能です

attachmentもたくさんパラメータあるんですが、少なくとも例に書いたパラメータ程度でも通知としては使えると思います

from deco_slack import deco_slack


@deco_slack(
    # These parameters are all optional
    start={
        "text": "start text",
        "title": 'start',
        "color": "good"
    },
    success={
        "text": "success text",
        "title": 'success',
        "color": "good"
    },
    error={
        "title": 'error',
        "color": "danger",
        "stacktrace": True # Set True if you need stacktrace in a notification
    },
)
def test1():
  print('test1')


@deco_slack(
    success={
        "text": "success text",
        "title": 'success',
        "color": "good"
    },
    error={
        "title": 'error',
        "color": "danger",
        "stacktrace": True
    },
)
def error1():
  raise ValueError('error occured.')

結果はこんな感じになります

結果

TODO

successのときに処理結果をもとに情報を表示したいですね。例えば正常終了件数、みたいな。デコレータだと扱いが難しくて、メソッドを渡すことで実現できそうなんですが未実装です

リポジトリ