LoginSignup
11
12

More than 5 years have passed since last update.

pyramid で 設定ファイルを読み込むコマンドの作り方

Posted at

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'>}

参考

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12