Flask の拡張の Python3 対応
今年は本格的に Python3 に移行しようと重い腰を上げた。
まずは自作の Flask のプロジェクトジェネレータを Python3 対応にした。
Application factory 内で itereitems() を使っている所があったので、_compat.py を作りその中で iteritem をラップするものを作る。
# これ自体は Werkzeug の _compat.py を真似た。
PY2 = sys.version_info[0] == 2 if PY2: text_type = unicode iterkeys = lambda d: d.iterkeys() itervalues = lambda d: d.itervalues() iteritems = lambda d: d.iteritems() else: text_type = str iterkeys = lambda d: iter(d.keys()) itervalues = lambda d: iter(d.values()) iteritems = lambda d: iter(d.items())
Virtualenv で Python3 な環境を作りテストコードを走らせサクッと確認完了。
続いて Flask でアプリケーションを作る際によく使っていた拡張が対応してるか調べた。
extenstion 名 | 対応? | 備考 |
Flask-Cache | ok | キャッシュライブラリ |
Flask-Principal | ok | 権限関連のライブラリ |
Flask-WTF | ok | フォーム |
Flask-Mail | ok | メール送信 |
Flask-Script | ok | Cli ライブラリ |
Flask-Babel | ok | 国際化関連 |
Flask-OpenID | ng | OpenID |
Flask-Assets | ng | JavaScript を一つにまとめたり |
Flask-Uploads | ng | ファイルアップロード |
Flask-OAuth | ng | OAuth |
Flask-KVSession | ng | Flask の Session を Redis とかに差し替える |
対応していないので無いと困るなぁというのが Flask-KVSession。
Flask のデフォルトのセッションは Cookie(Rails でいう CookieStore)で、これをサーバサイド(Redis とか Memcached とか)に簡単に差し替えるライブラリ。
ライブラリを使わずに自前でやる場合これを使えばいけそう。
Server-side Sessions with Redis | Flask (A Python Microframework)
あるいは Beaker と Flask を使うのがあるので、それを使えばいけるか?
もう少し考えてみる事にする。
ファイルのアップロードは WTForms のアップロード機能を使えば良い。
Creating Forms — Flask-WTF 0.15
OAuth は Flask-OAuthlib というライブラリがありそっちは Python3 対応しているので、OAuth が必要な場合はそれを使えばよさそう。
Flask-OAuthlib — Flask-OAuthlib 0.9.5 documentation
Flask-Assets で JavaScript とかを一つにまとめるのは、Grunt とかそっちを使って、Node.js でタスクを作っちゃった方が良さそう。
OpenID は…もう使う事があんまりなさそう…。
フルスタックな FW よりも自分でライブラリを組み合わせて作る FW の方が好みだけど、こういう場合に統一が取れなくて困る。
あ、あと Python のライブラリを作る人 tox 使って…。
# tox.ini を見れば対応しているバージョン分かるから
もっともちゃんと tox を使ってる人はちゃんと Python3 対応してるのが多い気がする。