from hashtree import HashTree BLOCK_SIZE = HashTree.BLOCK_SIZE class DataFile: def __init__(self, fileHandle): self._lastIndex = 0 self._f = fileHandle @staticmethod def open(filename, mode="rb"): return DataFile(open(filename, mode=mode)) def writeAt(self, i, blockData): if i!=self._lastIndex+1: self._f.seek(i*BLOCK_SIZE) self._f.write(blockData) self._lastIndex = i def readFrom(self, i, byteCount=BLOCK_SIZE): if i!=self._lastIndex+1: self._f.seek(i*BLOCK_SIZE) self._lastIndex = i return self._f.read(byteCount) def close(self): self._f.close()