|
15 | 15 | # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
16 | 16 | # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
17 | 17 | # |
18 | | -# $Id: instance.py,v 1.30 2004-11-10 08:58:47 a1s Exp $ |
| 18 | +# $Id: instance.py,v 1.31 2004-11-11 12:02:30 a1s Exp $ |
19 | 19 |
|
20 | 20 | '''Tracker handling (open tracker). |
21 | 21 |
|
@@ -56,6 +56,13 @@ def __init__(self, tracker_home, optimize=0): |
56 | 56 | # initialize tracker extensions |
57 | 57 | for extension in self.get_extensions('extensions'): |
58 | 58 | extension(self) |
| 59 | + # load database schema |
| 60 | + schemafilename = os.path.join(self.tracker_home, 'schema.py') |
| 61 | + # Note: can't use built-in open() |
| 62 | + # because of the global function with the same name |
| 63 | + schemafile = file(schemafilename, 'rt') |
| 64 | + self.schema = compile(schemafile.read(), schemafilename, 'exec') |
| 65 | + schemafile.close() |
59 | 66 | # load database detectors |
60 | 67 | self.detectors = self.get_extensions('detectors') |
61 | 68 | # db_open is set to True after first open() |
@@ -88,17 +95,20 @@ def open(self, name=None): |
88 | 95 | 'Number': hyperdb.Number, |
89 | 96 | 'db': backend.Database(self.config, name) |
90 | 97 | } |
91 | | - self._load_python('schema.py', vars) |
92 | | - db = vars['db'] |
93 | 98 |
|
94 | 99 | if self.optimize: |
| 100 | + # execute preloaded schema object |
| 101 | + exec(self.schema, vars) |
95 | 102 | # use preloaded detectors |
96 | 103 | detectors = self.detectors |
97 | 104 | else: |
| 105 | + # execute the schema file |
| 106 | + self._load_python('schema.py', vars) |
98 | 107 | # reload extensions and detectors |
99 | 108 | for extension in self.get_extensions('extensions'): |
100 | 109 | extension(self) |
101 | 110 | detectors = self.get_extensions('detectors') |
| 111 | + db = vars['db'] |
102 | 112 | # apply the detectors |
103 | 113 | for detector in detectors: |
104 | 114 | detector(db) |
|
0 commit comments