12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- from .cache import get_settings_cache, set_settings_cache
- from .models import Setting
- class DynamicSettings:
- _overrides = {}
- def __init__(self, cache_versions):
- self._settings = get_settings_cache(cache_versions)
- if self._settings is None:
- self._settings = get_settings_from_db()
- set_settings_cache(cache_versions, self._settings)
- def get_public_settings(self):
- public_settings = {}
- for name, setting in self._settings.items():
- if setting["is_public"]:
- public_settings[name] = setting["value"]
- return public_settings
- def get_lazy_setting_value(self, setting):
- try:
- if self._settings[setting]["is_lazy"]:
- if setting in self._overrides:
- return self._overrides[setting]
- if not self._settings[setting].get("real_value"):
- real_value = Setting.objects.get(setting=setting).value
- self._settings[setting]["real_value"] = real_value
- return self._settings[setting]["real_value"]
- raise ValueError("Setting %s is not lazy" % setting)
- except (KeyError, Setting.DoesNotExist):
- raise AttributeError("Setting %s is not defined" % setting)
- def __getattr__(self, setting):
- if setting in self._overrides:
- return self._overrides[setting]
- return self._settings[setting]["value"]
- @classmethod
- def override_settings(cls, overrides):
- cls._overrides = overrides
- @classmethod
- def remove_overrides(cls):
- cls._overrides = {}
- def get_cache_name(cache_versions):
- return "%s_%s" % (SETTINGS_CACHE, cache_versions[SETTINGS_CACHE])
- def get_settings_from_db():
- settings = {}
- for setting in Setting.objects.iterator():
- if setting.is_lazy:
- settings[setting.setting] = {
- 'value': True if setting.value else None,
- 'is_lazy': setting.is_lazy,
- 'is_public': setting.is_public,
- }
- else:
- settings[setting.setting] = {
- 'value': setting.value,
- 'is_lazy': setting.is_lazy,
- 'is_public': setting.is_public,
- }
- return settings
|