settings.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.db.utils import DatabaseError
  2. from django.core.cache import cache
  3. from misago.settings.models import Setting
  4. class Settings(object):
  5. def __init__(self):
  6. self._settings = {}
  7. self._models = {}
  8. self.refresh()
  9. def refresh(self):
  10. self._models = cache.get('settings')
  11. if not self._models:
  12. self._models = {}
  13. try:
  14. for i in Setting.objects.all():
  15. self._models[i.pk] = i
  16. self._settings[i.pk] = i.get_value()
  17. cache.set('settings', self._models)
  18. except DatabaseError:
  19. pass
  20. else:
  21. for i, model in self._models.items():
  22. self._settings[i] = model.get_value()
  23. def __getattr__(self, key):
  24. return self._settings[key]
  25. def __contains__(self, key):
  26. return key in self._settings.keys()
  27. def __getitem__(self, key):
  28. return self._settings[key]
  29. def __setitem__(self, key, value):
  30. if key in self._settings.keys():
  31. self._models[key].set_value(value)
  32. self._models[key].save(force_update=True)
  33. self._settings[key] = value
  34. cache.set('settings', self._models)
  35. return value
  36. def __delitem__(self, key):
  37. pass
  38. def get(self, key, default=None):
  39. try:
  40. return self._settings[key]
  41. except KeyError:
  42. return None
  43. def has_key(self, key):
  44. return key in self._settings.keys()
  45. def keys(self):
  46. return self._settings.keys()
  47. def values(self):
  48. return self._settings.values()
  49. def items(self):
  50. return self._settings.items()
  51. def iterkeys(self):
  52. return self._settings.iterkeys()
  53. def itervalues(self):
  54. return self._settings.itervalues()
  55. def iteritems(self):
  56. return self._settings.iteritems()