comparison roundup/instance.py @ 6300:778a9f455067

Remove old code import imp, old style trackers db/backend_name Module imp is depricated. Removing that means rewriting old style trackers that used imp to load schema and config files. So removed code supporting old style trackers that have been depricated since 2008. Added test to verify that existence of dbinit.py triggers alert that tracker is old style and not supported. Also remove support for depricated db/backend_name file for specifying backend. It is now specified in config.ini's [rdbms] backend. It looks like not specifying an [rdbms] backend key in config.ini throws a config error. However I left in a check and throw an exception with details if there is an empty backend value. But I don't think it will ever be triggered. Removed unused import of imp in a number of test files.
author John Rouillard <rouilj@ieee.org>
date Sun, 20 Dec 2020 15:43:07 -0500
parents c177e7128dc9
children 1a15089c2e49 fbce23af2120
comparison
equal deleted inserted replaced
6299:fd0bdcbc68e4 6300:778a9f455067
81 rdbms_backend = self.config.RDBMS_BACKEND 81 rdbms_backend = self.config.RDBMS_BACKEND
82 82
83 # TODO: Remove in v1.7 83 # TODO: Remove in v1.7
84 # Provide some backwards compatability for existing Roundup instances 84 # Provide some backwards compatability for existing Roundup instances
85 # that still define the backend type in 'db/backend_name' and warn the 85 # that still define the backend type in 'db/backend_name' and warn the
86 # users they need to update their config.ini 86 # users they need to update their config.ini. Note that a missing
87 # rdbms backend causes the config to throw an error, so this may
88 # not be possible.
87 if rdbms_backend == '': 89 if rdbms_backend == '':
88 filename = os.path.join(self.config.DATABASE, 'backend_name') 90 raise TrackerError("database backend not found in config.ini.\n"
89 msg = """\n 91 "Old style `backend_name` in db directory not supported\n"
90 The 'backend_name' file is no longer used to configure the database backend 92 "See doc/upgrading.txt for required steps.")
91 used for the tracker. Please read 'doc/upgrading.txt' to find out how to
92 update your config.ini
93 """
94 try:
95 with open(filename) as backend_file:
96 rdbms_backend = backend_file.readline().strip()
97
98 with warnings.catch_warnings():
99 warnings.simplefilter("once", DeprecationWarning)
100 warnings.warn(msg, DeprecationWarning, stacklevel=2)
101 except IOError:
102 pass
103 93
104 self.backend = backends.get_backend(rdbms_backend) 94 self.backend = backends.get_backend(rdbms_backend)
105 95
106 if self.optimize: 96 if self.optimize:
107 self.templates.precompile() 97 self.templates.precompile()
274 264
275 class TrackerError(RoundupException): 265 class TrackerError(RoundupException):
276 pass 266 pass
277 267
278 268
279 class OldStyleTrackers:
280 def __init__(self):
281 self.number = 0
282 self.trackers = {}
283
284 def open(self, tracker_home, optimize=0):
285 """Open the tracker.
286
287 Parameters:
288 tracker_home:
289 tracker home directory
290 optimize:
291 if set, precompile html templates
292
293 Raise ValueError if the tracker home doesn't exist.
294
295 """
296 import imp
297 # sanity check existence of tracker home
298 if not os.path.exists(tracker_home):
299 raise ValueError('no such directory: "%s"' % tracker_home)
300
301 # sanity check tracker home contents
302 for reqd in 'config dbinit select_db interfaces'.split():
303 if not os.path.exists(os.path.join(tracker_home, '%s.py' % reqd)):
304 raise TrackerError('File "%s.py" missing from tracker '
305 'home "%s"' % (reqd, tracker_home))
306
307 if tracker_home in self.trackers:
308 return imp.load_package(self.trackers[tracker_home],
309 tracker_home)
310 # register all available backend modules
311 backends.list_backends()
312 self.number = self.number + 1
313 modname = '_roundup_tracker_%s' % self.number
314 self.trackers[tracker_home] = modname
315
316 # load the tracker
317 tracker = imp.load_package(modname, tracker_home)
318
319 # ensure the tracker has all the required bits
320 for required in 'open init Client MailGW'.split():
321 if not hasattr(tracker, required):
322 raise TrackerError('Required tracker attribute "%s" missing' %
323 required)
324
325 # load and apply the config
326 tracker.config = configuration.CoreConfig(tracker_home)
327 tracker.dbinit.config = tracker.config
328
329 tracker.optimize = optimize
330 tracker.templates = templating.get_loader(tracker.config["TEMPLATES"])
331 if optimize:
332 tracker.templates.precompile()
333
334 return tracker
335
336
337 OldStyleTrackers = OldStyleTrackers()
338
339
340 def open(tracker_home, optimize=0): 269 def open(tracker_home, optimize=0):
341 if os.path.exists(os.path.join(tracker_home, 'dbinit.py')): 270 if os.path.exists(os.path.join(tracker_home, 'dbinit.py')):
342 # user should upgrade... 271 # user should upgrade...
343 return OldStyleTrackers.open(tracker_home, optimize=optimize) 272 raise TrackerError("Old style trackers using dbinit.py "
273 "are not supported after release 2.0")
344 274
345 return Tracker(tracker_home, optimize=optimize) 275 return Tracker(tracker_home, optimize=optimize)
346 276
347 # vim: set filetype=python sts=4 sw=4 et si : 277 # vim: set filetype=python sts=4 sw=4 et si :

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