class SpatialIndex(Persistent): def __init__(self, *args): self.rtree_args = args self.rtree = Rtree(*args) self.backward = IOBTree() def index_doc(self, docid, value): if docid in self.backward: self.unindex_doc(docid) self.backward[docid] = value self.rtree.add(docid, value, obj=docid) def unindex_doc(self, docid): value = self.backward.get(docid) if value is None: return self.rtree.delete(docid, value) del self.backward[docid] def apply(self, value): return [x.object for x in self.rtree.intersection(value, objects=True)] def clear(self): self.backward.clear() props = self.rtree.properties if props.storage == RT_Disk: self.rtree.close() fname = props.filename try: os.unlink('%s.%s' % (fname, props.dat_extension)) except OSError: pass try: os.unlink('%s.%s' % (fname, props.idx_extension)) except OSError: pass self.rtree = Rtree(*self.rtree_args) def count(self, value): return self.rtree.count(value)