Python

Flask-Featureflags で呼び出しを制限する

Flask-Featureflags というものを見つけた。 GitHub - trustrachel/Flask-FeatureFlags: A Flask extension that enables or disables features based on configuration.何をするものかというと、Flask でこの機能はまだ一部のユーザーにベータテストとして…

Injector の仕様変更

Flask-Injector を使っていて以下の様な警告が出た。 Injector Modules (ie. configure) should not be injected. This can result in non-deterministic initialization. Support will be removed in the next release of Injector.configure を直接注入す…

Alembic でデフォルト値を設定する

今までスキーマーの管理は普通に SQL ファイルで管理していた。 別に DDL を書くのは苦痛じゃないし分かり易いので良いんだけど、マイグレーションツールに Alembic を使ってみようと試している。 """Create users table. Revision ID: 197f6c68376 Revises:…

Autodo を decorator に依存するようにした

Python2.7 と Py.Test の組み合わせた場合に、examples にあるのが動かないと報告頂いた。 @pytest.fixture def setup(): setup = TestApp(create_app) return setup @autodoc.describe('POST /') def test_post(setup): res = setup.post_json('/', params=…

Autodoc 作った

Ruby の Autodoc や Perl の Test::JsonAPI::Autodoc を真似て Python の Autodoc を作った。 GitHub - heavenshell/py-autodoc: Autodoc Python implementation. # まだ PyPi にはアップしてないアップロードした。 もともと Jokk という Mock サーバを作っ…

Google 製の DI フレームワークの Pinject を試してみた

Google が作っている DI フレームワークに Pinject というのがあるのを知った。 Injector とどう違うのか試してみた。 詳しくは GitHub の Pinject のドキュメント参照。 # -*- coding: utf-8 -*- import pinject class Base(object): def save(self, path):…

Flask で Jinja2 に渡った context を確認したい

Flask の render_template() で Jinja2 にちゃんと context が渡ったかどうかテストしたい。 from flask import Blueprint, render_template app = Blueprint('index', __name__, url_prefix='/') @app.route('/') def index(): return render_template('ind…

factory_boy で遭遇したエラー

テストコードでテストデータを作る時に今までは以下のようにしてた。 from unittest import TestCase from models.user import User class TestUser(object): def setUp(self): self._init() def _init(): user = User(name='foo', password='pass') db_sess…

Python3.3 + SQLAlchemy + PyMySQL で発生したエラー

/tmp/python/virtualenvs/py3kproject/lib/python3.3/site-packages/pymysql/converters.py line 116 in convert_datetime if ' ' in obj: TypeError: Type str doesn't support the buffer APIってエラーが出た。 原因は SQLALCHEMY_DATABASE_URI = 'mysql+…

Flask-Injector を使ってモックに差し替える

Injector を使って DI してるんだから、テストコードからも置き換えたいよねーってお話。 # Mock を使って差し替える事も出来る app.py # -*- coding: utf-8 -*- from flask import Flask from flask.ext.injector import init_app, post_init_app from bind…

Flask-Injector で試したあれこれ

Flask-Injector を試してる時に、これはどうしたら良いんだろうというのがあったので、色々試してみた。 コンストラクタに引数を渡したい 色々試していて以下のようにコンストラクタに引数を受け取りたい場合はどうしたら良いのか試行錯誤した所、binds でイ…

Flask-Injector を試してみた

Python というか Flask でも DI コンテナ欲しいなーと思う事がある。 去年書いていたコードでは最初アップロードしたファイルの保存を Flask が動いているサーバのファイルシステムに保存していたが、後から RiakCS に保存するという仕様変更を行った。 こん…

Flask の拡張の Python3 対応

今年は本格的に Python3 に移行しようと重い腰を上げた。 まずは自作の Flask のプロジェクトジェネレータを Python3 対応にした。 Application factory 内で itereitems() を使っている所があったので、_compat.py を作りその中で iteritem をラップするも…

Flask-Restless を試してみる

API サーバとして Flask を使う場合にコードが簡略できそうなので、Flask-Restless を試してみた。 同様なプロダクトとして、Flask-Restful があるけど、Flask-Restless を選んでみたのは view を書かなくてよさそうだったから。 # 逆に言えば「おまかせ」に…

Flask-WTF0.9 で仕様変更

Flask-WTF0.8 を使っていて、0.9 にアップデートしたら色々互換性が無くなっていてハマった。 Field モジュールの廃止 0.8.x で動いてたコード from datetime import timedelta from flask.ext.wtf import Form, TextField, validators from flask.ext.babel…

Flask-SQLALchemy で multi-database をつかったのが動かない

Flask-SQLAlchemy を試してみるかと思って以下のようなのを書いた。 #!/usr/bin/env python # -*- coding: utf-8 -*- "" from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'…

QuickRun.vim で Python のテストを実行した際にモジュールが読み込まれない現象

メモ。 環境: Python2.7.4, MacVim Kaoriya 7.4.22, QuickRun.vim QuickRun-Unittest, vim-virtualenv Flask を使ってこんなコードを書いてた。app.py # -*- coding: utf-8 -*- from flask import Flask from flaskext.kvsession import KVSessionExtension…

Supervisor で Celery を管理

メモ。 [program:celery] command=celery -A foo.tasks.task worker -l debug -E environment=PYTHONPATH=%(here)s/../../barproject directory=%(here)s/../barproject autostart=true autorestart=true redirect_stderr=true stdout_logfile=%(here)s/../l…

dataset でマルチバイトが正しく処理されてない

dataset っていう Python でデータベースを簡単に扱うライブラリがある。 雰囲気的には以前書いた MoSQL と似た感じ。 dataset: databases for lazy people — dataset 1.0.8 documentation こっちはバックエンドに SQLAlchemy を利用している。 ドキュメント…

pip インストール元を Github のリポジトリを指定する

メモ。 requirement.txt にどうやって書くのか分からなかった。 こう書く。 -e git://github.com/bycoffe/python-placemaker.git#egg=placemakerアンインストールの方法。 $ pip uninstall placemakerみたいな egg の名前を指定すれば行けるのかと思ったけど…

MoSQL を試してみた

MoSQL って DB みたいな感じがするが、Python のライブラリ。 MoSQL — More than SQL — MoSQL v0.12.3 documentation 要は ORM を使う規模ではない、でも生の SQL を書くには苦痛という人向けのよう。 SQLAlchemy の Query オブジェクトみたいなのや SQLSoup…

jedi.vim

jedi.vim に Pull Request した - Memo で Pull Request して dev ブランチに取り込んで貰った物が jedi が 0.7 になって他の変更と共に master にマージされた。 jedi.vim の設定値もいくつか変更があった模様。 変更前 変更後 g:jedi#get_definition_comma…

Flask の Extension の Python3 対応状況

Flask がめでたく Python3.3 をサポートしたので、Flask に依存している Flask-Extension の Python3 対応状況が気になったので調べてみた。 #!/usr/bin/env python # -*- coding: utf-8 -*- import pprint import requests from bs4 import BeautifulSoup P…

jedi.vim に Pull Request した

jedi.vim をアップデートしたら以下の様な警告が表示された。 jedi-vim/jedi/jedi/api.py:209: DeprecationWarning: Use completions instead. warnings.warn("Use completions instead.", DeprecationWarning)補完自体は出来るが警告が気になったのでソース…

Riak CS を使ってみる

Riak が動いたので、Riak CS も試してみる。 Vagrant で作った CentOS 上に yum を使って Riak CS に必要なパッケージはインストール済み。 Riak CS は HTTP ポートに 8080 を使っているので、Virtual Box にポートフォワードさせる。 Vagrantfile に以下を…

Celery を使ってみる

昔ちょっと Celery を試した事があったが、ジョブキューなのが必要になったので再入門してみた。 WAF には Flask を使っている。 Celery には Flask の Extension があるが、Celery3.0 になってから非推奨になっており、Celery 本体の API を使う事が推奨さ…

raven-python で非同期に Sentry にイベントを投げる

昨日書いたやつで同期で Sentry にイベントを送りつけると送信元のサイトのパフォーマンスが遅くなるのが気になったので、非同期に送る方法がないか調べてみた。Github に raven-python/async.py at master · getsentry/raven-python · GitHub とかあるので…

イベントログ収集ツールの Sentry が凄そう

Disqus が作っている Sentry というツールが凄そうというお話。 # 元 Disqus の社員さんだったみたい Sentry って何かというと "Sentry is a realtime event logging and aggregation platform." と書いてる通りアプリケーションからイベントログを送信して…

meinheld でログを出す

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

Vim で Unicode エスケープシーケンスを変換

Vim で JSON 文字列なファイルを以下のようなコマンドを使って整形するとする。 :%!python -m json.tool綺麗にインデントが出て嬉しいけど、そこにマルチバイトな文字列があれば Unicode エスケープシーケンスにして変換してくれる。 Unicode エスケープシー…