Dolda2000 GitWeb
/
didex.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed multi-index bug.
[didex.git]
/
didex
/
values.py
diff --git
a/didex/values.py
b/didex/values.py
index
bff26e7
..
e51d9d5
100644
(file)
--- a/
didex/values.py
+++ b/
didex/values.py
@@
-65,8
+65,7
@@
class descbase(base):
def __init__(self, store, indextype, name, datatype, default):
super().__init__(store, indextype, name, datatype)
self.default = default
def __init__(self, store, indextype, name, datatype, default):
super().__init__(store, indextype, name, datatype)
self.default = default
- self.mattr = "__idx_%s_new" % name
- self.iattr = "__idx_%s_cur" % name
+ self.mattr = "__ival_%s" % name
def __get__(self, obj, cls):
if obj is None: return self
def __get__(self, obj, cls):
if obj is None: return self
@@
-85,20
+84,24
@@
class simple(descbase):
def register(self, id, obj, tx):
val = self.__get__(obj, None)
self.index(tx).put(val, id, tx=tx)
def register(self, id, obj, tx):
val = self.__get__(obj, None)
self.index(tx).put(val, id, tx=tx)
- tx.postcommit(lambda: se
tattr(obj, self.iattr
, val))
+ tx.postcommit(lambda: se
lf.store.icache.__setitem__((obj, self)
, val))
def unregister(self, id, obj, tx):
def unregister(self, id, obj, tx):
- self.index(tx).remove(
getattr(obj, self.iattr)
, id, tx=tx)
- tx.postcommit(lambda:
delattr(obj, self.iattr
))
+ self.index(tx).remove(
self.store.icache[obj, self]
, id, tx=tx)
+ tx.postcommit(lambda:
self.store.icache.__delitem__((obj, self)
))
def update(self, id, obj, tx):
val = self.__get__(obj, None)
def update(self, id, obj, tx):
val = self.__get__(obj, None)
- ival =
getattr(obj, self.iattr)
+ ival =
self.store.icache[obj, self]
if val != ival:
idx = self.index(tx)
idx.remove(ival, id, tx=tx)
idx.put(val, id, tx=tx)
if val != ival:
idx = self.index(tx)
idx.remove(ival, id, tx=tx)
idx.put(val, id, tx=tx)
- tx.postcommit(lambda: setattr(obj, self.iattr, val))
+ tx.postcommit(lambda: self.store.icache.__setitem__((obj, self), val))
+
+ def loaded(self, id, obj, tx):
+ val = self.__get__(obj, None)
+ tx.postcommit(lambda: self.store.icache.__setitem__((obj, self), val))
class multi(descbase):
def __init__(self, store, indextype, name, datatype):
class multi(descbase):
def __init__(self, store, indextype, name, datatype):
@@
-109,30
+112,33
@@
class multi(descbase):
idx = self.index(tx)
for val in vals:
idx.put(val, id, tx=tx)
idx = self.index(tx)
for val in vals:
idx.put(val, id, tx=tx)
- tx.postcommit(lambda: se
tattr(obj, self.iattr
, vals))
+ tx.postcommit(lambda: se
lf.store.icache.__setitem__((obj, self)
, vals))
def unregister(self, id, obj, tx):
idx = self.index(tx)
def unregister(self, id, obj, tx):
idx = self.index(tx)
- for val in
getattr(obj, self.iattr)
:
+ for val in
self.store.icache[obj, self]
:
idx.remove(val, id, tx=tx)
idx.remove(val, id, tx=tx)
- tx.postcommit(lambda:
delattr(obj, self.iattr
))
+ tx.postcommit(lambda:
self.store.icache.__delitem__((obj, self)
))
def update(self, id, obj, tx):
vals = frozenset(self.__get__(obj, None))
def update(self, id, obj, tx):
vals = frozenset(self.__get__(obj, None))
- ivals =
getattr(obj, self.iattr)
+ ivals =
self.store.icache[obj, self]
if vals != ivals:
idx = self.index(tx)
for val in ivals - vals:
idx.remove(val, id, tx=tx)
for val in vals - ivals:
idx.put(val, id, tx=tx)
if vals != ivals:
idx = self.index(tx)
for val in ivals - vals:
idx.remove(val, id, tx=tx)
for val in vals - ivals:
idx.put(val, id, tx=tx)
- tx.postcommit(lambda: setattr(obj, self.iattr, vals))
+ tx.postcommit(lambda: self.store.icache.__setitem__((obj, self), vals))
+
+ def loaded(self, id, obj, tx):
+ vals = frozenset(self.__get__(obj, None))
+ tx.postcommit(lambda: self.store.icache.__setitem__((obj, self), vals))
class compound(base):
def __init__(self, indextype, name, *parts):
super().__init__(parts[0].store, indextype, name, index.compound(*(part.typ for part in parts)))
self.parts = parts
class compound(base):
def __init__(self, indextype, name, *parts):
super().__init__(parts[0].store, indextype, name, index.compound(*(part.typ for part in parts)))
self.parts = parts
- self.iattr = "__idx_%s_cur" % name
def minim(self, *parts):
return self.typ.minim(*parts)
def minim(self, *parts):
return self.typ.minim(*parts)
@@
-148,20
+154,24
@@
class compound(base):
def register(self, id, obj, tx):
val = tuple(part.__get__(obj, None) for part in self.parts)
self.index(tx).put(val, id, tx=tx)
def register(self, id, obj, tx):
val = tuple(part.__get__(obj, None) for part in self.parts)
self.index(tx).put(val, id, tx=tx)
- tx.postcommit(lambda: se
tattr(obj, self.iattr
, val))
+ tx.postcommit(lambda: se
lf.store.icache.__setitem__((obj, self)
, val))
def unregister(self, id, obj, tx):
def unregister(self, id, obj, tx):
- self.index(tx).remove(
getattr(obj, self.iattr)
, id, tx=tx)
- tx.postcommit(lambda:
delattr(obj, self.iattr
))
+ self.index(tx).remove(
self.store.icache[obj, self]
, id, tx=tx)
+ tx.postcommit(lambda:
self.store.icache.__delitem__((obj, self)
))
def update(self, id, obj, tx):
val = tuple(part.__get__(obj, None) for part in self.parts)
def update(self, id, obj, tx):
val = tuple(part.__get__(obj, None) for part in self.parts)
- ival =
getattr(obj, self.iattr)
+ ival =
self.store.icache[obj, self]
if val != ival:
idx = self.index(tx)
idx.remove(ival, id, tx=tx)
idx.put(val, id, tx=tx)
if val != ival:
idx = self.index(tx)
idx.remove(ival, id, tx=tx)
idx.put(val, id, tx=tx)
- tx.postcommit(lambda: setattr(obj, self.iattr, val))
+ tx.postcommit(lambda: self.store.icache.__setitem__((obj, self), val))
+
+ def loaded(self, id, obj, tx):
+ val = tuple(part.__get__(obj, None) for part in self.parts)
+ tx.postcommit(lambda: self.store.icache.__setitem__((obj, self), val))
class idlink(object):
def __init__(self, name, atype):
class idlink(object):
def __init__(self, name, atype):