# https://gist.github.com/mitukiii/4234173 import sys, commands from percol.command import SelectorCommand from percol.key import SPECIAL_KEYS from percol.finder import FinderMultiQueryMigemo, FinderMultiQueryRegex ## prompt # Case Insensitive / Match Method に応じてプロンプトに表示 def dynamic_prompt(): prompt = ur"" if percol.model.finder.__class__ == FinderMultiQueryMigemo: prompt += "[Migemo]" elif percol
Photo by Jayphen 秋山です。 先日「Python Fire」という、Pythonのコマンドラインツールを自動生成できるライブラリが発表されました。 どのへんが便利なのか、実際に使ってみながら解説をしていきますので、気になってた人の参考になればと思います。 Googleのリポジトリに出ているのでGoogleの公式プロダクト?と思いきや、最後に「This is not an official Google product.」の表記があるのでGoogle公式ではないようですね。Googleの中の人が作った非公式ライブラリということでしょうかね。 github.com ■Python Fire使ってみた そもそもPythonには、コマンドラインからコマンドを受け付ける組み込みのライブラリがあります。他にもbakerとか、clickとか、既にコマンドラインツールを作る用の補助ライブラ
はじめに 去年ぐらいからPython製のコマンドラインのツールをいくつか作っていて、構成もだいぶ固まってきたので、まとめてみる。規模としては1ファイルでは終わらないぐらいで、関数の数も数十になってユーティリティを作ったり、クラスをいくつか作らないと、保守がしにくいような規模のものを想定しています。工数としては1日では終わらないけど、2週間はかからない程度の規模を想定。 構成 ということで、まず構成をさらしてみます。 こんな感じ。 SAMPLE_PROJECTレポジトリがあったとして、その具体的な構成が以下。 . ├── README.md ├── RELEASE.md ├── TODO ├── bin │ ├── command1 │ ├── command2 │ └── command3 ├── SAMPLE_PROJECT │ ├── __init__.py │ ├── constan
ExactTargetのCLIを仕事の便利ツール的な感じで作っていたのをPyPIに公開してみました。↓ et-cli Python Package Index でインストールできるようになってますので、ExactTarget導入している開発者の方は良ければお使いください(日本ではほとんど居ないと思いますが…)。ツールの説明は別の記事として書こうと思います。まだまだ機能不全+クソコードな感じなのでもうちょい時間作って書いていかないとなー。 ということで、今回はコマンドラインツールをPyPIにパッケージ登録するやり方を書いていきます。 全体的な流れはこんな感じです。 ディレクトリ構成決めるsetup.py作成testpypiにregister&sdist upload本番pypiにregister & sdist upload参考URLはこちら↓(以下を読んでから進めたほうがPyPIやパッケー
Pythonのargparseモジュールを利用するとPythonスクリプトに渡された引数のチェックを良い感じにやってくれます。自動的にヘルプコマンドも作ってくれたりするので、コマンドラインツールを作るときにはかなり便利です。 今回はargparseによるコマンドライン引数のパースをunittests + Mockでテストしてみました。Pythonのバージョンは2系です。 完成形はこんな感じ↓ import unittest from mock import patch, Mock class ParserError(Exception): pass class ParserTestCase(unittest.TestCase): @patch('argparse.ArgumentParser.error') def test_parse_error(self, arg_error): ar
cookiecutterは、テンプレート(雛形となるファイル群)を元に、プロジェクトファイル(ディレクトリやファイル)を生成できるコマンドラインツール。 Pythonで作られている。 GitHub - audreyr/cookiecutter: A command-line utility that creates projects from cookiecutters (project templates). E.g. Python package projects, jQuery plugin projects. ローカルディレクトリや、github上のリポジトリにあるcookiecutterテンプレートを指定すると、対話的に必要な項目を入力してファイルを生成できる。 テンプレートは、対話的に入力させたい変数を定義したJSONファイルと、雛形となるファイル、ディレクトリで構成される。
Haskellを勉強してきて、ようやくモナドの雰囲気がわかってきたので、Maybeモナドのような計算をPythonでやってみる。 #!/usr/bin/env python # -*- coding: utf-8 -*- # instance Monad Maybe where # return = Just # fail = Nothing def Maybe(x): return Just(x) if x else Nothing() class Just: def __init__(self, x): self.value = x def __repr__(self): return "Just(%r)" % self.value # (Just x) >>= f = f x def bind(self, f): return f(self.value) # '>>=' の代わりに
Pythonでモナりたいとおもいます。 そして、モナドといえばMaybeが有名ですね。 Maybeは比較的わかりやすい上、色々な言語でも実用しやすいので自分で実装している人も いたりするのではないかと思います。がしかし、 Stateモナドから理解したほうがいいんじゃないかなーと思うんだけど というような記事を発見してしまいました。 ということで、Stateモナドを実装しようと思います。 Haskellでスタックを利用した加減乗除の計算機を作ってみる Haskell の State モナド (1) - 状態を模倣する 第6回 局所的な「状態」を利用するためのStateモナド とかを読んで意識を高めました。 これだけ既存記事があって今更という感も否めません。その上、参考記事をはじめとした説明は 具体的でわかりやすいものになっています。しかし、そのためにいかんせんスタックの実装部分に 力を入れす
pipsiとはpipsi = pip script installer Flaskの人が作ったっぽいスクリプトです。 mitsuhiko/pipsi · GitHub pipsiが流行る気配が微塵もないので書きました。たぶんクッソ地味なのでわざわざ話題にしないんだとおもいますが、個人的には重宝してます。 はじめに このエントリの対象者はPythonでなんかを作ってる人です。つまり、virtualenvを使って仮想環境を切り替えまくってる系の人です。 普段Pythonでがっつり開発しない人はもう、面倒なので普通にグローバル環境にpip installしてパスを通せばいいとおもいます。 pipsiイズ何 さて、virtualenvを使って開発をしていると時々困ることがあります。それはPython製の便利ツール(pipで配信されている)をどう管理するかという問題です。 fabric, ansib
自分で書いたPythonのテクニックな記事についてのまとめ 時々、自分で書いた記事を参考にしたいときとかがあるのだけれども、Qiitaとかに分離されてたりとかしててよくわからんくなってたので統括。 Qiitaの記事もこっちのブログに移行してしまおうかしらん? こうやって自分が書いた記事を振り返ってみると、一時期のHaskellマイブーム & 仕事がつまらなかった時期みたいなものがありありと見えてきて面白い。 自分で書いたPythonのテクニックな記事についてのまとめ 関数適用するやつ method missingによる動的なメソッド呼び出し Rubyのforwardableをメタクラスで実装するやつ Pythonでパターンマッチを実装する メタクラスでクラスそのものをFalse扱いするやつ Pythonによる見た目がスマートなOptional実装 PythonでStateモナドをモナモナす
Goのpanicとrecover Goのエラー処理は原則として例外を使わず、エラーを丁寧に処理すべき方針はわかったとして、Goの例外機構というものがどういう仕組なのか調べた。 まず、基本に忠実に、golang.jpの説明を読むと、 実践Go言語 - golang.jp Recover panicが呼び出されたとき(これには、配列のインデックスが範囲外であるときや、型アサーションに失敗したような暗黙的なものも含む)は、すぐさま、カレントの関数を停止し、ゴルーチンのスタックの巻き戻しを開始します。その途中、遅延指定されている関数をすべて実行します。この巻き戻しがゴルーチンのスタックの先頭にたどり着くと、プログラムは終了します。ただし、組み込み関数recoverを使うことで、ゴルーチンの制御を取り戻し、通常の実行を再開させることが可能です。 panicが発生すると即座に処理を打ち切るので、これが
Pythonの標準ライブラリに含まれるunittest.mockモジュールの使い方メモ。patchのみ。 試したバージョンは、Python 3.5 テスト対象 main.py import subprocess def say(message): """echoコマンドでmessageを実行する """ return subprocess.call(['echo', message]) def say_hello(somebody): """「Hello, {somebody}!」と画面に表示する関数 """ message = "Hello, {}!".format(somebody) return say(message) if __name__ == '__main__': say_hello("tokibito") 実行すると次のようになる。 $ python main.py He
MagicMock は mock.Mock のサブクラスで、薄いラッパーです。 >>> from mock import Mock, MagicMock >>> issubclass(MagicMock, Mock) True >>> list(set(dir(MagicMock)) - set(dir(Mock))) ['_mock_set_magics'] MagicMock を使えば、クラスだろうがオブジェクトだろうがメソッドだろうが関数だろうが、何でもモックオブジェクトで置き換えて、その振る舞いを自由にシュミレートすることができます。 まず、一番シンプルにモックを使う方法は、直接 MagicMock オブジェクトを代入するやり方です。 models.py(置換対象クラス) import random class User(object): def __init__(self, na
隣の席の人がテスト強化週間とか抜かしていたので自分もちゃんと理解するために なるべくわかりやすく まとめてみようと思います。 この記事は 2015 tech-yuruyuru アドベントカレンダー - 15日目の記事です。 http://connpass.com/event/22759/ モックって何よ? mockは特定のオブジェクトの代理をしてユニットテストを円滑に進めるためのモジュールです。 python3.3からはビルトインに入りましたが、それ未満のバージョンではインストールが必要です。 以下のようにインストールしてください。 インストールしたmockを使う場合は単に import mock とすればよいのですが ビルトインmockを使う場合は、 from unittest import mock のようにして使うのが一般的です。 以降、この記事では無用な混乱を避けるため、mockの
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く