あいつの日誌β

働きながら旅しています。

Python

percent encoding された 日本語 url を decode したい

あらすじ ある日こんな事を言われました。 「Python 2.7 で動いてるプログラムがあるんだけど DB に URL エンコードされた文字列が入っているからデコードしてちょ」 やってみる 以下の参考にして unicode を一度 str に変換して urllib.unquote に渡します…

redis.py で Set を sadd する

もう何回か同じ事を繰り返しているのでメモ redis.py で Set を記録する場合にこんな事をしてしまう >>> import redis >>> conn = redis.Redis() >>> items = set([1, 2, 3]) >>> conn.sadd('key', items) 1 >>> conn.smembers('key') set(['set([1, 2, 3])'…

Django でテストを通らない自作プラグインをテストしないようにしたい

あらすじ 以下のコマンドがこける % python ./manage.py test --settings=xxxxxxx.settings.test.local プロジェクト内でこうやってインストールしているモジュールがテスト通っていないらしい。 pip install ./extra_eggs xxxxxxxxxx どうする? 以下を参考…

py.test の書き方 備忘録

Pytestの備忘録 py.test の書き方について重要なところだけまとめてみました。 大体以下のことがつかめればOKだと思います。 autouse と pytest.ini の関係 scope の使い方 request.addfinalizer autouse tests/test_my.py を用意 # -*- coding: utf-8 -*- i…

subprocess でコマンドを pipe させる場合

こんな感じ import subprocess cmd1 = ('ls', '/tmp') cmd2 = ('head') p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p2 = subprocess.Popen(cmd2, stdin=p1.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE) pri…

py.test の xdist の挙動を確認してみた

あらすじ test.py(xdist)で並列テストを実行しているプロジェクトが存在する。 現在、関数毎にテスト用の redis-server を起動して、都度廃棄している。 redis-server を起動する処理をモジュール単位に変更し、テスト関数が始まる度に flushall() にする処…

Python - subprocess.Popen の挙動

以下の挙動を知らなくて迷宮入りするところだったので共有します。 Point1: time.sleep time.sleep しておくと returncode 0 を取得できる # -*- coding: utf-8 -*- import time import subprocess cmd = ('ls', '/tmp') p = subprocess.Popen(cmd, stdout=s…

Python で子プロセスを Popen して returncode を追跡したい

Python で子プロセスにコマンドを実行させて、それが失敗した場合を検出したい。 exit 1 的なアレ。 調べた結果以下のようにすれば良い模様。 import time import subprocess cmd = ('cat', '/hogehogehoge') p1 = subprocess.Popen(cmd, stdout=subprocess.…

Python でテスト用のデータを準備する一例

あらすじ ログ集計テーブルのテストケースを作っていた時の話ですがテーブルに入っているデータを各テストケース毎に作成したい。 なんですけどテストケースが増えるとどのケースでどのようなデータが用意されているのかが分かりづらいのでちょっと工夫して…

python で traceback を取得したい

あらすじ 以下のコードを実行すると # -*- coding: utf-8 -*- import logging import traceback try: raise Exception('!!') except Exception as e: logging.error(e) こういう感じになります。 :!python % ERROR:root:!! traceback が欲しい import traceb…

python でファイル操作イベントを検出する処理でテストしたい

あらすじ あるディレクトリを監視してファイルに変更が加えられたら何かしらの処理を非同期で実行する時にテストどうする 状況説明 version は下記バージョン % python --version Python 2.7.3 サンプルコード import pyinotify wm = pyinotify.WatchManager…

暗黙の False の恐怖

暗黙の False - あいつの日誌β 以前このような記事を書いたのですが、requests というモジュールがちょっと怖いなと感じる挙動をしているので記事に書いてみます。 # -*- coding: utf-8 -*- import requests def test(response): if response: return 'this …

Microsoft Notepad に対応するための csv を出力する

あらすじ 基本 json で返す web api を csv 形式で出力することになりました。 フロント側で format を csv に変換する仕組みを導入したとろこ Windows の Excel で不具合が発生します。 ということで CSV という拡張子の TSV を UTF-16LE で返すエンドポイ…

python で json to csv

こんなのを [ { 'ika': 100, 'uni': 200, 'toro': 300 }, { 'ika': 200, 'uni': 300, 'toro': 400 } ] こんなのにする [ [ 100, 200, 300], [ 200, 300, 400] ] 順番は ika, uni, toro にする。そしてこの多次元配列を csv モジュールに任せる作業をしたいで…

Failed py.test using httpretty contain redis client

Failed py.test using httpretty contain redis client Story I am faced with a problem that test codes failed. for example external web api should return mock data when we testing. たとえば課金API のレスポンスなどテスト時においては HTTP Reque…

python の辞書には get がある件

あらすじ Python では Javascript で言う所の オブジェクトのプロパティの値を get() でも取得できると思っていました。 そんなわけでこんなコードを書いてみた。 user = {'name': 'okamuuu'} print user.get('name') レビューで指摘されました name は必ず…

Python で配列から重複した値を取り除きたい

unsersocre.js でいうところの _.uniq 的なアレをしたい _.uniq([1, 2, 1, 3, 1, 4]); // [1, 2, 3, 4] python だとこんな感じらしい sorted(set([1, 2, 1, 3, 1, 4])) # [1, 2, 3, 4] set すると順番を保持しないので厳密には違う処理ですがこれでやりたい…

暗黙の False

なんかすごいかっこいいタイトルになりましたが Python だと空の配列は False を返すらしいので以下のように書けます if not users: print 'not found users' そんだけ https://google-styleguide.googlecode.com/svn/trunk/pyguide.html?showone=True/False…

python で date を datetime に変換する

やり方はいろいろあるけれどもとりあえず conbime するやり方を試みた >>> import datetime >>> current_date = datetime.date(2014, 12, 3) >>> current_datetime = datetime.datetime.combine( ... current_date, ... datetime.time() ... ) >>> print(cur…

Flask 0.10.1 rest api tutorial

enviroments % uname -v Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 % python --version Python 3.4.2 % pip show Flask --- Name: Flask Version: 0.10.1 Location: /Users/okamuuu/local/python-…

direnv + xbuild を試す

あらすじ ひょんなところから蛇使いになりそうなので Python の開発環境をセットアップする 経歴 昔 virtualenv を試したところ、「俺、Python 無理ッ」ってなった以来 Python 使っていない 最近の Python はどうやって使うか? direnv + xbuild かな? やっ…