Mercurial > p > roundup > code
comparison roundup/instance.py @ 6325:1a15089c2e49 issue2550923_computed_property
Merge trunk into branch
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 06 Feb 2021 20:15:26 -0500 |
| parents | 1e5ed659e8ca 778a9f455067 |
| children | 30358e334232 |
comparison
equal
deleted
inserted
replaced
| 6319:20e77c3ce6f6 | 6325:1a15089c2e49 |
|---|---|
| 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() |
| 275 | 265 |
| 276 class TrackerError(RoundupException): | 266 class TrackerError(RoundupException): |
| 277 pass | 267 pass |
| 278 | 268 |
| 279 | 269 |
| 280 class OldStyleTrackers: | |
| 281 def __init__(self): | |
| 282 self.number = 0 | |
| 283 self.trackers = {} | |
| 284 | |
| 285 def open(self, tracker_home, optimize=0): | |
| 286 """Open the tracker. | |
| 287 | |
| 288 Parameters: | |
| 289 tracker_home: | |
| 290 tracker home directory | |
| 291 optimize: | |
| 292 if set, precompile html templates | |
| 293 | |
| 294 Raise ValueError if the tracker home doesn't exist. | |
| 295 | |
| 296 """ | |
| 297 import imp | |
| 298 # sanity check existence of tracker home | |
| 299 if not os.path.exists(tracker_home): | |
| 300 raise ValueError('no such directory: "%s"' % tracker_home) | |
| 301 | |
| 302 # sanity check tracker home contents | |
| 303 for reqd in 'config dbinit select_db interfaces'.split(): | |
| 304 if not os.path.exists(os.path.join(tracker_home, '%s.py' % reqd)): | |
| 305 raise TrackerError('File "%s.py" missing from tracker ' | |
| 306 'home "%s"' % (reqd, tracker_home)) | |
| 307 | |
| 308 if tracker_home in self.trackers: | |
| 309 return imp.load_package(self.trackers[tracker_home], | |
| 310 tracker_home) | |
| 311 # register all available backend modules | |
| 312 backends.list_backends() | |
| 313 self.number = self.number + 1 | |
| 314 modname = '_roundup_tracker_%s' % self.number | |
| 315 self.trackers[tracker_home] = modname | |
| 316 | |
| 317 # load the tracker | |
| 318 tracker = imp.load_package(modname, tracker_home) | |
| 319 | |
| 320 # ensure the tracker has all the required bits | |
| 321 for required in 'open init Client MailGW'.split(): | |
| 322 if not hasattr(tracker, required): | |
| 323 raise TrackerError('Required tracker attribute "%s" missing' % | |
| 324 required) | |
| 325 | |
| 326 # load and apply the config | |
| 327 tracker.config = configuration.CoreConfig(tracker_home) | |
| 328 tracker.dbinit.config = tracker.config | |
| 329 | |
| 330 tracker.optimize = optimize | |
| 331 tracker.templates = templating.get_loader(tracker.config["TEMPLATES"]) | |
| 332 if optimize: | |
| 333 tracker.templates.precompile() | |
| 334 | |
| 335 return tracker | |
| 336 | |
| 337 | |
| 338 OldStyleTrackers = OldStyleTrackers() | |
| 339 | |
| 340 | |
| 341 def open(tracker_home, optimize=0): | 270 def open(tracker_home, optimize=0): |
| 342 if os.path.exists(os.path.join(tracker_home, 'dbinit.py')): | 271 if os.path.exists(os.path.join(tracker_home, 'dbinit.py')): |
| 343 # user should upgrade... | 272 # user should upgrade... |
| 344 return OldStyleTrackers.open(tracker_home, optimize=optimize) | 273 raise TrackerError("Old style trackers using dbinit.py " |
| 274 "are not supported after release 2.0") | |
| 345 | 275 |
| 346 return Tracker(tracker_home, optimize=optimize) | 276 return Tracker(tracker_home, optimize=optimize) |
| 347 | 277 |
| 348 # vim: set filetype=python sts=4 sw=4 et si : | 278 # vim: set filetype=python sts=4 sw=4 et si : |
