Preliminary source objects.
[redakcja.git] / src / sources / utils.py
diff --git a/src/sources/utils.py b/src/sources/utils.py
new file mode 100644 (file)
index 0000000..1326ea3
--- /dev/null
@@ -0,0 +1,25 @@
+from contextlib import contextmanager
+import os
+import shutil
+from time import time
+
+
+@contextmanager
+def replace_dir(d):
+    # create tmp dir
+    d = d.rstrip('/')
+    ts = int(time())
+    dnew = f'{d}.{ts}.new'
+    dold = f'{d}.{ts}.old'
+    os.makedirs(dnew)
+    try:
+        yield dnew
+    except:
+        shutil.rmtree(dnew)
+        raise
+    else:
+        if os.path.exists(d):
+            shutil.move(d, dold)
+        shutil.move(dnew, d)
+        if os.path.exists(dold):
+            shutil.rmtree(dold)