1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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(self, setting):
- return self._settings.get(setting)
- 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]
- if setting in self._settings:
- return self._settings[setting]["value"]
- raise AttributeError("Setting %s is not defined" % setting)
- @classmethod
- def override_settings(cls, overrides):
- cls._overrides = overrides
- @classmethod
- def remove_overrides(cls):
- cls._overrides = {}
- def get_settings_from_db():
- settings = {}
- for setting in Setting.objects.iterator():
- settings[setting.setting] = {
- "value": None,
- "is_lazy": setting.is_lazy,
- "is_public": setting.is_public,
- "width": None,
- "height": None,
- }
- if setting.is_lazy:
- settings[setting.setting]["value"] = True if setting.value else None
- elif setting.python_type == "image":
- settings[setting.setting].update(
- {
- "value": setting.value.url if setting.value else None,
- "width": setting.image_width,
- "height": setting.image_height,
- }
- )
- else:
- settings[setting.setting]["value"] = setting.value
- return settings
|