У меня есть два файла настроек:
- settings_commons.py, который содержит переменные, общие для всех экземпляров
- settings_prod.py prod instance-speci c vars
- settings_dev.py dev instance-speci c vars
У меня есть несколько переменных, которые задают пути для журналов, загрузок и т. Д. c. Эти пути зависят от MNT_DATA_DIR
, который отличается для каждого экземпляра (dev, prod, et c). Я не хочу, чтобы эти пути дублировались в каждом файле настроек экземпляра.
Что я делаю в settings_commons.py
MNT_DATA_DIR_DEPENDENT_VARS = (
('FILE_DIR', os.path.join('{MNT_DATA_DIR}', "file_root")),
('LOG_DIR', os.path.join('{MNT_DATA_DIR}', "logs", "lab")),
...
)
FILE_DIR_DEPENDENT_VARS = (
('IMPORT_DATA_DIR', os.path.join('{FILE_DIR}', "Import")),
('REMOTE_DATA_DIR', '{FILE_DIR}'),
...
)
А затем в файле, указанном экземпляром c file
from .settings_commons import *
MNT_DATA_DIR = '/mnt/dir'
for item in MNT_DATA_DIR_DEPENDENT_VARS:
globals()[item[0]] = item[1].format(MNT_DATA_DIR=MNT_DATA_DIR)
for item in FILE_DIR_DEPENDENT_VARS:
globals()[item[0]] = item[1].format(FILE_DIR=FILE_DIR)
Может ли такой подход вызвать какие-либо проблемы? Как насчет использования setattr()
вместо globals()
? Это правильный подход?