79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
"""
|
|
Export Django settings to templates
|
|
|
|
https://github.com/jakubroztocil/django-settings-export
|
|
|
|
"""
|
|
from django.conf import settings as django_settings
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
|
|
|
|
__version__ = '1.2.1'
|
|
|
|
|
|
VARIABLE_NAME = getattr(django_settings,
|
|
'SETTINGS_EXPORT_VARIABLE_NAME',
|
|
'settings')
|
|
|
|
|
|
class SettingsExportError(ImproperlyConfigured):
|
|
"""Base error indicating misconfiguration."""
|
|
|
|
|
|
class UndefinedSettingError(SettingsExportError):
|
|
"""An undefined setting name included in SETTINGS_EXPORT."""
|
|
|
|
|
|
class UnexportedSettingError(SettingsExportError):
|
|
"""An unexported setting has been accessed from a template."""
|
|
|
|
|
|
def settings_export(request):
|
|
"""
|
|
The template context processor that adds settings defined in
|
|
`SETTINGS_EXPORT` to the context. If SETTINGS_EXPORT_VARIABLE_NAME is not
|
|
set, the context variable will be `settings`.
|
|
|
|
"""
|
|
variable_name = getattr(django_settings,
|
|
'SETTINGS_EXPORT_VARIABLE_NAME',
|
|
'settings')
|
|
return {
|
|
variable_name: _get_exported_settings()
|
|
}
|
|
|
|
|
|
class ExportedSettings(dict):
|
|
|
|
def __getitem__(self, item):
|
|
"""Fail loudly if accessing a setting that is not exported."""
|
|
try:
|
|
return super(ExportedSettings, self).__getitem__(item)
|
|
except KeyError:
|
|
if hasattr(self, item):
|
|
# Let the KeyError propagate so that Django templates
|
|
# can access the existing attribute (e.g. `items()`).
|
|
raise
|
|
raise UnexportedSettingError(
|
|
'The `{key}` setting key is not accessible'
|
|
' from templates: add "{key}" to'
|
|
' `settings.SETTINGS_EXPORT` to change that.'
|
|
.format(key=item)
|
|
)
|
|
|
|
|
|
def _get_exported_settings():
|
|
exported_settings = ExportedSettings()
|
|
for key in getattr(django_settings, 'SETTINGS_EXPORT', []):
|
|
try:
|
|
value = getattr(django_settings, key)
|
|
except AttributeError:
|
|
raise UndefinedSettingError(
|
|
'"settings.%s" is included in settings.SETTINGS_EXPORT '
|
|
'but it does not exist. '
|
|
% key
|
|
)
|
|
exported_settings[key] = value
|
|
return exported_settings
|
|
|