Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2011 16:33:30

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигурация приложения

Понятно что хранить конфигурацию в 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 никак не получается (различные метаклассы у них).
Передавать конфигурацию в конструктор модели я считаю несколько плохой идеей. Использовать некую глобальную переменную для конфига - тоже.

Собственно хотелось бы спросить совета, как реализовать правильное решение в данной ситуации.



Офлайн

#2 Март 28, 2011 16:40:25

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Конфигурация приложения

zheromo
Понятно что хранить конфигурацию в settings.py плохо
Отчего же, просто надо уметь этим пользоваться



Офлайн

#3 Март 28, 2011 16:58:29

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигурация приложения

Во Flaske как раз все понятно. Конфигурация - это есть атрибут приложения (у меня также в принципе). И доступен он везде через конструкцию

 from Flask import current_app
current_app.config
threading local так сказать в действии, хотелось бы обойтись без него



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version