summaryrefslogtreecommitdiffstats
path: root/pyfirstaidkit
diff options
context:
space:
mode:
authorMartin Sivak <msivak@redhat.com>2008-08-08 13:14:38 +0200
committerMartin Sivak <msivak@redhat.com>2008-08-08 13:45:26 +0200
commit4f0642294b553500d122477d650b1f6b99c3089b (patch)
tree278bc7730822bcbd3873adba045cac3eab354834 /pyfirstaidkit
parent0c110fb2a29568906d11b652ac28845a866550fd (diff)
downloadfirstaidkit-4f0642294b553500d122477d650b1f6b99c3089b.tar.gz
firstaidkit-4f0642294b553500d122477d650b1f6b99c3089b.tar.xz
firstaidkit-4f0642294b553500d122477d650b1f6b99c3089b.zip
Save metadata in backups, so we can write a restore tool
Diffstat (limited to 'pyfirstaidkit')
-rw-r--r--pyfirstaidkit/utils/backup.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/pyfirstaidkit/utils/backup.py b/pyfirstaidkit/utils/backup.py
index 4328163..25c4552 100644
--- a/pyfirstaidkit/utils/backup.py
+++ b/pyfirstaidkit/utils/backup.py
@@ -76,10 +76,30 @@ class FileBackupStore(BackupStoreInterface):
def __init__(self, id, path):
self._id = id
self._path = path
+ self._metafile = "__meta.pickle"
self._data = {} # name -> (stored as, origin)
self._origin = {} # origin -> name
os.makedirs(self._path)
+ def saveMeta(self):
+ f = open(os.path.join(self._path, self._metafile), "wb")
+ pickle.dump((self._id, self._data, self._origin), f, pickle.HIGHEST_PROTOCOL)
+ f.close()
+ return True
+
+ def loadMeta(self):
+ f = open(os.path.join(self._path, self._metafile), "rb")
+ (id, data, origin) = pickle.load(f)
+ f.close()
+
+ if id==self._id:
+ self._data = data
+ self._origin = origin
+ else:
+ raise BackupException("Loading metadata for different Backup (ID mismatch: '%s' and '%s')" % (self._id, id))
+
+ return True
+
def backupPath(self, path, name = None):
if name is None:
name = path
@@ -101,6 +121,9 @@ class FileBackupStore(BackupStoreInterface):
self._origin[path] = name
self._data[name] = (stored, path)
+
+ self.saveMeta()
+
return True
def backupValue(self, value, name):
@@ -114,6 +137,8 @@ class FileBackupStore(BackupStoreInterface):
f.close()
self._data[name] = (stored, None)
+
+ self.saveMeta()
return True
@@ -175,6 +200,8 @@ class FileBackupStore(BackupStoreInterface):
del self._data[name]
if origin is not None:
del self._origin[origin]
+
+ self.saveMeta()
return True