276dd01067b1d462b49321aa86c25b36cbed0718
[tools/itest-core.git] / itest / conf / __init__.py
1 '''
2 These LazyObject, LazySettings and Settings are mainly copied from Django
3 '''
4
5 import os
6 import imp
7 import time
8
9
10 class Settings(object):
11
12     def __init__(self):
13         self.env_root = None
14         self.cases_dir = None
15         self.fixtures_dir = None
16
17     def load(self, mod):
18         for name in dir(mod):
19             if name == name.upper():
20                 setattr(self, name, getattr(mod, name))
21
22         if hasattr(self, 'TZ') and self.TZ:
23             os.environ['TZ'] = self.TZ
24             time.tzset()
25
26     def setup_test_project(self, test_project_root):
27         self.env_root = os.path.abspath(test_project_root)
28         self.cases_dir = os.path.join(self.env_root, self.CASES_DIR)
29         self.fixtures_dir = os.path.join(self.env_root, self.FIXTURES_DIR)
30
31
32 settings = Settings()
33
34
35 def load_settings(test_project_root=None):
36     global settings
37
38     mod = __import__('itest.conf.global_settings',
39                      fromlist=['global_settings'])
40     settings.load(mod)
41
42     if test_project_root:
43         settings_py = os.path.join(test_project_root, 'settings.py')
44         try:
45             mod = imp.load_source('settings', settings_py)
46         except (ImportError, IOError), e:
47             raise ImportError("Could not import settings '%s' (Is it on "
48                               "sys.path?): %s" % (settings_py, e))
49         settings.load(mod)
50         settings.setup_test_project(test_project_root)