"""Small example of do/undo capability with PyTables"""
import tables
# Create an HDF5 file
fileh = tables.openFile("tutorial3-1.h5", "w", title="Undo/Redo demo 1")
#'-**-**-**-**-**-**- enable undo/redo log -**-**-**-**-**-**-**-'
fileh.enableUndo()
# Create a new array
one = fileh.createArray('/', 'anarray', [3,4], "An array")
# Mark this point
fileh.mark()
# Create a new array
another = fileh.createArray('/', 'anotherarray', [4,5], "Another array")
# Now undo the past operation
fileh.undo()
# Check that anotherarray does not exist in the object tree but anarray does
assert "/anarray" in fileh
assert "/anotherarray" not in fileh
# Unwind once more
fileh.undo()
# Check that anarray does not exist in the object tree
assert "/anarray" not in fileh
assert "/anotherarray" not in fileh
# Go forward up to the next marker
fileh.redo()
# Check that anarray has come back to life in a sane state
assert "/anarray" in fileh
assert fileh.root.anarray.read() == [3,4]
assert fileh.root.anarray.title == "An array"
assert fileh.root.anarray == one
# But anotherarray is not here yet
assert "/anotherarray" not in fileh
# Now, go rewind up to the end
fileh.redo()
assert "/anarray" in fileh
# Check that anotherarray has come back to life in a sane state
assert "/anotherarray" in fileh
assert fileh.root.anotherarray.read() == [4,5]
assert fileh.root.anotherarray.title == "Another array"
assert fileh.root.anotherarray == another
#'-**-**-**-**-**-**- disable undo/redo log -**-**-**-**-**-**-**-'
fileh.disableUndo()
# Close the file
fileh.close()
|