[Python-ideas] BackupFile
Kim Gräsman
kim at mvps.org
Mon Jun 25 14:17:29 CEST 2012
Hello,
I'm new here, so forgive me if this has been discussed before or is off-topic.
I came up with a mechanism that I thought might be useful in the
Python standard library -- a scope-bound self-restoring backup file. I
came to this naïve implementation;
--
class BackupError(Exception):
pass
class Backup:
def __init__(self, path):
if not os.path.exists(path) or os.path.isdir(path):
raise BackupError("%s must be a valid file path" % path)
self.path = path
self.backup_path = None
def __enter__(self):
self.backup()
def __exit__(self, type, value, traceback):
self.restore()
def _generate_backup_path(self):
tempdir = tempfile.mkdtemp()
basename = os.path.basename(self.path)
return os.path.join(tempdir, basename)
def backup(self):
backup_path = self._generate_backup_path()
shutil.copy(self.path, backup_path)
self.backup_path = backup_path
def restore(self):
if self.backup_path:
# Write backup back onto original
shutil.copy(self.backup_path, self.path)
shutil.rmtree(os.path.dirname(self.backup_path))
self.backup_path = None
--
Backups are intended to be scope-bound like so:
with Backup(settings_file):
rewrite_settings(settings_file)
do_something_else()
I even managed to use it with the @contextmanager attribute, to allow this:
with rewrite_settings(settings_file):
do_something_else()
So, open questions;
- Would something like this be useful outside of my office?
- Any suggestions for better names?
- This feels like it belongs in the tempfile module, would you agree?
- What's lacking in the implementation? Have I done something
decidedly non-Pythonic?
Thanks,
- Kim
More information about the Python-ideas
mailing list