pyramid で 設定ファイルを読み込むコマンドの作り方
pyramidは実行する際に設定ファイルを引数として取るコマンドがデフォルトで提供されている。(e.g. pserve, proutes ...)
既存のコマンドは、設定ファイルに書かれた内容をparserで読み込む以上のことをしてくれている。
自分で新しいコマンドを作成する際にも同様のことを行いたい。
このようなときには、pyramid.paster.bootstrap以下の関数を使う。
pyramid.paster.bootstrap
pyramid.paster.bootstrapは設定ファイルのパスを引数に取り、設定ファイルに書かれたエントリーポイントに登録されている関数(通常はappのmain())を実行してくれる。実行した後戻り値のappなどを持つ辞書を返す。
bootstrapで呼ばれる関数
development.ini が以下の様に書かれている時
[app:main]
use = egg:qiita
setup.pyでエントリーポイントが登録されているので。
setup(name='qiita',
...
entry_points="""\
[paste.app_factory]
main = qiita:main
""",
...
)
qiita.main()が呼ばれる。
設定ファイルを読み込むコマンドを作成する方法
以下のようなファイル構造で設定ファイルを読み込むコマンドを作成する方法。
$ tree
.
|-- development.ini
|-- production.ini
|-- qiita
| |-- __init__.py
| |-- scripts.py
| `-- views.py
`-- setup.py
qiita/scripts.pyに作成するコマンドの実装を書く。
bootstrapを利用して以下の様に作成。
今回はbootstrapの戻り値をprintするだけのコマンド。
# -*- coding:utf-8 -*-
from pyramid.paster import bootstrap
import sys
import pprint
def sample(args=sys.argv):
config_path = sys.argv[1]
env = bootstrap(config_path)
pprint.pprint(env)
setup.pyにconsole_scriptsの記述追加する。
qiita-sampleという名前で登録することにする。
setup(name='qiita',
...
entry_points="""\
[paste.app_factory]
main = qiita:main
[console_scripts]
qiita-sample = qiita.scripts:sample
""",
...
)
setup.pyでインストールし直した後、登録したqiita-sampleが使えるようになる。
設定ファイルを指定してqiita-sampleを実行するとappをloadingした環境が手に入る。
$ python setup.py develop
$ qiita-sample development.ini
{'app': <pyramid.router.Router object at 0x10edd2990>,
'closer': <function prepare.<locals>.closer at 0x10f30e440>,
'registry': <Registry qiita>,
'request': <Request at 0x10e140d90 GET http://localhost/>,
'root': <pyramid.traversal.DefaultRootFactory object at 0x10ede9f10>,
'root_factory': <class 'pyramid.traversal.DefaultRootFactory'>}