Как я могу использовать системную переменную среды внутри INI-файла пирамиды?

Я экспортировал переменную с именем DBURL='postgresql://string'и я хочу использовать его в моем файле конфигурации INI, например:

[app:kotti]
sqlalchemy.url = %(DBURL)s

Это не работает.

2 ответа

Решение

Поместите это в свой __init__.py:

def expandvars_dict(settings):
    """Expands all environment variables in a settings dictionary."""
    return dict((key, os.path.expandvars(value)) for
                key, value in settings.items())

Затем, когда вы экспортируете переменную окружения в вашу оболочку, правильный синтаксис таков:

sqlalchemy.url = ${DBURL}

Как только у вас есть эта переменная среды, установленная в вашем .ini, тогда вы можете использовать синтаксис configparser:

sqlalchemy.connection = %(sqlalchemy.url)s%(user:pass and other stuff)s

Идея украдена с /questions/10421615/v-veb-frejmvorke-pyramid-kak-ya-mogu-poluchit-konfidentsialnyie-nastrojki-v-developmentini-productionini-iz-vneshnego-fajla/10421629#10421629

PasteDeploy (здесь используется пирамида формата ini) не поддерживает чтение непосредственно из переменных среды. Пара общих вариантов:

1) Установите эту опцию самостоятельно в своем main,

import os

def main(global_config, **settings):
    settings['sqlalchemy.url'] = os.environ['DBURL']
    config = Configurator(settings=settings)
    ...

2) Определите свой INI-файл как шаблон jinja2 и получите команду для его вывода в INI-формат, и просто запустите его как часть процесса развертывания.

Другие вопросы по тегам