Как я могу использовать переменные окружения на INI-файл в пирамиде? - PullRequest
0 голосов
/ 25 мая 2018

Например, теперь у меня есть этот файл .ini:

[DEFAULT]
db_user = user_test
db_password = psw_test
db_host = localhost
db_name = db_test

...

Я хочу сделать:

export ENV_DB_USER=user_test
export ENV_DB_PSW=psw_test
export ENV_DB_HOST=localhost
export ENV_DB_NAME=db_test

Затем я хочу сделать что-то подобное в файле .ini:

[DEFAULT]
db_user = ${ENV_DB_USER}
db_password = ${ENV_DB_PSW}
db_host = ${ENV_DB_HOST}
db_name = ${ENV_DB_NAME}

...

Я пытался использовать синтаксис% (), но, к сожалению, не работает.Где я не так делаю?

Спасибо :)) 1012 *

1 Ответ

0 голосов
/ 25 мая 2018

К сожалению, они сейчас не поддерживаются - их нужно загружать во время выполнения, а не в самом INI-файле.Обычный подход в моих приложениях - это определение скрипта render-config, который принимает шаблон site.ini.in и передает его в site.ini, используя jinja2 с доступными ему переменными env.Это не очень приятно, но работает хорошо.

import jinja2
import os

def multiline(val):
    lines = (l.strip() for l in val.strip().split('\n'))
    return '\n    ' + '\n    '.join(lines)

def main(cli, args):
    env = jinja2.Environment(
        loader=jinja2.FileSystemLoader(os.getcwd()),
        undefined=jinja2.StrictUndefined,
    )
    env.filters['multiline'] = multiline

    template = env.get_template(args.template)
    result = template.render({
        'env': os.environ,
    })

    with open(args.config_file, 'w', encoding='utf8') as fp:
        fp.write(result)
...