Как получить доступ к пользовательскому разделу в файле Pyramid .ini?
В настоящее время я пишу сервис сбора данных для нескольких сервисов. Вероятно, есть 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, но я хотел спросить, есть ли сначала какой-нибудь более простой способ в Пирамиде.
1 ответ
Если вы хотите сделать это, вам придется проанализировать файл конфигурации самостоятельно. Поведение изоляции раздела, которое вы видите, является преднамеренным.
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 начальный анализ был сделан подключаемым, и была создана новая библиотека для помощи в загрузке произвольных разделов файла стандартным способом. Ниже приведен обновленный пример:
import plaster
def main(global_conf, **settings):
user_settings = plaster.get_settings(global_conf['here'], 'user:sg:qa')
for k, v in user_settings.items():
settings['user:sg:qa:' + k] = v
config = Configurator(settings=settings)