# Cache information based on a logfile import os from stat import * from cPickle import Pickler, Unpickler class Cache: def __init__(self, filename, usename, version, location): self.cache_name="%s/%s.cache" % (location, usename) self.filename=filename self.usename=usename try: in_file=open(self.cache_name, "r") p=Unpickler(in_file) self.stat_ino=p.load() self.version=p.load() seek_pos=p.load() self.data=p.load() in_file.close() if self.stat_ino!=os.stat(filename)[ST_INO] or \ self.version!=version: raise IOError # The cache doesn't match the logfile except (IOError, EOFError): self.stat_ino=os.stat(filename)[ST_INO] self.version=version seek_pos=0 self.data=None self.file=open(filename, "r") self.file.seek(seek_pos, 0) def close(self, data): out_file=open(self.cache_name, "w") p=Pickler(out_file, 1) p.dump(self.stat_ino) p.dump(self.version) p.dump(self.file.tell()) p.dump(data) out_file.close() self.file.close() def abort(self): self.file.close()