Не могу установить переменные окружения из файла yaml - PullRequest
0 голосов
/ 31 октября 2019

Я использовал environ для установки переменных окружения, но теперь мне нужно перейти на файл yml. Я сделал функцию, чтобы открыть мой yml файл и загрузить его, я думаю, что здесь все работает нормально. Затем в моем __init__.py я использую функцию, передал путь к файлу yml и затем использую app.config.from_object(data) для загрузки переменных среды в систему. Проблема в том, что переменные окружения, которые я установил в файле yml, не используются приложением, потому что я получил сообщение о том, что мой LDAPUSERNAME не может быть None.

Это был мой config.py, использующийenvironment:

LDAP_BASE_DN = os.environ.get('LDAP_BASE_DN', default= "dc=planetexpress,dc=com")
LDAP_USERNAME = os.environ.get('LDAP_USERNAME', default="CN=Hermes Conrad,ou=people,dc=planetexpress,dc=com")
LDAP_PASSWORD = os.environ.get('LDAP_PASSWORD', default="hermes")

Это мой файл yml, который я хочу использовать:

LDAP_BASE_DN: 'dc=planetexpress,dc=com'
LDAP_USERNAME: 'CN=Hermes Conrad,ou=people,dc=planetexpress,dc=com'
LDAP_OPENLDAP: 'yes'

yaml_loader.py


from yaml import load, Loader, dump, Dumper



def yaml(filepath):
    with open(filepath, 'r') as stream:

        data_loaded = load(stream, Loader=Loader)

        return data_loaded

init .py

app.config.from_object('dev_maintenance.config')---> "used to load the environ"

data = yaml_loader.yaml("/Users/pjose/Project/dev_maintenance/backend/config.yml")
app.config.from_object(data) ---> using now to load the yml

Не работает, не знаю, зачем нужна помощь?

1 Ответ

0 голосов
/ 31 октября 2019

Вам нужно будет установить записи среды самостоятельно на основе пар ключ-значение загруженного data:

import os
from yaml import load, Loader


yaml_str = """\
LDAP_BASE_DN: dc=planetexpress,dc=com
LDAP_USERNAME: CN=Hermes Conrad,ou=people,dc=planetexpress,dc=com
LDAP_OPENLDAP: 'yes'
"""

data = load(yaml_str, Loader=Loader)
for k in data:
    os.environ[k] = data[k]

Обратите внимание, что вам нужно заключить yes в PyYAML,все еще только реализует спецификацию YAML 1.1 (которая устарела более десяти лет), иначе он будет видеть yes как логическое значение. Другие цитаты, однако, не нужны.

...