annotate roundup/instance.py @ 8180:d02ce1d14acd

feat: issue2551068 - Provide way to retrieve file/msg data via rest endpoint. Use Allow header to change format of /binary_content endpoint. If Allow header for endpoint is not application/json, it will be matched against the mime type for the file. */*, text/* are supported and will return the native mime type if present. Changes: move */* mime type from static dict of supported types. It was hardcoded to return json only. Now it can return a matching non-json mime type for the /binary_content endpoint. Edited some errors to explicitly add */* mime type. Cleanups to use ', ' separation in lists of valid mime types rather than just space separated. Remove ETag header when sending raw content. See issue 2551375 for background. Doc added to rest.txt. Small format fix up (add dash) in CHANGES.txt. Make passing an unset/None/False accept_mime_type to format_dispatch_output a 500 error. This used to be the fallback to produce a 406 error after all processing had happened. It should no longer be possible to take that code path as all 406 errors (with valid accept_mime_types) are generated before processing takes place. Make format_dispatch_output handle output other than json/xml so it can send back binary_content data. Removed a spurious client.response_code = 400 that seems to not be used. Tests added for all code paths. Database setup for tests msg and file entry. This required a file upload test to change so it doesn't look for file1 as the link returned by the upload. Download the link and verify the data rather than verifying the link. Multiple formatting changes to error messages to make all lists of valid mime types ', ' an not just space separated.
author John Rouillard <rouilj@ieee.org>
date Sun, 08 Dec 2024 17:22:33 -0500
parents 586f76eb33e8
children 2a7c3eeaf167
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.
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
72db88cb68b0 doc tweak
Richard Jones <richard@users.sourceforge.net>
parents: 4366
diff changeset
19 """Top-level tracker interface.
72db88cb68b0 doc tweak
Richard Jones <richard@users.sourceforge.net>
parents: 4366
diff changeset
20
72db88cb68b0 doc tweak
Richard Jones <richard@users.sourceforge.net>
parents: 4366
diff changeset
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
72db88cb68b0 doc tweak
Richard Jones <richard@users.sourceforge.net>
parents: 4366
diff changeset
23 >>> from roundup import instance
72db88cb68b0 doc tweak
Richard Jones <richard@users.sourceforge.net>
parents: 4366
diff changeset
24 >>> db = instance.open('path to tracker home')
72db88cb68b0 doc tweak
Richard Jones <richard@users.sourceforge.net>
parents: 4366
diff changeset
25
72db88cb68b0 doc tweak
Richard Jones <richard@users.sourceforge.net>
parents: 4366
diff changeset
26 The "db" handle you get back is the tracker's hyperdb which has the interface
4395
Richard Jones <richard@users.sourceforge.net>
parents: 4388
diff changeset
27 described in `roundup.hyperdb.Database`.
4083
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
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
5383
6fbb7d52e38f Python 3 preparation: use open() instead of file().
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
31 try:
6fbb7d52e38f Python 3 preparation: use open() instead of file().
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
32 import builtins
6fbb7d52e38f Python 3 preparation: use open() instead of file().
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
33 except ImportError:
6fbb7d52e38f Python 3 preparation: use open() instead of file().
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
34 import __builtin__ as builtins
6fbb7d52e38f Python 3 preparation: use open() instead of file().
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
35
5810
5258e89e896a Fix: DeprecationWarning: Using or importing the ABCs from 'collections'
John Rouillard <rouilj@ieee.org>
parents: 5406
diff changeset
36 try:
5258e89e896a Fix: DeprecationWarning: Using or importing the ABCs from 'collections'
John Rouillard <rouilj@ieee.org>
parents: 5406
diff changeset
37 from collections.abc import Callable
5258e89e896a Fix: DeprecationWarning: Using or importing the ABCs from 'collections'
John Rouillard <rouilj@ieee.org>
parents: 5406
diff changeset
38 except ImportError:
5258e89e896a Fix: DeprecationWarning: Using or importing the ABCs from 'collections'
John Rouillard <rouilj@ieee.org>
parents: 5406
diff changeset
39 from collections import Callable
5258e89e896a Fix: DeprecationWarning: Using or importing the ABCs from 'collections'
John Rouillard <rouilj@ieee.org>
parents: 5406
diff changeset
40
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
41 import os
3771
bf660e65ba45 Directory structure changes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 2977
diff changeset
42 import sys
5041
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
43
2977
9c8de04a76b1 unit test fixes
Richard Jones <richard@users.sourceforge.net>
parents: 2933
diff changeset
44 from roundup import configuration, mailgw
4083
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
45 from roundup import hyperdb, backends, actions
8091
586f76eb33e8 fix: keep python2 working a little longer.
John Rouillard <rouilj@ieee.org>
parents: 8088
diff changeset
46 from roundup.anypy import scandir_
2851
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
47 from roundup.cgi import client, templating
4083
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
48 from roundup.cgi import actions as cgi_actions
6123
c177e7128dc9 issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents: 6010
diff changeset
49 from roundup.exceptions import RoundupException
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
50
6010
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
51
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
52 class Tracker:
2851
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
53 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
54 """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
55
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
56 Parameters:
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
57 tracker_home:
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
58 tracker home directory
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
59 optimize:
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
60 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
61
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
62 """
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
63 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
64 self.optimize = optimize
2647
8c46091c36d0 Main Roundup configuration class renamed to CoreConfig.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2638
diff changeset
65 self.config = configuration.CoreConfig(tracker_home)
4083
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
66 self.actions = {}
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
67 self.cgi_actions = {}
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
68 self.templating_utils = {}
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
69
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
70 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
71 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
72
4592
7b7cfb4b00eb Fix improvements on instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4588
diff changeset
73 self.load_interfaces()
4721
ec359e7c6c95 Rename templating.get_templates to get_loader
anatoly techtonik <techtonik@gmail.com>
parents: 4720
diff changeset
74 self.templates = templating.get_loader(self.config["TEMPLATES"],
6010
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
75 self.config["TEMPLATE_ENGINE"])
5041
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
76
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
77 rdbms_backend = self.config.RDBMS_BACKEND
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
78
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
79 self.backend = backends.get_backend(rdbms_backend)
4592
7b7cfb4b00eb Fix improvements on instance.py.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4588
diff changeset
80
2851
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
81 if self.optimize:
4748
e339583eae8e templating: rename precompileTemplates to precompile
anatoly techtonik <techtonik@gmail.com>
parents: 4722
diff changeset
82 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
83 # initialize tracker extensions
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
84 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
85 extension(self)
2902
f50b867747c9 if optimize is set, load the schema file in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2891
diff changeset
86 # load database schema
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
87 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
88 # load database detectors
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
89 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
90 # 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
91 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
92
2796
7f1e17aeca1b journaltag is optional
Richard Jones <richard@users.sourceforge.net>
parents: 2736
diff changeset
93 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
94 # 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
95 # 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
96 # 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
97 # 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
98 backend = self.backend
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
99 env = {
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
100 'Class': backend.Class,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
101 'FileClass': backend.FileClass,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
102 'IssueClass': backend.IssueClass,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
103 'String': hyperdb.String,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
104 'Password': hyperdb.Password,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
105 'Date': hyperdb.Date,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
106 'Link': hyperdb.Link,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
107 'Multilink': hyperdb.Multilink,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
108 'Interval': hyperdb.Interval,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
109 'Boolean': hyperdb.Boolean,
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
110 'Number': hyperdb.Number,
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
111 'Integer': hyperdb.Integer,
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
112 '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
113 }
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
114
2891
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
115 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
116 # execute preloaded schema object
4606
48b73776601c More fix for improvements on instance.py.
Cheer Xiao <xiaqqaix@gmail.com>
parents: 4592
diff changeset
117 self._exec(self.schema, env)
2891
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
118 # use preloaded detectors
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
119 detectors = self.detectors
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
120 else:
2902
f50b867747c9 if optimize is set, load the schema file in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2891
diff changeset
121 # execute the schema file
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
122 self._execfile('schema.py', env)
2891
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
123 # 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
124 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
125 extension(self)
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
126 detectors = self.get_extensions('detectors')
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
127 db = env['db']
4781
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4748
diff changeset
128 db.tx_Source = None
6658
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6536
diff changeset
129 # Useful for script when multiple open calls happen. Scripts have
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6536
diff changeset
130 # to inject the i18n object, there is currently no support for this
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6536
diff changeset
131 if hasattr(self, 'i18n'):
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6536
diff changeset
132 db.i18n = self.i18n
4781
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4748
diff changeset
133
2891
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
134 # apply the detectors
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
135 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
136 detector(db)
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
137 # 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
138 # 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
139 # 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
140 if not (self.optimize and self.db_open):
4266
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
141 # As a consistency check, ensure that every link property is
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
142 # pointing at a defined class. Otherwise, the schema is
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
143 # internally inconsistent. This is an important safety
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
144 # measure as it protects against an accidental schema change
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
145 # 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
146 # 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
147 # 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
148 # as possible that it is no longer needed.
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
149 classes = db.getclasses()
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
150 for classname in classes:
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
151 cl = db.getclass(classname)
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5383
diff changeset
152 for propname, prop in cl.getprops().items():
4266
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
153 if not isinstance(prop, (hyperdb.Link,
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
154 hyperdb.Multilink)):
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
155 continue
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
156 linkto = prop.classname
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
157 if linkto not in classes:
6010
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
158 raise ValueError("property %s.%s links to "
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
159 "non-existent class %s"
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
160 % (classname, propname, linkto))
4266
2b75274936bc Add schema consistency checks.
Stefan Seefeld <stefan@seefeld.name>
parents: 4211
diff changeset
161
2891
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
162 self.db_open = 1
6658
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6536
diff changeset
163 # *Must* call post_init! It is not an error if called multiple times.
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6536
diff changeset
164 db.post_init()
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
165 return db
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
166
2697
d138df58b0c3 load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2688
diff changeset
167 def load_interfaces(self):
d138df58b0c3 load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2688
diff changeset
168 """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
169 env = {}
2697
d138df58b0c3 load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2688
diff changeset
170 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
171 self._execfile('interfaces.py', env)
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
172 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
173 self.MailGW = env.get('MailGW', mailgw.MailGW)
6010
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
174 self.TemplatingUtils = env.get('TemplatingUtils',
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
175 templating.TemplatingUtils)
2697
d138df58b0c3 load user interfaces
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2688
diff changeset
176
2891
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
177 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
178 """Load python extensions
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
179
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
180 Parameters:
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
181 dirname:
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
182 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
183
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
184 Return value:
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
185 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
186
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
187 """
bc72b1c7319b if optimize is set, load all extension modules in __init__()...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2890
diff changeset
188 extensions = []
2688
eb14c12813a0 fix load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2677
diff changeset
189 dirpath = os.path.join(self.tracker_home, dirname)
eb14c12813a0 fix load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2677
diff changeset
190 if os.path.isdir(dirpath):
3771
bf660e65ba45 Directory structure changes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 2977
diff changeset
191 sys.path.insert(1, dirpath)
8088
1045425c23b2 refactor!: replace os.listdir() with os.scandir()
John Rouillard <rouilj@ieee.org>
parents: 7649
diff changeset
192 for dir_entry in os.scandir(dirpath):
1045425c23b2 refactor!: replace os.listdir() with os.scandir()
John Rouillard <rouilj@ieee.org>
parents: 7649
diff changeset
193 name = dir_entry.name
2677
1f0143b53bee fix .load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2647
diff changeset
194 if not name.endswith('.py'):
1f0143b53bee fix .load_extensions():
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2647
diff changeset
195 continue
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
196 env = {}
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
197 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
198 extensions.append(env['init'])
3773
21ff756e4549 Fixes for directory handling.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3771
diff changeset
199 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
200 return extensions
2638
18e86941c950 Load up extensions in the tracker "extensions" directory.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
201
5216
6a4317738a90 make roundup-admin init function set the transaction source. Otherwise when initial_data.py is loaded as part of init, db.tx_Source is set to None and thus checks like db.tx_Source in [ 'cli' ] will fail.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
202 def init(self, adminpw, tx_Source=None):
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
203 db = self.open('admin')
5216
6a4317738a90 make roundup-admin init function set the transaction source. Otherwise when initial_data.py is loaded as part of init, db.tx_Source is set to None and thus checks like db.tx_Source in [ 'cli' ] will fail.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
204 db.tx_Source = tx_Source
6010
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
205 self._execfile('initial_data.py',
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
206 {'db': db, 'adminpw': adminpw,
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
207 'admin_email': self.config['ADMIN_EMAIL']})
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
208 db.commit()
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
209 db.close()
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
210
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
211 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
212 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
213
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
214 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
215 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
216
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
217 def _compile(self, fname):
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
218 fname = os.path.join(self.tracker_home, fname)
6479
808f7a8ed2b6 Clean leaking file descriptors. Eliminates ResourceWarnings.
John Rouillard <rouilj@ieee.org>
parents: 6330
diff changeset
219 with builtins.open(fname) as fnamed:
808f7a8ed2b6 Clean leaking file descriptors. Eliminates ResourceWarnings.
John Rouillard <rouilj@ieee.org>
parents: 6330
diff changeset
220 return compile(fnamed.read(), fname, 'exec')
4588
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
221
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
222 def _exec(self, obj, env):
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
223 if self.libdir:
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
224 sys.path.insert(1, self.libdir)
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
225 exec(obj, env)
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
226 if self.libdir:
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
227 sys.path.remove(self.libdir)
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
228 return env
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
229
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
230 def _execfile(self, fname, env):
7017c8dd704c Small improvements on instance.py by Cheer Xiao.
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4587
diff changeset
231 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
232
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
233 def registerAction(self, name, action):
4083
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
234
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
235 # The logic here is this:
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
236 # * if `action` derives from actions.Action,
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
237 # it is executable as a generic action.
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
238 # * if, moreover, it also derives from cgi.actions.Bridge,
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
239 # it may in addition be called via CGI
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
240 # * in all other cases we register it as a CGI action, without
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
241 # any check (for backward compatibility).
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
242 if issubclass(action, actions.Action):
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
243 self.actions[name] = action
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
244 if issubclass(action, cgi_actions.Bridge):
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
245 self.cgi_actions[name] = action
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
246 else:
bbab97f8ffb2 XMLRPC improvements:
Stefan Seefeld <stefan@seefeld.name>
parents: 3777
diff changeset
247 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
248
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2621
diff changeset
249 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
250 self.templating_utils[name] = function
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251
6010
8ccb41b477d1 Flake8 cleanup. Formating only no code changes.
John Rouillard <rouilj@ieee.org>
parents: 5810
diff changeset
252
6123
c177e7128dc9 issue2551083 Replace BaseException and Exception with RoundupException
John Rouillard <rouilj@ieee.org>
parents: 6010
diff changeset
253 class TrackerError(RoundupException):
1158
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
254 pass
30db4a11d700 sanity check instance attributes on open
Richard Jones <richard@users.sourceforge.net>
parents: 1090
diff changeset
255
1780
d2801a2b0a77 Initial implementation (half-baked) at new Tracker instance.
Richard Jones <richard@users.sourceforge.net>
parents: 1174
diff changeset
256
2851
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
257 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
258 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
259 # user should upgrade...
6300
778a9f455067 Remove old code import imp, old style trackers db/backend_name
John Rouillard <rouilj@ieee.org>
parents: 6123
diff changeset
260 raise TrackerError("Old style trackers using dbinit.py "
778a9f455067 Remove old code import imp, old style trackers db/backend_name
John Rouillard <rouilj@ieee.org>
parents: 6123
diff changeset
261 "are not supported after release 2.0")
204
c1461733cbf9 Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262
2851
96626831def1 trackers got a 'templates' attribute, containing html templates collection...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2836
diff changeset
263 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
264
2621
d344419d599d use new style config;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2584
diff changeset
265 # vim: set filetype=python sts=4 sw=4 et si :

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