Mercurial > p > roundup > code
annotate roundup/instance.py @ 4796:f61bd780892e 1.5.0
Release preparation
| author | Ralf Schlatterbeck <rsc@runtux.com> |
|---|---|
| date | Sat, 06 Jul 2013 12:50:52 +0200 |
| parents | 6e9b9743de89 |
| children | 7920d700e580 5251e97b1de0 |
| rev | line source |
|---|---|
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
1 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
6 # |
| 214 | 7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
11 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
2621
d344419d599d
use new style config;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2584
diff
changeset
|
17 # |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
18 |
| 4388 | 19 """Top-level tracker interface. |
| 20 | |
| 21 Open a tracker with: | |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
380
diff
changeset
|
22 |
| 4388 | 23 >>> from roundup import instance |
| 24 >>> db = instance.open('path to tracker home') | |
| 25 | |
| 26 The "db" handle you get back is the tracker's hyperdb which has the interface | |
| 4395 | 27 described in `roundup.hyperdb.Database`. |
| 4083 | 28 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1953
diff
changeset
|
29 __docformat__ = 'restructuredtext' |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
31 import os |
|
3771
bf660e65ba45
Directory structure changes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
2977
diff
changeset
|
32 import sys |
|
2977
9c8de04a76b1
unit test fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2933
diff
changeset
|
33 from roundup import configuration, mailgw |
| 4083 | 34 from roundup import hyperdb, backends, actions |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
35 from roundup.cgi import client, templating |
| 4083 | 36 from roundup.cgi import actions as cgi_actions |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
37 |
|
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
38 class Tracker: |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
39 def __init__(self, tracker_home, optimize=0): |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
40 """New-style tracker instance constructor |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
41 |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
42 Parameters: |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
43 tracker_home: |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
44 tracker home directory |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
45 optimize: |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
46 if set, precompile html templates |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
47 |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
48 """ |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
49 self.tracker_home = tracker_home |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
50 self.optimize = optimize |
|
4211
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4083
diff
changeset
|
51 # if set, call schema_hook after executing schema.py will get |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4083
diff
changeset
|
52 # same variables (in particular db) as schema.py main purpose is |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4083
diff
changeset
|
53 # for regression tests |
|
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4083
diff
changeset
|
54 self.schema_hook = None |
|
2647
8c46091c36d0
Main Roundup configuration class renamed to CoreConfig.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2638
diff
changeset
|
55 self.config = configuration.CoreConfig(tracker_home) |
| 4083 | 56 self.actions = {} |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
57 self.cgi_actions = {} |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
58 self.templating_utils = {} |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
59 |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
60 libdir = os.path.join(self.tracker_home, 'lib') |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
61 self.libdir = os.path.isdir(libdir) and libdir or '' |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
62 |
|
4592
7b7cfb4b00eb
Fix improvements on instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4588
diff
changeset
|
63 self.load_interfaces() |
|
4721
ec359e7c6c95
Rename templating.get_templates to get_loader
anatoly techtonik <techtonik@gmail.com>
parents:
4720
diff
changeset
|
64 self.templates = templating.get_loader(self.config["TEMPLATES"], |
|
4592
7b7cfb4b00eb
Fix improvements on instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4588
diff
changeset
|
65 self.config["TEMPLATE_ENGINE"]) |
|
7b7cfb4b00eb
Fix improvements on instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4588
diff
changeset
|
66 self.backend = backends.get_backend(self.get_backend_name()) |
|
7b7cfb4b00eb
Fix improvements on instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4588
diff
changeset
|
67 |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
68 if self.optimize: |
|
4748
e339583eae8e
templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents:
4722
diff
changeset
|
69 self.templates.precompile() |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
70 # initialize tracker extensions |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
71 for extension in self.get_extensions('extensions'): |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
72 extension(self) |
|
2902
f50b867747c9
if optimize is set, load the schema file in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2891
diff
changeset
|
73 # load database schema |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
74 self.schema = self._compile('schema.py') |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
75 # load database detectors |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
76 self.detectors = self.get_extensions('detectors') |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
77 # db_open is set to True after first open() |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
78 self.db_open = 0 |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
79 |
|
2736
402d6d556558
postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents:
2701
diff
changeset
|
80 def get_backend_name(self): |
|
4508
996cc758f704
the "file" alias was introduced some time after this code was written
Richard Jones <richard@users.sourceforge.net>
parents:
4506
diff
changeset
|
81 f = file(os.path.join(self.config.DATABASE, 'backend_name')) |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
82 name = f.readline().strip() |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
83 f.close() |
|
2736
402d6d556558
postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents:
2701
diff
changeset
|
84 return name |
|
402d6d556558
postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents:
2701
diff
changeset
|
85 |
|
2796
7f1e17aeca1b
journaltag is optional
Richard Jones <richard@users.sourceforge.net>
parents:
2736
diff
changeset
|
86 def open(self, name=None): |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
87 # load the database schema |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
88 # we cannot skip this part even if self.optimize is set |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
89 # because the schema has security settings that must be |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
90 # applied to each database instance |
|
2890
938915fbcb49
get_backend_name() is a lengthy thing (file I/O).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2856
diff
changeset
|
91 backend = self.backend |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
92 env = { |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
93 'Class': backend.Class, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
94 'FileClass': backend.FileClass, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
95 'IssueClass': backend.IssueClass, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
96 'String': hyperdb.String, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
97 'Password': hyperdb.Password, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
98 'Date': hyperdb.Date, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
99 'Link': hyperdb.Link, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
100 'Multilink': hyperdb.Multilink, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
101 'Interval': hyperdb.Interval, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
102 'Boolean': hyperdb.Boolean, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
103 'Number': hyperdb.Number, |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
104 'db': backend.Database(self.config, name) |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
105 } |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
106 |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
107 if self.optimize: |
|
2902
f50b867747c9
if optimize is set, load the schema file in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2891
diff
changeset
|
108 # execute preloaded schema object |
|
4606
48b73776601c
More fix for improvements on instance.py.
Cheer Xiao <xiaqqaix@gmail.com>
parents:
4592
diff
changeset
|
109 self._exec(self.schema, env) |
|
4211
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4083
diff
changeset
|
110 if callable (self.schema_hook): |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
111 self.schema_hook(**env) |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
112 # use preloaded detectors |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
113 detectors = self.detectors |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
114 else: |
|
2902
f50b867747c9
if optimize is set, load the schema file in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2891
diff
changeset
|
115 # execute the schema file |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
116 self._execfile('schema.py', env) |
|
4211
61cf00ca920a
Process each message through the mail gateway as a separate transaction.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4083
diff
changeset
|
117 if callable (self.schema_hook): |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
118 self.schema_hook(**env) |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
119 # reload extensions and detectors |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
120 for extension in self.get_extensions('extensions'): |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
121 extension(self) |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
122 detectors = self.get_extensions('detectors') |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
123 db = env['db'] |
| 4781 | 124 db.tx_Source = None |
| 125 | |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
126 # apply the detectors |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
127 for detector in detectors: |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
128 detector(db) |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
129 # if we are running in debug mode |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
130 # or this is the first time the database is opened, |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
131 # do database upgrade checks |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
132 if not (self.optimize and self.db_open): |
|
4266
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
133 # As a consistency check, ensure that every link property is |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
134 # pointing at a defined class. Otherwise, the schema is |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
135 # internally inconsistent. This is an important safety |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
136 # measure as it protects against an accidental schema change |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
137 # dropping a table while there are still links to the table; |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
138 # once the table has been dropped, there is no way to get it |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
139 # back, so it is important to drop it only if we are as sure |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
140 # as possible that it is no longer needed. |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
141 classes = db.getclasses() |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
142 for classname in classes: |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
143 cl = db.getclass(classname) |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
144 for propname, prop in cl.getprops().iteritems(): |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
145 if not isinstance(prop, (hyperdb.Link, |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
146 hyperdb.Multilink)): |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
147 continue |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
148 linkto = prop.classname |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
149 if linkto not in classes: |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
150 raise ValueError, \ |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
151 ("property %s.%s links to non-existent class %s" |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
152 % (classname, propname, linkto)) |
|
2b75274936bc
Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents:
4211
diff
changeset
|
153 |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
154 db.post_init() |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
155 self.db_open = 1 |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
156 return db |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
157 |
|
2697
d138df58b0c3
load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2688
diff
changeset
|
158 def load_interfaces(self): |
|
d138df58b0c3
load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2688
diff
changeset
|
159 """load interfaces.py (if any), initialize Client and MailGW attrs""" |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
160 env = {} |
|
2697
d138df58b0c3
load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2688
diff
changeset
|
161 if os.path.isfile(os.path.join(self.tracker_home, 'interfaces.py')): |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
162 self._execfile('interfaces.py', env) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
163 self.Client = env.get('Client', client.Client) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
164 self.MailGW = env.get('MailGW', mailgw.MailGW) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
165 self.TemplatingUtils = env.get('TemplatingUtils', templating.TemplatingUtils) |
|
2697
d138df58b0c3
load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2688
diff
changeset
|
166 |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
167 def get_extensions(self, dirname): |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
168 """Load python extensions |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
169 |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
170 Parameters: |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
171 dirname: |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
172 extension directory name relative to tracker home |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
173 |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
174 Return value: |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
175 list of init() functions for each extension |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
176 |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
177 """ |
|
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
178 extensions = [] |
|
2688
eb14c12813a0
fix load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2677
diff
changeset
|
179 dirpath = os.path.join(self.tracker_home, dirname) |
|
eb14c12813a0
fix load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2677
diff
changeset
|
180 if os.path.isdir(dirpath): |
|
3771
bf660e65ba45
Directory structure changes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
2977
diff
changeset
|
181 sys.path.insert(1, dirpath) |
|
2688
eb14c12813a0
fix load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2677
diff
changeset
|
182 for name in os.listdir(dirpath): |
|
2677
1f0143b53bee
fix .load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2647
diff
changeset
|
183 if not name.endswith('.py'): |
|
1f0143b53bee
fix .load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2647
diff
changeset
|
184 continue |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
185 env = {} |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
186 self._execfile(os.path.join(dirname, name), env) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
187 extensions.append(env['init']) |
|
3773
21ff756e4549
Fixes for directory handling.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3771
diff
changeset
|
188 sys.path.remove(dirpath) |
|
2891
bc72b1c7319b
if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2890
diff
changeset
|
189 return extensions |
|
2638
18e86941c950
Load up extensions in the tracker "extensions" directory.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
190 |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
191 def init(self, adminpw): |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
192 db = self.open('admin') |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
193 self._execfile('initial_data.py', {'db': db, 'adminpw': adminpw, |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
194 'admin_email': self.config['ADMIN_EMAIL']}) |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
195 db.commit() |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
196 db.close() |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
197 |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
198 def exists(self): |
|
2890
938915fbcb49
get_backend_name() is a lengthy thing (file I/O).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2856
diff
changeset
|
199 return self.backend.db_exists(self.config) |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
200 |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
201 def nuke(self): |
|
2890
938915fbcb49
get_backend_name() is a lengthy thing (file I/O).
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2856
diff
changeset
|
202 self.backend.db_nuke(self.config) |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
203 |
|
4588
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
204 def _compile(self, fname): |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
205 fname = os.path.join(self.tracker_home, fname) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
206 return compile(file(fname).read(), fname, 'exec') |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
207 |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
208 def _exec(self, obj, env): |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
209 if self.libdir: |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
210 sys.path.insert(1, self.libdir) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
211 exec(obj, env) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
212 if self.libdir: |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
213 sys.path.remove(self.libdir) |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
214 return env |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
215 |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
216 def _execfile(self, fname, env): |
|
7017c8dd704c
Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4587
diff
changeset
|
217 self._exec(self._compile(fname), env) |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
218 |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
219 def registerAction(self, name, action): |
| 4083 | 220 |
| 221 # The logic here is this: | |
| 222 # * if `action` derives from actions.Action, | |
| 223 # it is executable as a generic action. | |
| 224 # * if, moreover, it also derives from cgi.actions.Bridge, | |
| 225 # it may in addition be called via CGI | |
| 226 # * in all other cases we register it as a CGI action, without | |
| 227 # any check (for backward compatibility). | |
| 228 if issubclass(action, actions.Action): | |
| 229 self.actions[name] = action | |
| 230 if issubclass(action, cgi_actions.Bridge): | |
| 231 self.cgi_actions[name] = action | |
| 232 else: | |
| 233 self.cgi_actions[name] = action | |
|
2633
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
234 |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
235 def registerUtil(self, name, function): |
|
a9e1fff1e793
I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents:
2621
diff
changeset
|
236 self.templating_utils[name] = function |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
237 |
|
1162
86d41c31f9be
old habits...
Richard Jones <richard@users.sourceforge.net>
parents:
1158
diff
changeset
|
238 class TrackerError(Exception): |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
239 pass |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
240 |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
241 |
|
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
242 class OldStyleTrackers: |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
243 def __init__(self): |
|
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
244 self.number = 0 |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
245 self.trackers = {} |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
246 |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
247 def open(self, tracker_home, optimize=0): |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
248 """Open the tracker. |
|
380
a1331423eb93
Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents:
214
diff
changeset
|
249 |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
250 Parameters: |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
251 tracker_home: |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
252 tracker home directory |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
253 optimize: |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
254 if set, precompile html templates |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
255 |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
256 Raise ValueError if the tracker home doesn't exist. |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
257 |
|
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
258 """ |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
259 import imp |
|
1174
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
260 # sanity check existence of tracker home |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
261 if not os.path.exists(tracker_home): |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
262 raise ValueError, 'no such directory: "%s"'%tracker_home |
|
1174
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
263 |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
264 # sanity check tracker home contents |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
265 for reqd in 'config dbinit select_db interfaces'.split(): |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
266 if not os.path.exists(os.path.join(tracker_home, '%s.py'%reqd)): |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
267 raise TrackerError, 'File "%s.py" missing from tracker '\ |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
268 'home "%s"'%(reqd, tracker_home) |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
269 |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
270 if self.trackers.has_key(tracker_home): |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
271 return imp.load_package(self.trackers[tracker_home], |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
272 tracker_home) |
|
2933
6574d6736b57
register all backend modules for old-style trackers
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2902
diff
changeset
|
273 # register all available backend modules |
|
6574d6736b57
register all backend modules for old-style trackers
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2902
diff
changeset
|
274 backends.list_backends() |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
275 self.number = self.number + 1 |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
276 modname = '_roundup_tracker_%s'%self.number |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
277 self.trackers[tracker_home] = modname |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
278 |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
279 # load the tracker |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
280 tracker = imp.load_package(modname, tracker_home) |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
281 |
|
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
282 # ensure the tracker has all the required bits |
|
2621
d344419d599d
use new style config;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2584
diff
changeset
|
283 for required in 'open init Client MailGW'.split(): |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
284 if not hasattr(tracker, required): |
|
1174
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
285 raise TrackerError, \ |
|
8e318dfaf479
Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents:
1162
diff
changeset
|
286 'Required tracker attribute "%s" missing'%required |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
287 |
|
2621
d344419d599d
use new style config;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2584
diff
changeset
|
288 # load and apply the config |
|
2647
8c46091c36d0
Main Roundup configuration class renamed to CoreConfig.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2638
diff
changeset
|
289 tracker.config = configuration.CoreConfig(tracker_home) |
|
2621
d344419d599d
use new style config;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2584
diff
changeset
|
290 tracker.dbinit.config = tracker.config |
|
2397
fa50e1347397
added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents:
2273
diff
changeset
|
291 |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
292 tracker.optimize = optimize |
|
4722
f7e68ae4926c
Restore compatibility with an old style trackers (not sure if
anatoly techtonik <techtonik@gmail.com>
parents:
4721
diff
changeset
|
293 tracker.templates = templating.get_loader(tracker.config["TEMPLATES"]) |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
294 if optimize: |
|
4748
e339583eae8e
templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents:
4722
diff
changeset
|
295 tracker.templates.precompile() |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
296 |
|
1158
30db4a11d700
sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
297 return tracker |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
298 |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
299 OldStyleTrackers = OldStyleTrackers() |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
300 def open(tracker_home, optimize=0): |
|
1780
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
301 if os.path.exists(os.path.join(tracker_home, 'dbinit.py')): |
|
d2801a2b0a77
Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents:
1174
diff
changeset
|
302 # user should upgrade... |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
303 return OldStyleTrackers.open(tracker_home, optimize=optimize) |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
304 |
|
2851
96626831def1
trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2836
diff
changeset
|
305 return Tracker(tracker_home, optimize=optimize) |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
306 |
|
2621
d344419d599d
use new style config;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2584
diff
changeset
|
307 # vim: set filetype=python sts=4 sw=4 et si : |
