7

現在、複数のサービスのデータ収集サービスを作成しています。ホストとポート番号が異なる、おそらく 5 つの異なる API エンドポイントがあります。このための設定ファイルを作成したかったのですが、.iniの方が適切な場所である必要があると考えたので、 ...

私の development.ini は次のようになります。

[app:main]
use = egg:awesomeproject
auth.tkt = 'abc'
auth.secret = 'I love python'

mongodb.host = 'somehost'
mongodb.port= 6379

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543

[user:sg:qa]
host = 127.0.0.1
port = 1234

[customer:sg:qa]
host = 127.0.0.2
port = 4567

次のようなピラミッド イベント内のカスタム セクションにアクセスしようとしました。

def add_api_path(event):
    request = event.request
    settings = request.registry.settings
    _type = 'customer:sg:qa'
    base_config = settings[_type]

[app:main]しかし、設定は実際には属性の辞書であるため、うまくいきませんでした。ピラミッドの方法でセクションにアクセスする方法を教えてもらえますか? ConfigParser を使用する別の方法について読みましたが、最初に Pyramid で他に簡単な方法があるかどうかを尋ねたかったのです。

4

1 に答える 1

7

それを行いたい場合は、構成ファイルを自分で解析する必要があります。表示されているセクション分離動作は意図的なものです。

def main(global_conf, **settings):
    parser = ConfigParser({'here': global_conf['__here__']})
    parser.read(global_conf['__file__'])
    for k, v in parser.items('user:sg:qa'):
        settings['user:sg:qa:' + k] = v

    config = Configurator(settings=settings)

その後、設定を取得できます。

request.registry.settings['user:sg:qa:host']

アップデート

Pyramid 1.9 では、ini 解析がプラグ可能になり、標準的な方法でファイルの任意のセクションをロードするのを支援する新しいライブラリが作成されました。以下は、更新された例です。

import plaster

def main(global_conf, **settings):
    user_settings = plaster.get_settings(global_conf['__file__'], 'user:sg:qa')
    for k, v in user_settings.items():
        settings['user:sg:qa:' + k] = v

    config = Configurator(settings=settings)
于 2013-10-30T15:12:30.977 に答える