-import threading, pickle
+import threading, pickle, inspect, atexit
from . import db, index, cache
from .db import txnfun
if self.path is None:
self.path = self.getpath()
self.bk = db.environment(self.path, recover=self.recover)
+ atexit.register(self.close)
return self.bk
def close(self):
with self.lk:
if self.bk is not None:
+ atexit.unregister(self.close)
self.bk.close()
self.bk = None
def storedescs(obj):
t = type(obj)
- ret = getattr(t, "__didex_attr", None)
+ ret = t.__dict__.get("__didex_attr")
if ret is None:
ret = []
- for nm, val in t.__dict__.items():
- if isinstance(val, storedesc):
- ret.append((nm, val))
+ for st in inspect.getmro(t):
+ for nm, val in st.__dict__.items():
+ if isinstance(val, storedesc):
+ ret.append((nm, val))
t.__didex_attr = ret
return ret
def __call__(self, *args, **kwargs):
new = super().__call__(*args, **kwargs)
new.id = self.store.register(new)
+ self.store.update(new.id, vfy=new) # This doesn't feel too nice.
return new
class autostore(object, metaclass=autotype):