There is a mixin class that provides usefull methods to generate a working directory and make snapshots thereof.
>>> from lovely.testlayers.layer import WorkDirectoryLayer
Let us create a sample layer.
>>> class MyLayer(WorkDirectoryLayer):
... def __init__(self, name):
... self.__name__ = name
>>> myLayer = MyLayer('mylayer')
To initialize the directories we need to create the directory structure.
>>> myLayer.setUpWD()
We can get relative paths by using the os.path join syntax.
>>> myLayer.wdPath('a', 'b')
'.../__builtin__.MyLayer.mylayer/work/a/b'
Let us create a directory.
>>> import os
>>> os.mkdir(myLayer.wdPath('firstDirectory'))
And make a snapshot.
>>> myLayer.makeSnapshot('first')
We can check if we have a snapshot.
>>> myLayer.hasSnapshot('first')
True
And get the info for the snapshot.
>>> exists, path = myLayer.snapshotInfo('first')
>>> exists
True
>>> path
'...ss_first.tar.gz'
And now we make a second directory and another snapshot.
>>> os.mkdir(myLayer.wdPath('secondDirectory'))
>>> myLayer.makeSnapshot('second')
We now have 2 directories.
>>> sorted(os.listdir(myLayer.wdPath()))
['firstDirectory', 'secondDirectory']
We now restore the “first” snapshot
>>> myLayer.restoreSnapshot('first')
>>> sorted(os.listdir(myLayer.wdPath()))
['firstDirectory']
We can also restore the “second” snapshot.
>>> myLayer.restoreSnapshot('second')
>>> sorted(os.listdir(myLayer.wdPath()))
['firstDirectory', 'secondDirectory']
We can also override snapshots.
>>> os.mkdir(myLayer.wdPath('thirdDirectory'))
>>> myLayer.makeSnapshot('first')
>>> myLayer.restoreSnapshot('first')
>>> sorted(os.listdir(myLayer.wdPath()))
['firstDirectory', 'secondDirectory', 'thirdDirectory']
The snapshot directory can be specified, this is usefull if snapshots need to be persistet to the project directory for example.
>>> myLayer2 = MyLayer('mylayer2')
>>> import tempfile
>>> myLayer2.setUpWD()
>>> myLayer2.snapDir = tempfile.mkdtemp()
>>> os.mkdir(myLayer2.wdPath('adir'))
>>> myLayer2.makeSnapshot('first')
>>> os.listdir(myLayer2.snapDir)
['ss_first.tar.gz']
>>> os.mkdir(myLayer2.wdPath('bdir'))
>>> sorted(os.listdir(myLayer2.wdPath()))
['adir', 'bdir']
>>> myLayer2.restoreSnapshot('first')
>>> sorted(os.listdir(myLayer2.wdPath()))
['adir']