diff options
| author | Martin Sivak <msivak@redhat.com> | 2008-08-08 13:14:38 +0200 |
|---|---|---|
| committer | Martin Sivak <msivak@redhat.com> | 2008-08-08 13:45:26 +0200 |
| commit | 4f0642294b553500d122477d650b1f6b99c3089b (patch) | |
| tree | 278bc7730822bcbd3873adba045cac3eab354834 /pyfirstaidkit | |
| parent | 0c110fb2a29568906d11b652ac28845a866550fd (diff) | |
| download | firstaidkit-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.py | 27 |
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 |
