- except xmlrpclib.Fault, fault:
- raise BootManagerException, "API Fault: %s" % fault
- except xmlrpclib.ProtocolError, err:
- raise BootManagerException,"XML RPC protocol error: %s" % err
- except xml.parsers.expat.ExpatError, err:
- raise BootManagerException,"XML parsing error: %s" % err
+ except xmlrpclib.Fault as fault:
+ raise BootManagerException("API Fault: {}".format(fault))
+ except xmlrpclib.ProtocolError as err:
+ raise BootManagerException("XML RPC protocol error: {}".format(err))
+ except xml.parsers.expat.ExpatError as err:
+ raise BootManagerException("XML parsing error: {}".format(err))
+
+
+class Stash(file):
+ mntpnt = '/tmp/stash'
+ def __init__(self, vars, mode):
+ utils.makedirs(self.mntpnt)
+ try:
+ utils.sysexec('mount -t auto -U {} {}'.format(vars['DISCONNECTED_OPERATION'], self.mntpnt))
+ # make sure it's not read-only
+ f = file('{}/api.cache'.format(self.mntpnt), 'a')
+ f.close()
+ file.__init__(self, '{}/api.cache'.format(self.mntpnt), mode)
+ except:
+ utils.sysexec_noerr('umount {}'.format(self.mntpnt))
+ raise BootManagerException("Couldn't find API-cache for disconnected operation")
+
+ def close(self):
+ file.close(self)
+ utils.sysexec_noerr('umount {}'.format(self.mntpnt))
+
+def load(vars):
+ global stash
+ s = Stash(vars, 'r')
+ stash = cPickle.load(s)
+ s.close()
+
+def save(vars):
+ global stash
+ if vars['DISCONNECTED_OPERATION']:
+ s = Stash(vars, 'w')
+ cPickle.dump(stash, s)
+ s.close()