38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
from .exceptions import ConfigurationError
|
|
from .env import DJANGO_CONFIGURED, DJANGO_SETTINGS
|
|
|
|
|
|
class Conf(object):
|
|
_namespace = None
|
|
_settings = None
|
|
_has_been_configured = False
|
|
_configured_from_env = False
|
|
|
|
def __init__(self, namespace, settings):
|
|
self._namespace = namespace
|
|
self._settings = settings
|
|
if DJANGO_CONFIGURED:
|
|
overrides = getattr(DJANGO_SETTINGS, self._namespace, None)
|
|
if overrides:
|
|
self.configure(overrides)
|
|
self._configured_from_env = True
|
|
|
|
def configure(self, overrides):
|
|
if self._has_been_configured:
|
|
raise ConfigurationError('{namespace} already configured'.format(namespace=self._namespace))
|
|
self._has_been_configured = True
|
|
self._settings.update(overrides)
|
|
|
|
def get(self, name, default=None):
|
|
if name in self._settings:
|
|
return getattr(self, name)
|
|
return default
|
|
|
|
def keys(self):
|
|
return self._settings.keys()
|
|
|
|
def __getattr__(self, name):
|
|
if name in self._settings:
|
|
return self._settings[name]
|
|
raise ConfigurationError('setting "{name}" has not been defined'.format(name=name))
|