Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(570)

Unified Diff: venv/Lib/site-packages/django/conf/__init__.py

Issue 554060043: testMe
Patch Set: Created 2 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: venv/Lib/site-packages/django/conf/__init__.py
===================================================================
new file mode 100644
--- /dev/null
+++ b/venv/Lib/site-packages/django/conf/__init__.py
@@ -0,0 +1,201 @@
+"""
+Settings and configuration for Django.
+
+Values will be read from the module specified by the DJANGO_SETTINGS_MODULE environment
+variable, and then from django.conf.global_settings; see the global settings file for
+a list of all possible variables.
+"""
+
+import importlib
+import os
+import time
+
+from django.conf import global_settings
+from django.core.exceptions import ImproperlyConfigured
+from django.utils.functional import LazyObject, empty
+
+ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
+
+
+class LazySettings(LazyObject):
+ """
+ A lazy proxy for either global Django settings or a custom settings object.
+ The user can manually configure settings prior to using them. Otherwise,
+ Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
+ """
+ def _setup(self, name=None):
+ """
+ Load the settings module pointed to by the environment variable. This
+ is used the first time we need any settings at all, if the user has not
+ previously configured the settings manually.
+ """
+ settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
+ if not settings_module:
+ desc = ("setting %s" % name) if name else "settings"
+ raise ImproperlyConfigured(
+ "Requested %s, but settings are not configured. "
+ "You must either define the environment variable %s "
+ "or call settings.configure() before accessing settings."
+ % (desc, ENVIRONMENT_VARIABLE))
+
+ self._wrapped = Settings(settings_module)
+
+ def __repr__(self):
+ # Hardcode the class name as otherwise it yields 'Settings'.
+ if self._wrapped is empty:
+ return '<LazySettings [Unevaluated]>'
+ return '<LazySettings "%(settings_module)s">' % {
+ 'settings_module': self._wrapped.SETTINGS_MODULE,
+ }
+
+ def __getattr__(self, name):
+ """
+ Return the value of a setting and cache it in self.__dict__.
+ """
+ if self._wrapped is empty:
+ self._setup(name)
+ val = getattr(self._wrapped, name)
+ self.__dict__[name] = val
+ return val
+
+ def __setattr__(self, name, value):
+ """
+ Set the value of setting. Clear all cached values if _wrapped changes
+ (@override_settings does this) or clear single values when set.
+ """
+ if name == '_wrapped':
+ self.__dict__.clear()
+ else:
+ self.__dict__.pop(name, None)
+ super(LazySettings, self).__setattr__(name, value)
+
+ def __delattr__(self, name):
+ """
+ Delete a setting and clear it from cache if needed.
+ """
+ super(LazySettings, self).__delattr__(name)
+ self.__dict__.pop(name, None)
+
+ def configure(self, default_settings=global_settings, **options):
+ """
+ Called to manually configure the settings. The 'default_settings'
+ parameter sets where to retrieve any unspecified values from (its
+ argument must support attribute access (__getattr__)).
+ """
+ if self._wrapped is not empty:
+ raise RuntimeError('Settings already configured.')
+ holder = UserSettingsHolder(default_settings)
+ for name, value in options.items():
+ setattr(holder, name, value)
+ self._wrapped = holder
+
+ @property
+ def configured(self):
+ """
+ Returns True if the settings have already been configured.
+ """
+ return self._wrapped is not empty
+
+
+class Settings(object):
+ def __init__(self, settings_module):
+ # update this dict from global settings (but only for ALL_CAPS settings)
+ for setting in dir(global_settings):
+ if setting.isupper():
+ setattr(self, setting, getattr(global_settings, setting))
+
+ # store the settings module in case someone later cares
+ self.SETTINGS_MODULE = settings_module
+
+ mod = importlib.import_module(self.SETTINGS_MODULE)
+
+ tuple_settings = (
+ "INSTALLED_APPS",
+ "TEMPLATE_DIRS",
+ "LOCALE_PATHS",
+ )
+ self._explicit_settings = set()
+ for setting in dir(mod):
+ if setting.isupper():
+ setting_value = getattr(mod, setting)
+
+ if (setting in tuple_settings and
+ not isinstance(setting_value, (list, tuple))):
+ raise ImproperlyConfigured("The %s setting must be a list or a tuple. " % setting)
+ setattr(self, setting, setting_value)
+ self._explicit_settings.add(setting)
+
+ if not self.SECRET_KEY:
+ raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
+
+ if hasattr(time, 'tzset') and self.TIME_ZONE:
+ # When we can, attempt to validate the timezone. If we can't find
+ # this file, no check happens and it's harmless.
+ zoneinfo_root = '/usr/share/zoneinfo'
+ if (os.path.exists(zoneinfo_root) and not
+ os.path.exists(os.path.join(zoneinfo_root, *(self.TIME_ZONE.split('/'))))):
+ raise ValueError("Incorrect timezone setting: %s" % self.TIME_ZONE)
+ # Move the time zone info into os.environ. See ticket #2315 for why
+ # we don't do this unconditionally (breaks Windows).
+ os.environ['TZ'] = self.TIME_ZONE
+ time.tzset()
+
+ def is_overridden(self, setting):
+ return setting in self._explicit_settings
+
+ def __repr__(self):
+ return '<%(cls)s "%(settings_module)s">' % {
+ 'cls': self.__class__.__name__,
+ 'settings_module': self.SETTINGS_MODULE,
+ }
+
+
+class UserSettingsHolder(object):
+ """
+ Holder for user configured settings.
+ """
+ # SETTINGS_MODULE doesn't make much sense in the manually configured
+ # (standalone) case.
+ SETTINGS_MODULE = None
+
+ def __init__(self, default_settings):
+ """
+ Requests for configuration variables not in this class are satisfied
+ from the module specified in default_settings (if possible).
+ """
+ self.__dict__['_deleted'] = set()
+ self.default_settings = default_settings
+
+ def __getattr__(self, name):
+ if name in self._deleted:
+ raise AttributeError
+ return getattr(self.default_settings, name)
+
+ def __setattr__(self, name, value):
+ self._deleted.discard(name)
+ super(UserSettingsHolder, self).__setattr__(name, value)
+
+ def __delattr__(self, name):
+ self._deleted.add(name)
+ if hasattr(self, name):
+ super(UserSettingsHolder, self).__delattr__(name)
+
+ def __dir__(self):
+ return sorted(
+ s for s in list(self.__dict__) + dir(self.default_settings)
+ if s not in self._deleted
+ )
+
+ def is_overridden(self, setting):
+ deleted = (setting in self._deleted)
+ set_locally = (setting in self.__dict__)
+ set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting)
+ return (deleted or set_locally or set_on_default)
+
+ def __repr__(self):
+ return '<%(cls)s>' % {
+ 'cls': self.__class__.__name__,
+ }
+
+
+settings = LazySettings()
« no previous file with comments | « venv/Lib/site-packages/django/bin/django-admin.py ('k') | venv/Lib/site-packages/django/conf/app_template/__init__.py-tpl » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b