annotate roundup/instance.py @ 2467:76ead526113d

client instances may be used as translation engines. any backend translator may be passed as constructor argument or via setTranslator() method. by default, templating.translationService is used. use this engine to translate client messages.
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Tue, 15 Jun 2004 09:19:49 +0000
parents fa50e1347397
children eeadb59213d8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
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.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 204
diff changeset
17 #
2397
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
18 # $Id: instance.py,v 1.14 2004-06-08 05:29:18 richard Exp $
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
20 '''Tracker handling (open tracker).
406
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 380
diff changeset
21
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
22 Backwards compatibility for the old-style "imported" trackers.
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 '''
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
24 __docformat__ = 'restructuredtext'
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
26 import os
2397
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
27 from roundup import rlog
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
28
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
29 class Vars:
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
30 ''' I'm just a container '''
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
31
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
32 class Tracker:
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
33 def __init__(self, tracker_home):
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
34 self.tracker_home = tracker_home
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
35 self.select_db = self._load_python('select_db.py')
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
36 self.config = self._load_config('config.py')
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
37 raise NotImplemented, 'this is *so* not finished'
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
38 self.init = XXX
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
39 self.Client = XXX
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
40 self.MailGW = XXX
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
41
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
42 def open(self):
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
43 return self._load_config('schema.py').db
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
44 self._load_config('security.py', db=db)
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
45
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
46
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1780
diff changeset
47 def _load_python(self, file):
2273
c77483d2cda4 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
48 file = os.path.join(self.tracker_home, file)
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
49 vars = Vars()
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
50 execfile(file, vars.__dict__)
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
51 return vars
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
52
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53
1162
86d41c31f9be old habits...
Richard Jones <richard@users.sourceforge.net>
parents: 1158
diff changeset
54 class TrackerError(Exception):
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
55 pass
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
56
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
57
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
58 class OldStyleTrackers:
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 def __init__(self):
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 self.number = 0
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
61 self.trackers = {}
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
63 def open(self, tracker_home):
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
64 ''' Open the tracker.
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
65
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
66 Raise ValueError if the tracker home doesn't exist.
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
67 '''
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
68 import imp
1174
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1162
diff changeset
69 # sanity check existence of tracker home
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
70 if not os.path.exists(tracker_home):
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
71 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
72
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1162
diff changeset
73 # 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
74 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
75 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
76 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
77 '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
78
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
79 if self.trackers.has_key(tracker_home):
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
80 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
81 tracker_home)
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 self.number = self.number + 1
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
83 modname = '_roundup_tracker_%s'%self.number
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
84 self.trackers[tracker_home] = modname
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
85
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
86 # load the tracker
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
87 tracker = imp.load_package(modname, tracker_home)
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
88
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
89 # ensure the tracker has all the required bits
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
90 for required in 'config open init Client MailGW'.split():
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
91 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
92 raise TrackerError, \
8e318dfaf479 Verify contents of tracker module when the tracker is opened
Richard Jones <richard@users.sourceforge.net>
parents: 1162
diff changeset
93 'Required tracker attribute "%s" missing'%required
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
94
2397
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
95 # init the logging
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
96 config = tracker.config
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
97 if hasattr(config, 'LOGGING_CONFIG'):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
98 try:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
99 import logging
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
100 config.logging = logging
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
101 except ImportError, msg:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
102 raise TrackerError, 'Python logging module unavailable: %s'%msg
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
103 config.logging.fileConfig(config.LOGGING_CONFIG)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
104 elif hasattr(config, 'LOGGING_FILENAME'):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
105 config.logging = rlog.BasicLogging()
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
106 config.logging.setFile(config.LOGGING_FILENAME)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
107 if hasattr(config, 'LOGGING_LEVEL'):
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
108 config.logging.setLevel(config.LOGGING_LEVEL)
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
109 else:
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
110 config.logging = rlog.BasicLogging()
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
111 config.logging.setLevel('ERROR')
fa50e1347397 added basic logging support
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
112
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
113 return tracker
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
115 OldStyleTrackers = OldStyleTrackers()
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
116 def open(tracker_home):
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
117 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
118 # user should upgrade...
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
119 return OldStyleTrackers.open(tracker_home)
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
121 return Tracker(tracker_home)
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/