X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=roundup%2Finstance.py;h=ec87f3899616e8997da61df4c5212d6d68fd093b;hb=4f9b23d1dd4d91d0a3e5f3dfddb91700837c9a9f;hp=432bab6b8d27859dd0aa6b1dc4b92743b92027f8;hpb=c853df7b1fb5c3deee55fd7c8396f56259b060f6;p=roundup.git diff --git a/roundup/instance.py b/roundup/instance.py index 432bab6..ec87f38 100644 --- a/roundup/instance.py +++ b/roundup/instance.py @@ -4,7 +4,7 @@ # under the same terms as Python, so long as this copyright message and # disclaimer are retained in their original form. # -# IN NO EVENT SHALL THE BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR +# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. @@ -15,41 +15,90 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: instance.py,v 1.2 2001-08-07 00:15:51 richard Exp $ +# $Id: instance.py,v 1.10 2003-09-04 00:47:01 richard Exp $ -''' Currently this module provides one function: open. This function opens -an instance. +__doc__ = ''' +Tracker handling (open tracker). + +Backwards compatibility for the old-style "imported" trackers. ''' -import imp +import os + +class Vars: + ''' I'm just a container ''' + +class Tracker: + def __init__(self, tracker_home): + self.tracker_home = tracker_home + self.select_db = self._load_python('select_db.py') + self.config = self._load_config('config.py') + raise NotImplemented, 'this is *so* not finished' + self.init = XXX + self.Client = XXX + self.MailGW = XXX + + def open(self): + return self._load_config('schema.py').db + self._load_config('security.py', db=db) + + + def __load_python(self, file): + file = os.path.join(tracker_home, file) + vars = Vars() + execfile(file, vars.__dict__) + return vars + + +class TrackerError(Exception): + pass + -class Opener: +class OldStyleTrackers: def __init__(self): self.number = 0 - self.instances = {} + self.trackers = {} - def open(self, instance_home): - if self.instances.has_key(instance_home): - return imp.load_package(self.instances[instance_home], - instance_home) + def open(self, tracker_home): + ''' Open the tracker. + + Raise ValueError if the tracker home doesn't exist. + ''' + import imp + # sanity check existence of tracker home + if not os.path.exists(tracker_home): + raise ValueError, 'no such directory: "%s"'%tracker_home + + # sanity check tracker home contents + for reqd in 'config dbinit select_db interfaces'.split(): + if not os.path.exists(os.path.join(tracker_home, '%s.py'%reqd)): + raise TrackerError, 'File "%s.py" missing from tracker '\ + 'home "%s"'%(reqd, tracker_home) + + if self.trackers.has_key(tracker_home): + return imp.load_package(self.trackers[tracker_home], + tracker_home) self.number = self.number + 1 - modname = '_roundup_instance_%s'%self.number - self.instances[instance_home] = modname - return imp.load_package(modname, instance_home) + modname = '_roundup_tracker_%s'%self.number + self.trackers[tracker_home] = modname -opener = Opener() -open = opener.open + # load the tracker + tracker = imp.load_package(modname, tracker_home) -del Opener -del opener + # ensure the tracker has all the required bits + for required in 'config open init Client MailGW'.split(): + if not hasattr(tracker, required): + raise TrackerError, \ + 'Required tracker attribute "%s" missing'%required + return tracker + +OldStyleTrackers = OldStyleTrackers() +def open(tracker_home): + if os.path.exists(os.path.join(tracker_home, 'dbinit.py')): + # user should upgrade... + return OldStyleTrackers.open(tracker_home) + + return Tracker(tracker_home) -# -# $Log: not supported by cvs2svn $ -# Revision 1.1 2001/08/05 07:43:52 richard -# Instances are now opened by a special function that generates a unique -# module name for the instances on import time. -# -# -# # vim: set filetype=python ts=4 sw=4 et si