def saveCache(self): """Save the current state of the class's cache to the provided file.""" # we explicity send a pointer to the class variable _cache just in # case the instance has a _cache variable defined in it's dictionary. filename = self.getCacheFilename() if not filename: raise ClassObjectError, "no cache filename provided." try: XMLObject.writeXML(self, data={'_cache': self.__class__._cache}, filename=filename, createDir=1) except (IOError, OSError): tracebackutil.printTraceback() pass
def saveState(self, filename=None, basedir=None, basename=None, **kwargs): """Overloaded so defaults can be set if the caller doesn't provide values for where the data should be written to.""" if basedir and basedir[0] != '/': basedir = os.path.join(self.rootStateDir, basedir) elif not basedir: basedir = self.rootStateDir if not basename: basename = "%s.state" % self.__class__.__name__ try: self.writeXML(filename=filename, basedir=basedir, basename=basename, createDir=True, **kwargs) except (IOError, OSError): tracebackutil.printTraceback() pass
def shutdownServer(self, exit=0): """Close all connections and file handlers.""" # there are open exceptions here, which is okay, because # we really want to shut down the server here! try: log("shutdownServer(): %s" % self.closemsg) except: printTraceback() for conn in self.conns.values(): try: conn.close() self.removeConnection(conn) except: printTraceback() try: if self.socket: self.socket.close() except: printTraceback() if exit: os._exit(2)
# 'nice' exit point from mainloop() if self.shutdown: self.shutdownServer() return except KeyboardInterrupt, errMsg: log(str(errMsg)) self.closemsg = 'Ctrl-C' self.shutdownServer() return # this is an exit point from mainloop() except: self.closemsg = 'exception' printTraceback() if self.notify: try: log('Notify %s of shutdown' % str(self.notify)) body = getTraceback() subject = '%s:%d died' % (getlocalhost(), self.servPort) sendmail(self.notify, body, subject=subject) except: pass self.shutdownServer() return # this is an exit point from mainloop() # time.sleep(1) # slow down errors to avoid filling drive # ---------------------------------------------------------------------------