Mercurial > p > roundup > code
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 : |
