def c(self): f = File() s = Shelf(f) f.seek(0) p = Shelf(f) f.seek(0) q = Shelf(f)
def packer(): yield "started %s" % datetime.now() items = self.gen_oid_record(start_oid=int8_to_str(0)) for step in Shelf.generate_shelf(file, items): yield step file.flush() file.fsync() shelf = Shelf(file) yield "base written %s" % datetime.now() # Invalidate oids that have been removed. for hole in shelf.get_offset_map().gen_holes(): yield hole oid = int8_to_str(hole) if self.shelf.get_position(oid) is not None: assert shelf.get_position(oid) is None self.invalid.add(oid) yield "invalidations identified %s" % datetime.now() shelf.store( (name, self.shelf.get_value(name)) for name in self.pack_extra) file.flush() file.fsync() if not self.shelf.get_file().is_temporary(): self.shelf.get_file().rename(file_path + '.prepack') self.shelf.get_file().close() shelf.get_file().rename(file_path) self.shelf = shelf self.pack_extra = None yield "finished %s" % datetime.now()
def a(self): f = File() s = Shelf(f) name1 = s.next_name() name2 = s.next_name() assert name1 != name2 r = s.store([(name1, name1 + name1), (name2, name2 + name2)]) assert s.get_value(name1) == name1 + name1, (name1, s.get_value(name1)) assert s.get_value(name2) == name2 + name2 f.seek(0) other = Shelf(f) names = sorted(other.__iter__()) index = sorted(other.iterindex()) items = sorted(other.items()) assert names == [name1, name2], (name1, name2, names) assert items == [(n, n+n) for n in names] assert index == [(n, other.get_position(n)) for n in names]
def __init__(self, filename=None, readonly=False, repair=False): self.shelf = Shelf(filename, readonly=readonly, repair=repair) self.pending_records = {} self.allocated_unused_oids = set() self.pack_extra = None self.invalid = set()
def e(self): f = File() n1 = int8_to_str(0) n2 = int8_to_str(1) s = Shelf(f, items=[(n1, 'record1'), (n2, 'record2')])
def b(self): s = Shelf() assert s.get_value(as_bytes('okokokok')) is None assert raises(ValueError, s.get_value, as_bytes('okok'))