1 """
2 Settings and configuration for Django.
3
4 Values will be read from the module specified by the DJANGO_SETTINGS_MODULE environment
5 variable, and then from django.conf.global_settings; see the global settings file for
6 a list of all possible variables.
7 """
8
9 import os
10 import time
11 from django.conf import global_settings
12
13 ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
14
16 """
17 A lazy proxy for either global Django settings or a custom settings object.
18 The user can manually configure settings prior to using them. Otherwise,
19 Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
20 """
22
23
24 self._target = None
25
33
43
45 """
46 Load the settings module pointed to by the environment variable. This
47 is used the first time we need any settings at all, if the user has not
48 previously configured the settings manually.
49 """
50 try:
51 settings_module = os.environ[ENVIRONMENT_VARIABLE]
52 if not settings_module:
53 raise KeyError
54 except KeyError:
55
56
57 raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
58
59 self._target = Settings(settings_module)
60
73
76
77 for setting in dir(global_settings):
78 if setting == setting.upper():
79 setattr(self, setting, getattr(global_settings, setting))
80
81
82 self.SETTINGS_MODULE = settings_module
83
84 try:
85 mod = __import__(self.SETTINGS_MODULE, {}, {}, [''])
86 except ImportError, e:
87 raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
88
89
90
91 tuple_settings = ("INSTALLED_APPS", "TEMPLATE_DIRS")
92
93 for setting in dir(mod):
94 if setting == setting.upper():
95 setting_value = getattr(mod, setting)
96 if setting in tuple_settings and type(setting_value) == str:
97 setting_value = (setting_value,)
98 setattr(self, setting, setting_value)
99
100
101
102 new_installed_apps = []
103 for app in self.INSTALLED_APPS:
104 if app.endswith('.*'):
105 appdir = os.path.dirname(__import__(app[:-2], {}, {}, ['']).__file__)
106 for d in os.listdir(appdir):
107 if d.isalpha() and os.path.isdir(os.path.join(appdir, d)):
108 new_installed_apps.append('%s.%s' % (app[:-2], d))
109 else:
110 new_installed_apps.append(app)
111 self.INSTALLED_APPS = new_installed_apps
112
113 if hasattr(time, 'tzset'):
114
115
116 os.environ['TZ'] = self.TIME_ZONE
117 time.tzset()
118
121
123 """
124 Holder for user configured settings.
125 """
126
127
128 SETTINGS_MODULE = None
129
131 """
132 Requests for configuration variables not in this class are satisfied
133 from the module specified in default_settings (if possible).
134 """
135 self.default_settings = default_settings
136
138 return getattr(self.default_settings, name)
139
141 return dir(self) + dir(self.default_settings)
142
143 settings = LazySettings()
144