Python

Python Pixela client 作った

ちょっと Python 書いてないかったからリハビリ兼ねて。py-pixela 一応現時点で全ての API には対応してる。 お仕事の Django アプリケーションは mixin がたくさんあり、また今まであんまり mixin しなかったけど練習がてら。

docker-compose で mysql を立ててローカルで開発する

忘備録。 古い Django で作られたシステムがあって、訳あってローカルで動かしたい。 docker-compose があったので、動かした際にハマった問題。 version: '3.3' services: db: image: 'mysql:5.7.22' restart: always ports: - '3306:3306' environment: MY…

illegal hardware instruction

freezegun を使ってテストをした際に使っているテストで illegal hardware instruction が出た。 https://github.com/spulec/freezegun/issues/222 環境的には Virtualenv で Python3.6.2(ちょっと古い)で発生。 CI とか他の環境ではでない。 ググったり、上…

vim-noqalign を作った

同僚氏が noqalign と言うツールを作った。 今のお仕事では Python の `__init__.py` にモジュールを import する。 import だけしてるので flake8 対策として `# noqa: F401` をつけるが、これを面倒と感じた同僚氏が自動で入れるようなツールを作った。 お…

SQLALchemy seed を作った

お仕事で Django を使ってて便利だなーと思ったのが fixtures。 初期データを突っ込むのに便利。 Providing initial data for models | Django documentation | Django yaml で初期データの定義を書いて、コマンド経由で DB にデータを入れられる。 Flask で…

Python の Flake8 と Mypy のプラグイン作った

tl;dr Flake8 と Mypy のチェックが動く Vim プラグイン作った。 Flake8 のプラグインは何個あるんだって感じだが、GitHub - kevinw/pyflakes-vim: on the fly Python checking in Vim with PyFlakespyflakes-vim はとっくに deprecated だし、Python3 の ty…

Testinfra を使って見る

Ruby の Infrataster ではなく Testinfra。 Testinfra aims to be a Serverspec equivalent in python and is written as a plugin to the powerful Pytest test engine https://github.com/philpep/testinfra ってある通り Python 版 Serverspec。 テストラ…

Flask 0.11 の後方互換がなくなる機能

Flask 0.11 がリリースされた。 Flask 0.11 Released | The Pallets Projects # ちなみにどうでもいいけど、Flask のコードネームは酒の名前 後方互換がいくつかなくなってるので、まとめてみる。 # 漏れがあったら追記する予定 とりあえず自分のプロジェク…

SQLAlchemy との戦い

ここ数ヶ月 SQLAlchemy を使って開発をしている。 開発当初は特に問題もなく調子よく行っていたが、自分のローカル環境の MySQL の設定を本番に近づけたため、SQLAlchemy がエラーをはいた - Memo が出た。 pool_recycle の値を短くすれば解決と思ったが、解…

WTForms で QuerySelectMultipleField に default を設定する

WTFormsのSelectFieldで選択値(selected)を保持する方法 - Life is Really Short, Have Your Life!! WTForms で Select 関連は default を外部から設定できない。 SelectField や QuerySelectField は上記にある。 QuerySelectMultipleField で DB から読み…

SQLAlchemy がエラーをはいた

Python で Web アプリケーションを作っていて、ログイン後しばらく放っておいて、他の画面に遷移すると以下のようなエラーが出た。 sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconn ect until invalid transaction is ro…

Orator という ORM

Orator という ORM があったので試してみた。 サイトには "The Orator ORM provides a simple yet beautiful ActiveRecord implementation. " とある。 ActiveRecord パターンで、PHP の Laravel framework からインスパイアされて、もっと Pythonic にした…

Flask-WTF のファイルアップロード

メモ。というかドハマりした。 Flask-WTF を使ってファイルをアップロードする際、こうやって書いたらファイルのみ受け取れなかって ??? となった。 from flask_wtf.file import FileField class PhotoForm(Form): photo = FileField('Your photo') @app.rou…

SQLAlcyemy で repr を自動で

メモ。 SQLAlchemy でモデルクラスを定義していて、__repr__ を毎回定義するのがダルい。 かといって定義しないと、デバッグ時(主にプリントデバッグ)に中身が出ないのも困る。 # -*- coding: utf-8 -*- from sqlalchemy import Column, Integer, String, Fo…

続 pex 諸々

pex で出来たバイナリにやはり Python 自体は入ってないよう。 ということでやはり Virtualenv で作った環境と自分のアプリケーションを 1 バイナリにしているという感じか。 ちょっと残念。 ふとおもったけど、pypy はバイナリで配布しているから、pex では…

pex を試してみる

ちょっと前に pex というものを知った。 tl;dr — pex 0.7.0-rc0 documentation pex って何かというと、公式サイトのドキュメントには以下のようにある。 PEX files are self-contained executable Python virtual environments. More specifically, they are…

Flask でアプリケーションを作る際のメモ(2015 年版)

Flask でアプリケーションを作る際のメモ - Memo の 2015 年版ディレクトリ構造 . ├── __init__.py ├── app.py ├── configs │ ├── __init__.py │ └── settings.py ├── errors.py ├── extensions │ ├── __init__.py │ ├── injector.py │ └── permission.py ├─…

Splinter と PhantomJS を使って confirm() をフックする方法

Splinter — Splinter 0.10.0 documentation Splinter と PhantomJS を使うと E2E なテストを実現できる。 概ねこれで問題ないけど、サイトで JavaScript が window.confirm() を使って確認ダイアログを出している。 Splinter には get_alert() というインタ…

alembic でインデックスが 767 バイト以上の対策

MySQL5.6 で alembic を使った場合に、 "Warning: Specified key was too long; max key length is 767 bytes" が出る場合の対策メモ。 $ alembic upgrade head INFO [alembic.migration] Context impl MySQLImpl. INFO [alembic.migration] Will assume non…

factory_boy 2.4.0 で仕様が変った

Python の Fixture ツールである factory_boy を最新版の 2.4.0 にアップデートしたら、今までテストが通っていたものが fail するようになった。 # -*- coding: utf-8 -*- from factory import Sequence from factory.alchemy import SQLAlchemyModelFactor…

Mackerel の Python クライアント作った

きっかけはこれ。 簡単な Mackerel 用の Dynamic Inventory スクリプトを書いてみました。 Ansible は Python で書かれているので、本当は Python で書くのが筋がよさそうですが、Python クライアントがないので、とりあえず Ruby で書きました。 言語による…

Python でデコレートされているメソッドを取得する方法

Python でデコレーターでデコレートされている関数/メソッドを全て取得したい。 class Sample(object): @decorator def foo(self): pass @decorator def bar(self): pass def baz(self): pass この場合だと、foo(), bar() を取得したい。 inspect.getmembers…

APScheduler

Python で cron みたいなジョブスケジューラなライブラリが無いかと思って探してたら、APScheduler というのを見つけた。 Advanced Python Scheduler — APScheduler 3.5.3.post19 documentation Scheduler やジョブを登録する Job stores などを組み合わせて…

雑談対話用の Python クライアント作った

リフレッシュ休暇中で、出かけようと思ったけど天気悪いし、寒いし、雪降るし…なので docomo が提供している API の Python クライアントを作った。 元ネタ。 docomoが提供している雑談対話APIを利用し、docomoruというライブラリを使いながらBOTと雑談する…

locust.io でカスタムクライアントを作る

お仕事で自社製の分散 KVS の環境構築をやっている。 運用試験や負荷試験を行うんだけど、負荷試験を行うのにツールを使いたい。 Python 製の locust.io を使う。 locust.io を選んだ理由は クライアントを自分で作れる(負荷試験ツールは HTTP でしかお話で…

Py-Autodoc 0.3 リリースした

主に仕事で必要になりそうと思ったので、requests に対応した。 仕事で Java の API サーバを書いていて、応答が JSON のみで、 リクエストとレスポンスを自動でドキュメントに出して楽をしたかったので、 以前作った Py-Autodoc を使おうとした。 自分で作…

また Flask-Injector の仕様変更

Injector の仕様変更 - Memo また変更があった。 $ python manage.py runserver /path/to/virtualenvs/project/lib/python3.4/site-packages/flask_injector.py:146: UserWarning: init_app and post_init_app are deprecated in favour of FlaskInjector. P…

pluginbase が便利そう。

@mitsuhiko 先生の新作の pluginbase が便利そうというお話。 Python は他の Python なファイルをモジュールとして動的に読み込む場合は import があるから少し面倒。 例えば今作ってる Flask を使ったアプリケーションで、WSGI ミドルウェアを読み込む時に…

Mosquitto を試してみる

ほぼ [twitter:@voluntas] さんが書かれた MQTT コトハジメ と Mac OS X に Mosquitto をビルドする - Qiita の通り。 $ curl -O http://mosquitto.org/files/source/mosquitto-1.2.3.tar.gz $ tar xvfz mosquitto-1.2.3.tar.gz $ cmake $ make allインスト…

テストをどこまで書くか

Flask を使ってアプリケーションを開発している。 テストを書いていてどこまで書くかに悩んでる。 例えばユーザー登録の画面があって、Form ライブラリを使っている。 Form にはバリデーションのルールの一つに正規表現を使ったルールを書いた。 その正規表…