django-constance/constance/base.py
2025-10-07 11:26:18 +02:00

31 lines
898 B
Python

from . import settings
from . import utils
class Config:
"""The global config wrapper that handles the backend."""
def __init__(self):
super().__setattr__("_backend", utils.import_module_attr(settings.BACKEND)())
def __getattr__(self, key):
try:
if len(settings.CONFIG[key]) not in (2, 3):
raise AttributeError(key)
default = settings.CONFIG[key][0]
except KeyError as e:
raise AttributeError(key) from e
result = self._backend.get(key)
if result is None:
result = default
setattr(self, key, default)
return result
return result
def __setattr__(self, key, value):
if key not in settings.CONFIG:
raise AttributeError(key)
self._backend.set(key, value)
def __dir__(self):
return settings.CONFIG.keys()