Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2012-07-04

[]Command Line上からRedmineを扱えるツール、Redlineを公開します 02:07

 f:id:nisemono_san:20120702124001p:image

 バイト先で一枚程度のスクリプトを使ってRedmineを扱ったりしていたのですが、見た感じ、勉強がてらに自分で書き直してもいいかなと思ったので、書き直してみました。もちろん、コマンドラインからRedmineを使えるツール自体は、割とちょくちょくあるんだけれども、他のコマンドラインツールと違うところといえば、下の点かな、と思ったりします。

  1. テキストファイル形式で日報を出力するテンプレートがある
  2. テンプレートでチケットを登録できる
  3. Configを使うことによって、チケットのアサインやクローズ、進行度の更新が簡単になる

 RedmineRestful APIを使うことが前提になっています。

 no title

 不便なところとしては、プロジェクトのID番号で指定しなければいけないところであったり、あるいはデフォルト値をコンフィグに設定できないという点、あとはチケットにアサインしたり、進行度を変えること以外は、ほとんど更新が出来ないという点など、気がついていないけど、潜んでいるであろうバグが色々と存在するかもしれませんが、そのつど直していこうと思います。

Pythonでコマンドツールを作るためのTips

 Pythonにおいて、コマンドツールを作るさいには非常に使いやすいライブラリとしてArgparserというものが標準にあります。詳しくは下のURLを参考にして頂ければいいのですが、optparserというライブラリもあります。しかし、今後はArgparserになるそうです。

no title

404 Not Found

 簡単な使い方としては、恐らく次のような形になります。

"""
argparseのArgumeentParserが、コマンドオプションの起点となるようです。
"""
parser = argparse.ArgumentParser(description='''Redline is Command Line Tools for REDMINE.\n
   ''')
"""
このparserインスタンスから、add_argumentメソッドを呼び出すことによって、追加していきます。
最初にハイフン("-")が付く場合は、自動的にオリジナルとなります。
"""
parser.add_argument('-sl','--shortline'
            ,action='store_true'
            ,dest='flag_shortline'
            ,help="Very short ticket output.")
"""
またサブコマンドを定義することが可能です。親のコマンドから、subparserを呼び出してあげることで、それが可能です。
要するにgit initみたいなかたちですね。
"""
subparsers = parser.add_subparsers(
            help='sub-commands')

"""
ただ、普通、サブコマンドはデフォルトで「付けるべきもの」として考えられたりするので、
もし任意の場合はnargsなどを追加するといいかもしれません。
"""

param_report.add_argument('filepath'
            ,nargs='?'
            ,help="Daily Report Template File")

"""
また、コマンドの挙動部分に関しては、下のように関数であったり、クラスのメソッドを結びつけます。
"""
param_done.set_defaults(func=redmine.done)

"""
あとはパーサーを実行し
"""
cmd = parser.parse_args()
"""
変数に結びつけられた、関数を実行しましょう。
"""
cmd.func(cmd,opt)

 というわけで、だいたいこんな感じです。

 Pythonでも比較的簡単にコマンドラインツールが作れるので、なにか面白いものができたら教えてくださいね。

 |