1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
"""A more complex example of do/undo capability with PyTables.
Here, names has been assigned to the marks, and jumps are done between
marks.
"""
import tables as tb
# Create an HDF5 file
fileh = tb.open_file("tutorial3-2.h5", "w", title="Undo/Redo demo 2")
# '-**-**-**-**-**-**- enable undo/redo log -**-**-**-**-**-**-**-'
fileh.enable_undo()
# Start undoable operations
fileh.create_array("/", "otherarray1", [3, 4], "Another array 1")
fileh.create_group("/", "agroup", "Group 1")
# Create a 'first' mark
fileh.mark("first")
fileh.create_array("/agroup", "otherarray2", [4, 5], "Another array 2")
fileh.create_group("/agroup", "agroup2", "Group 2")
# Create a 'second' mark
fileh.mark("second")
fileh.create_array("/agroup/agroup2", "otherarray3", [5, 6], "Another array 3")
# Create a 'third' mark
fileh.mark("third")
fileh.create_array("/", "otherarray4", [6, 7], "Another array 4")
fileh.create_array("/agroup", "otherarray5", [7, 8], "Another array 5")
# Now go to mark 'first'
fileh.goto("first")
assert "/otherarray1" in fileh
assert "/agroup" in fileh
assert "/agroup/agroup2" not in fileh
assert "/agroup/otherarray2" not in fileh
assert "/agroup/agroup2/otherarray3" not in fileh
assert "/otherarray4" not in fileh
assert "/agroup/otherarray5" not in fileh
# Go to mark 'third'
fileh.goto("third")
assert "/otherarray1" in fileh
assert "/agroup" in fileh
assert "/agroup/agroup2" in fileh
assert "/agroup/otherarray2" in fileh
assert "/agroup/agroup2/otherarray3" in fileh
assert "/otherarray4" not in fileh
assert "/agroup/otherarray5" not in fileh
# Now go to mark 'second'
fileh.goto("second")
assert "/otherarray1" in fileh
assert "/agroup" in fileh
assert "/agroup/agroup2" in fileh
assert "/agroup/otherarray2" in fileh
assert "/agroup/agroup2/otherarray3" not in fileh
assert "/otherarray4" not in fileh
assert "/agroup/otherarray5" not in fileh
# Go to the end
fileh.goto(-1)
assert "/otherarray1" in fileh
assert "/agroup" in fileh
assert "/agroup/agroup2" in fileh
assert "/agroup/otherarray2" in fileh
assert "/agroup/agroup2/otherarray3" in fileh
assert "/otherarray4" in fileh
assert "/agroup/otherarray5" in fileh
# Check that objects have come back to life in a sane state
assert fileh.root.otherarray1.read() == [3, 4]
assert fileh.root.agroup.otherarray2.read() == [4, 5]
assert fileh.root.agroup.agroup2.otherarray3.read() == [5, 6]
assert fileh.root.otherarray4.read() == [6, 7]
assert fileh.root.agroup.otherarray5.read() == [7, 8]
# '-**-**-**-**-**-**- disable undo/redo log -**-**-**-**-**-**-**-'
fileh.disable_undo()
# Close the file
fileh.close()
|