Найти - Пользователи
Полная версия: Конфигурация приложения
Начало » Python для экспертов » Конфигурация приложения
1
zheromo
Понятно что хранить конфигурацию в settings.py плохо :)

Сейчас реализовал сабж примерно так:
class ApplicationInstance(Component, ComponentManager):
implements(ITemplateLoader, ITranslationProvider)

def __init__(self):
super(ApplicationInstance, self).__init__()
self.config = self.load_config()
self.load_components()
...
def load_config(self):
return config_factory()
Т.е. на основании каких то условий, например режим отладки, переменная окружения и т.д. инстанс приложения получает свой конфиг.

Далее остальные компоненты имеют доступ к конфигу примерно следующим образом:

class Option(object):
'''Config option
'''

converter = lambda x:x

def __init__(self, section, name, default=None, doc=''):
self._section = section
self._name = name
self._default = default
self.__doc__ = doc

def __get__(self, instance, owner):
try:
return self.converter(instance.compmgr.config[self._section][self._name])
except AttributeError:
return self._default

def __set__(self, instance, value):
raise AttributeError, 'can\'t set attribute'

def __repr__(self):
return '<%s [%s] "%s">' % (self.__class__.__name__, self._section, self._name)

class IntOption(Option):
"""Descriptor for integer configuration options."""
converter = int


class SomeUsefulComponent(Component):
name = Option('main', 'name', doc='Name of component')
max_size = IntOption('main', 'max_buffer_size', 1024, 'Max size of buffer.')

def do_something(self):
print self.name
Все устраивает и все хорошо, кроме одной штуки. Потребовалось использовать значения из конфига в _моделях_, но наследовать их от компонента Component никак не получается (различные метаклассы у них).
Передавать конфигурацию в конструктор модели я считаю несколько плохой идеей. Использовать некую глобальную переменную для конфига - тоже.

Собственно хотелось бы спросить совета, как реализовать правильное решение в данной ситуации.
regall
zheromo
Понятно что хранить конфигурацию в settings.py плохо
Отчего же, просто надо уметь этим пользоваться
zheromo
Во Flaske как раз все понятно. Конфигурация - это есть атрибут приложения (у меня также в принципе). И доступен он везде через конструкцию
 from Flask import current_app
current_app.config
threading local так сказать в действии, хотелось бы обойтись без него
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB