Redashで使われているPythonモジュールメモ
Redashのコードを追うときに知っておくとよさそうなモジュールを個人的にメモ。
コミットIDは以下のもので調べたので。バージョン違いなどで差異があると思う。
依存関係を調べる
requirements.txt
を読んでいってもいいけど、 pipdeptree
が便利そうだったので使った。
$ pipdeptree celery==3.1.23 - billiard [required: >=3.3.0.23,<3.4, installed: 3.3.0.23] - kombu [required: <3.1,>=3.0.34, installed: 3.0.37] - amqp [required: >=1.4.9,<2.0, installed: 1.4.9] - anyjson [required: >=0.3.3, installed: 0.3.3] - pytz [required: >dev, installed: 2016.7] Flask-Admin==1.4.2 - Flask [required: >=0.7, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] - wtforms [required: Any, installed: 2.1] Flask-Limiter==0.9.3 - Flask [required: >=0.8, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] - limits [required: Any, installed: 1.2.1] - six [required: >=1.4.1, installed: 1.10.0] - six [required: >=1.4.1, installed: 1.10.0] Flask-Login==0.4.0 - Flask [required: Any, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] Flask-Mail==0.9.1 - blinker [required: Any, installed: 1.3] - Flask [required: Any, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] Flask-Migrate==2.0.1 - alembic [required: >=0.6, installed: 0.9.6] - Mako [required: Any, installed: 1.0.7] - MarkupSafe [required: >=0.9.2, installed: 0.23] - python-dateutil [required: Any, installed: 2.4.2] - six [required: >=1.5, installed: 1.10.0] - python-editor [required: >=0.3, installed: 1.0.3] - SQLAlchemy [required: >=0.7.6, installed: 1.1.4] - Flask [required: >=0.9, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] - Flask-Script [required: >=0.6, installed: 2.0.6] - Flask [required: Any, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] - Flask-SQLAlchemy [required: >=1.0, installed: 2.1] - Flask [required: >=0.10, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] - SQLAlchemy [required: >=0.7, installed: 1.1.4] Flask-OAuthlib==0.9.3 - Flask [required: Any, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] - oauthlib [required: >=0.6.2, installed: 2.0.6] - requests-oauthlib [required: >=0.5.0, installed: 0.8.0] - oauthlib [required: >=0.6.2, installed: 2.0.6] - requests [required: >=2.0.0, installed: 2.11.1] Flask-RESTful==0.3.5 - aniso8601 [required: >=0.82, installed: 1.1.0] - python-dateutil [required: Any, installed: 2.4.2] - six [required: >=1.5, installed: 1.10.0] - Flask [required: >=0.8, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] - pytz [required: Any, installed: 2016.7] - six [required: >=1.3.0, installed: 1.10.0] Flask-SSLify==0.1.5 - Flask [required: Any, installed: 0.11.1] - click [required: >=2.0, installed: 6.6] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.8] - MarkupSafe [required: Any, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.11.11] funcy==1.7.1 gunicorn==19.7.1 honcho==0.5.0 httplib2==0.10.3 jsonschema==2.4.0 parsedatetime==2.1 passlib==1.6.2 pipdeptree==0.10.1 - pip [required: >=6.0.0, installed: 9.0.1] psycopg2==2.7.3.2 pysaml2==2.4.0 - argparse [required: Any, installed: 1.1] - decorator [required: Any, installed: 4.1.2] - paste [required: Any, installed: 2.0.3] - six [required: >=1.4.0, installed: 1.10.0] - pycrypto [required: >=2.2, installed: 2.6.1] - pyOpenSSL [required: Any, installed: 16.2.0] - cryptography [required: >=1.3.4, installed: 2.0.2] - asn1crypto [required: >=0.21.0, installed: 0.24.0] - cffi [required: >=1.7, installed: 1.11.2] - pycparser [required: Any, installed: 2.18] - enum34 [required: Any, installed: 1.1.6] - idna [required: >=2.1, installed: 2.6] - ipaddress [required: Any, installed: 1.0.19] - six [required: >=1.4.1, installed: 1.10.0] - six [required: >=1.5.2, installed: 1.10.0] - python-dateutil [required: Any, installed: 2.4.2] - six [required: >=1.5, installed: 1.10.0] - pytz [required: Any, installed: 2016.7] - repoze.who [required: Any, installed: 2.3] - setuptools [required: Any, installed: 38.2.5] - WebOb [required: Any, installed: 1.7.4] - zope.interface [required: Any, installed: 4.4.3] - setuptools [required: Any, installed: 38.2.5] - requests [required: >=1.0.0, installed: 2.11.1] - zope.interface [required: Any, installed: 4.4.3] - setuptools [required: Any, installed: 38.2.5] pystache==0.5.4 raven==6.0.0 - contextlib2 [required: Any, installed: 0.5.5] redis==2.10.5 RestrictedPython==3.6.0 - setuptools [required: Any, installed: 38.2.5] semver==2.2.1 simplejson==3.10.0 sqlparse==0.1.8 statsd==2.1.2 wheel==0.24.0 XlsxWriter==0.9.3
(自分にとって)重要そうなモジュール
Flask
Webアプリケーションフレームワーク。Djangoと並んで有名なのでよく使われている印象。
Redashのサーバーサイドで使われている。
Jinja2
Redashのサーバーサイドのテンプレートエンジン。
Click
Flaskと同じ作者だったはず。
SQLAlchemy
DB周りのいろいろ+ORM。Redashでは以前Peeweeが使われていたけど今はこっち。
Alembic
DBマイグレーションツール。SQLAlchemyと作者が同じっぽい。
Gunicorn
WSGIに対応したアプリケーションサーバー。Flaskはこの上で動いている。
Celery
タスクキュー。RedashのクエリはすべてCelery上で動く。
pystache
MustacheのPython実装。Redashではクエリにパラメータを埋め込むときに使われている。
RestrictedPython
制限付きのPythonを実行するためのモジュール。Pythonデータソースで使われている。
まとめ
データソースに関わるもの以外では、だいたいこなれたモジュールが使われていて、コードを読もうとしたらそれなりに読めるしわかる。というのもRedashの良さの一つかもしれない。
- 作者: 池内孝啓,鈴木たかのり,石本敦夫,小坂健二郎,真嘉比愛
- 出版社/メーカー: 技術評論社
- 発売日: 2015/10/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る