12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- from django.conf import settings as dj_settings
- from django.core.cache import cache
- from misago.thread import local
- _thread_local = local()
- def load_settings():
- settings = cache.get('settings', {})
- if not settings:
- from misago.models import Setting
- for i in Setting.objects.all():
- settings[i.pk] = i.value
- cache.set('settings', settings)
- return settings
- class MisagoSettings(object):
- def __init__(self, local, safe):
- self.thread = local
- self.is_safe = safe
- def settings(self):
- try:
- return self.thread.settings
- except AttributeError:
- self.thread.settings = load_settings()
- return self.thread.settings
- def setting(self, key):
- try:
- try:
- if self.is_safe:
- return getattr(dj_settings, key)
- else:
- raise AttributeError()
- except AttributeError:
- try:
- return self.settings()[key]
- except KeyError:
- raise AttributeError()
- except AttributeError:
- raise Exception(u"Requested setting \"%s\" could not be found." % key)
- def __contains__(self, key):
- return key in self.settings()
- def __getitem__(self, key):
- return self.setting(key)
- def __getattr__(self, key):
- return self.setting(key)
- def __setitem__(self, key, value):
- from misago.models import Setting
- setting = Setting.objects.get(pk=key)
- setting.value = value
- setting.save(force_update=True)
- settings = MisagoSettings(_thread_local, True)
- def SafeSettings():
- """
- Safe settings factory for MisagoSettings
- """
- return MisagoSettings(_thread_local, False)
|