def __init__(self, engine, txn_context=None, prefix=''): self.engine = engine self.prefix = prefix self._txn_context = txn_context or TxnContext(engine) self._on_commit = [] self._after_commit = [] self._after_abort = [] # TODO HACK self._txn_context._on_commit = self._on_commit self._txn_context._after_commit = self._after_commit self._txn_context._after_abort = self._after_abort self.begin = self._txn_context.begin self._counter_key_cache = {} self._encoder_prefix = dict((e, keylib.pack_int(1 + i)) for i, e in enumerate(encoders._ENCODERS)) self._prefix_encoder = dict((keylib.pack_int(1 + i), e) for i, e in enumerate(encoders._ENCODERS)) # ((kind, name, attr), value) meta_info = {'name': '\x00meta', 'idx': 9, 'strategy': 'basic'} self._meta = Collection(self, meta_info, encoder=encoders.KEY, key_func=lambda t: t[:3]) self._objs = {}
def __init__(self, engine, txn_context=None, prefix=''): self.engine = engine self.prefix = prefix self._txn_context = txn_context or TxnContext(engine) self.begin = self._txn_context.begin self._counter_key_cache = {} self._encoder_prefix = dict((e, keylib.pack_int('', 1 + i)) for i, e in enumerate(encoders._ENCODERS)) self._prefix_encoder = dict((keylib.pack_int('', 1 + i), e) for i, e in enumerate(encoders._ENCODERS)) # ((kind, name, attr), value) self._meta = Collection(self, {'name': '\x00meta', 'idx': 9}, encoder=encoders.KEY, key_func=lambda t: t[:3]) self._colls = {}
def add_encoder(self, encoder): """Register an :py:class:`acid.encoders.Encoder` so that :py:class:`Collection` can find it during decompression/unpacking.""" try: return self._encoder_prefix[encoder] except KeyError: dct = self.get_info2(KIND_ENCODER, encoder.name) idx = dct.get('idx') if not dct: idx = self.count('\x00encoder_idx', init=10) assert idx <= 240 self.set_info2(KIND_ENCODER, encoder.name, {'idx': idx}) self._encoder_prefix[encoder] = keylib.pack_int('', idx) self._prefix_encoder[keylib.pack_int('', idx)] = encoder return self._encoder_prefix[encoder]
def add_encoder(self, encoder): """Register an :py:class:`acid.encoders.Encoder` so that :py:class:`Collection` can find it during decompression/unpacking.""" try: return self._encoder_prefix[encoder] except KeyError: dct = self.get_meta(KIND_ENCODER, encoder.name) idx = dct.get('idx') if not dct: idx = self.count('\x00encoder_idx', init=10) assert idx <= 240 self.set_meta(KIND_ENCODER, encoder.name, {'idx': idx}) self._encoder_prefix[encoder] = keylib.pack_int(idx) self._prefix_encoder[keylib.pack_int(idx)] = encoder return self._encoder_prefix[encoder]
def __init__(self, store, info, key_func=None, encoder=None, counter_name=None): """Create an instance; see class docstring.""" self.store = store self.engine = store.engine self.info = info self.prefix = keylib.pack_int(self.store.prefix, info['idx']) if not key_func: counter_name = counter_name or ('key:%(name)s' % self.info) key_func = lambda _: store.count(counter_name) info['blind'] = True else: info.setdefault('blind', False) self.key_func = key_func self.encoder = encoder or encoders.PICKLE self.encoder_prefix = self.store.add_encoder(self.encoder) #: Dict mapping indices added using :py:meth:`Collection.add_index` to #: :py:class:`Index` instances representing them. #: #: :: #: #: idx = coll.add_index('some index', lambda v: v[0]) #: assert coll.indices['some index'] is idx self.indices = {}
def __init__(self, coll, info, func): self.coll = coll self.store = coll.store self.engine = self.store.engine self.info = info #: The index function. self.func = func self.prefix = keylib.pack_int(self.store.prefix, info['idx'])
def __init__(self, coll, info, func): self.coll = coll self.store = coll.store self.info = info #: The index function. self.func = func self.prefix = keylib.pack_int(info['idx'], self.store.prefix) events.after_delete(self._coll_after_delete, coll) events.after_create(self._coll_after_create, coll) events.after_replace(self._coll_after_replace, coll)
def __init__(self, store, info, key_func=None, encoder=None, compressor=None, counter_name=None): """Create an instance; see class docstring.""" self.store = store self.engine = store.engine self.info = info prefix = keylib.pack_int(info['idx'], self.store.prefix) if info.get('strategy', 'batch') == 'batch': compressor = compressor or encoders.PLAIN self.strategy = BatchV2Strategy(prefix, store, compressor) else: assert info['strategy'] == 'basic' self.strategy = BasicStrategy(prefix) if key_func: self.key_func = key_func else: counter_name = counter_name or ('key:%(name)s' % self.info) self.key_func = lambda _: store.count(counter_name) self.encoder = encoder or encoders.JSON self._on_update = [] self._after_create = [] self._after_replace = [] self._after_delete = [] self._after_update = [] # Copied verbatim to allow proxying. self._on_commit = store._on_commit self._after_commit = store._after_commit self._after_abort = store._after_abort
def testInts(self): for i in self.INTS: s = keylib.pack_int('', i) j = keylib.unpack_int(s) assert j == i, (i, j, s)
def testInts(self): for i in self.INTS: s = keylib.pack_int(i) j = keylib.unpack_int(s) assert j == i, (i, j, s)
def pack_sizes(cur): s = pack_int('', len(cur)) s += return pack_int('', len(cur)) + ''.join(' ' + pack_int('', len(l)) for l in cur)