This is a utility for recording all writes to an object and then playing them back later.
>>> from UtahDataCenter import utah >>> x = utah({}) >>> x[3] = [] >>> x[3].append({}) >>> x[3][0][4] = 'abc' >>> x {3: [{4: 'abc'}]} >>> x.dump() [3] = [] 2013 Mar 20 20:56:58.635847 File "", line 1, in [3].append({}) 2013 Mar 20 20:57: 4.570768 File "", line 1, in [3][0][4] = 'abc' 2013 Mar 20 20:57:34.640986 File "", line 1, in
treedemo.py demonstrates that it even works through method invocations
~/UtahDataCenter master $ python3 treedemo.py .higher = tree[7,49,None,None] 2013 Mar 20 21:29:45.753952 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 19, in insert self.higher = tree(key, value) .higher.lower = tree[6,36,None,None] 2013 Mar 20 21:29:45.754378 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 14, in insert self.lower = tree(key, value) .lower = tree[4,16,None,None] 2013 Mar 20 21:29:45.754472 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 14, in insert self.lower = tree(key, value) .higher.lower.lower = tree[5,25,None,None] 2013 Mar 20 21:29:45.754631 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 14, in insert self.lower = tree(key, value) .higher.higher = tree[8,64,None,None] 2013 Mar 20 21:29:45.754785 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 19, in insert self.higher = tree(key, value) .lower.lower = tree[0,0,None,None] 2013 Mar 20 21:29:45.754904 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 14, in insert self.lower = tree(key, value) .lower.lower.higher = tree[1,1,None,None] 2013 Mar 20 21:29:45.755053 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 19, in insert self.higher = tree(key, value) .lower.lower.higher.higher = tree[3,9,None,None] 2013 Mar 20 21:29:45.755248 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 19, in insert self.higher = tree(key, value) .lower.lower.higher.higher.lower = tree[2,4,None,None] 2013 Mar 20 21:29:45.755489 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 16, in insert self.lower.insert(key, value) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 14, in insert self.lower = tree(key, value) .higher.higher.higher = tree[9,81,None,None] 2013 Mar 20 21:29:45.755685 File "treedemo.py", line 38, in mytree.insert(i, i*i) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 21, in insert self.higher.insert(key, value) File "treedemo.py", line 19, in insert self.higher = tree(key, value)