Commit 6772a539 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent a34ab52c
...@@ -100,16 +100,21 @@ from BTrees import LOBTree ...@@ -100,16 +100,21 @@ from BTrees import LOBTree
LOBTree.LOBTree = XLOTree LOBTree.LOBTree = XLOTree
# ZConn represent treegen-level connection to ZODB. # ZCtx represent treegen-level connection to ZODB.
# XXX high-level wrapper around zconn. # It wraps zconn + provides treegen-specif integration.
class ZConn(object): class ZCtx(object):
# XXX +.zstor
# .zconn # .zconn
# .root
# .valdict = zconn.root['treegen/values'] = {} v -> ZBlk(v) # .valdict = zconn.root['treegen/values'] = {} v -> ZBlk(v)
# XXX -> free function? (e.g. zopen(zstor)) ? # ZCtx(zstor) opens connection to zstor.
def __init__(zstor): def __init__(zctx, zstor):
zctx.db = DB(zstor)
zctx.zconn = zctx.db.open()
zctx.root = zctx.zconn.root()
# root['treegen/values'] = {} v -> ZBlk(v) # root['treegen/values'] = {} v -> ZBlk(v)
# TODO don't generate if already there
valdict = root['treegen/values'] = PersistentMapping() valdict = root['treegen/values'] = PersistentMapping()
valv = b'abcdefghi' valv = b'abcdefghi'
for v in valv: for v in valv:
...@@ -118,15 +123,16 @@ class ZConn(object): ...@@ -118,15 +123,16 @@ class ZConn(object):
valdict[v] = zblk valdict[v] = zblk
commit('treegen/values -> %r' % valv) commit('treegen/values -> %r' % valv)
def close(self): def close(zctx):
self.zconn.close() zctx.zconn.close()
zctx.db.close()
# vdecode(vtxt) -> vobj decodes value text into value object, e.g. 'a' -> ZBlk(a) # vdecode(vtxt) -> vobj decodes value text into value object, e.g. 'a' -> ZBlk(a)
# vencode(vobj) -> vtxt encodes value object into value text, e.g. ZBlk(a) -> 'a' # vencode(vobj) -> vtxt encodes value object into value text, e.g. ZBlk(a) -> 'a'
def vdecode(self, vtxt): # -> vobj def vdecode(zctx, vtxt): # -> vobj
return self.valdict[vtxt] return zctx.valdict[vtxt]
def vencode(self, vobj): # -> vtxt def vencode(zctx, vobj): # -> vtxt
for (k,v) in self.valdict.items(): for (k,v) in zctx.valdict.items():
if v is vobj: if v is vobj:
return k return k
raise KeyError("%r not found in value registry" % (vobj,)) raise KeyError("%r not found in value registry" % (vobj,))
...@@ -135,15 +141,15 @@ class ZConn(object): ...@@ -135,15 +141,15 @@ class ZConn(object):
@func @func
def Trees(zstor, r): def Trees(zstor, r):
for l in r.readlines(): for l in r.readlines():
1/0
# AllStructs generates subset of all possible tree changes in # AllStructs generates subset of all possible tree changes in
# between kv1 and kv2. See top-level documentation for details. # between kv1 and kv2. See top-level documentation for details.
@func @func
def AllStructs(zstor, kv1txt, kv2txt, n, seed=None): def AllStructs(zstor, kv1txt, kv2txt, n, seed=None):
db = DB(zstor); defer(db.close) zctx = ZCtx(zstor)
zconn = db.open(); defer(zconn.close) defer(zctx.close)
root = zconn.root()
# seed # seed
if seed is None: if seed is None:
...@@ -151,29 +157,8 @@ def AllStructs(zstor, kv1txt, kv2txt, n, seed=None): ...@@ -151,29 +157,8 @@ def AllStructs(zstor, kv1txt, kv2txt, n, seed=None):
print("# seed=%d" % seed) print("# seed=%d" % seed)
random.seed(seed) random.seed(seed)
""" kv1 = kvDecode(kv1txt, zctx.vdecode)
# root['treegen/values'] = {} v -> ZBlk(v) kv2 = kvDecode(kv2txt, zctx.vdecode)
valdict = root['treegen/values'] = PersistentMapping()
valv = b'abcdefghi'
for v in valv:
zblk = ZBlk()
zblk.setblkdata(v)
valdict[v] = zblk
commit('treegen/values -> %r' % valv)
# vdecode(vtxt) -> vobj decodes value text into value object, e.g. 'a' -> ZBlk(a)
# vencode(vobj) -> vtxt encodes value object into value text, e.g. ZBlk(a) -> 'a'
def vdecode(vtxt): # -> vobj
return valdict[vtxt]
def vencode(vobj): # -> vtxt
for (k,v) in valdict.items():
if v is vobj:
return k
raise KeyError("%r not found in value registry" % (vobj,))
"""
kv1 = kvDecode(kv1txt, vdecode)
kv2 = kvDecode(kv2txt, vdecode)
# δ kv1 <-> kv2 # δ kv1 <-> kv2
diff12 = diff(kv1, kv2) diff12 = diff(kv1, kv2)
...@@ -186,7 +171,7 @@ def AllStructs(zstor, kv1txt, kv2txt, n, seed=None): ...@@ -186,7 +171,7 @@ def AllStructs(zstor, kv1txt, kv2txt, n, seed=None):
t2AllStructs = list(xbtree.AllStructs(kv2.keys(), maxdepth, maxsplit)) t2AllStructs = list(xbtree.AllStructs(kv2.keys(), maxdepth, maxsplit))
# create the tree # create the tree
ztree = root['treegen/tree'] = XLOTree() ztree = zctx.root['treegen/tree'] = XLOTree()
commit('treegen/tree') commit('treegen/tree')
# XXX print something? # XXX print something?
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment