Никогда не думал, что столкнусь такой проблемой, но вот, столкнулся.
Есть проект на джанге и к ней три связанных (наследуемых?) конфигов.
settings.py опустим за ненадобностью – в нём храниться только то, что касается самой джанги;
config.py – центральный конфиг содержащий дефолтные значения;
local_config.py – локальный конфиг конкретного экземпляра проекта (не попадает под версионирование).
Идея в том, чтобы переопределять значения config.py значениями из local_config.py. Это нужно, например, для запуска нескольких разработческих хостов… В общем очень удобно.
Вот только организованно странно.
Вот кусочек config.py:
import sys
# Вот такая конструкция...
from local_config import *
__current_dict = sys.modules[__name__].__dict__
s = lambda x, y: __current_dict.setdefault(x, y)
# Вот такой пример использования...
s('WEB_SERVER_IP', '192.168.13.6') # None in case of dynamic IPs or specific address (string)
s('WEB_SERVER_PORT', None) # str
if WEB_SERVER_IP and WEB_SERVER_IP:
if WEB_SERVER_PORT and WEB_SERVER_PORT:
NGINX_LISTEN_DIRECTIVE_ATTRIBUTE = WEB_SERVER_IP + ':' + WEB_SERVER_PORT
else:
NGINX_LISTEN_DIRECTIVE_ATTRIBUTE = WEB_SERVER_IP
else:
NGINX_LISTEN_DIRECTIVE_ATTRIBUTE = WEB_SERVER_PORT
Собственно оно работает и, в общем-то, не плохо. Меня интересует, как можно сделать этот конфиг более наглядным.
Есть ли у кого-нить мысли по этому поводу?
P.S. За код не пинайте, он не мой.