X-Git-Url: http://dolda2000.com/gitweb/?p=didex.git;a=blobdiff_plain;f=didex%2Fvalues.py;fp=didex%2Fvalues.py;h=a4473f079e19e5ca5556b746180a3f6e95491806;hp=ecb78dd26d1cd70ce5f1380279e7ab2d7613743e;hb=73761d103993f8ec26bb61d1d405edde9efb5ddd;hpb=a19ad473ae0a534f454dadacb01d8252ab51c21f diff --git a/didex/values.py b/didex/values.py index ecb78dd..a4473f0 100644 --- a/didex/values.py +++ b/didex/values.py @@ -31,14 +31,14 @@ class base(storedesc): self.idx = None self.lk = threading.Lock() - def index(self): + def index(self, tx): with self.lk: if self.idx is None: - self.idx = self.indextype(self.store.db(), self.name, self.typ) + self.idx = self.indextype(self.store.db(), self.name, self.typ, tx=tx) return self.idx def get(self, **kwargs): - return cursor(self.index().get(**kwargs), self.store) + return cursor(self.index(None).get(**kwargs), self.store) def get1(self, *, check=False, default=KeyError, **kwargs): with self.get(**kwargs) as cursor: @@ -84,18 +84,18 @@ class simple(descbase): def register(self, id, obj, tx): val = self.__get__(obj, None) - self.index().put(val, id, tx=tx) + self.index(tx).put(val, id, tx=tx) tx.postcommit(lambda: setattr(obj, self.iattr, val)) def unregister(self, id, obj, tx): - self.index().remove(getattr(obj, self.iattr), id, tx=tx) + self.index(tx).remove(getattr(obj, self.iattr), id, tx=tx) tx.postcommit(lambda: delattr(obj, self.iattr)) def update(self, id, obj, tx): val = self.__get__(obj, None) ival = getattr(obj, self.iattr) if val != ival: - idx = self.index() + idx = self.index(tx) idx.remove(ival, id, tx=tx) idx.put(val, id, tx=tx) tx.postcommit(lambda: setattr(obj, self.iattr, val)) @@ -106,13 +106,13 @@ class multi(descbase): def register(self, id, obj, tx): vals = frozenset(self.__get__(obj, None)) - idx = self.index() + idx = self.index(tx) for val in vals: idx.put(val, id, tx=tx) tx.postcommit(lambda: setattr(obj, self.iattr, vals)) def unregister(self, id, obj, tx): - idx = self.index() + idx = self.index(tx) for val in getattr(obj, self.iattr): idx.remove(val, id, tx=tx) tx.postcommit(lambda: delattr(obj, self.iattr)) @@ -121,7 +121,7 @@ class multi(descbase): vals = frozenset(self.__get__(obj, None)) ivals = getattr(obj, self.iattr) if vals != ivals: - idx = self.index() + idx = self.index(tx) for val in ivals - vals: idx.remove(val, id, tx=tx) for val in vals - ivals: @@ -147,18 +147,18 @@ class compound(base): def register(self, id, obj, tx): val = tuple(part.__get__(obj, None) for part in self.parts) - self.index().put(val, id, tx=tx) + self.index(tx).put(val, id, tx=tx) tx.postcommit(lambda: setattr(obj, self.iattr, val)) def unregister(self, id, obj, tx): - self.index().remove(getattr(obj, self.iattr), id, tx=tx) + self.index(tx).remove(getattr(obj, self.iattr), id, tx=tx) tx.postcommit(lambda: delattr(obj, self.iattr)) def update(self, id, obj, tx): val = tuple(part.__get__(obj, None) for part in self.parts) ival = getattr(obj, self.iattr) if val != ival: - idx = self.index() + idx = self.index(tx) idx.remove(ival, id, tx=tx) idx.put(val, id, tx=tx) tx.postcommit(lambda: setattr(obj, self.iattr, val))