about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gn2/wqflask/edit.py54
1 files changed, 32 insertions, 22 deletions
diff --git a/gn2/wqflask/edit.py b/gn2/wqflask/edit.py
index 500d1dae..b845fad0 100644
--- a/gn2/wqflask/edit.py
+++ b/gn2/wqflask/edit.py
@@ -5,8 +5,7 @@ from urllib.parse import urljoin
 from pathlib import Path
 from gn2.wqflask.oauth2.session import session_info
 
-from pymonad.tools import curry
-from pymonad.either import Either, Left
+from pymonad.either import Either, Left, Right
 
 from flask import (Blueprint,
                    flash,
@@ -21,36 +20,47 @@ from gn2.wqflask.oauth2.checks import require_oauth2_edit_resource_access
 metadata = Blueprint("metadata", __name__)
 
 
+def __run_cmd__(cmd) -> Either:
+    """Run a given command and return it's results as an Either monad"""
+    _result = ""
+    try:
+        _result = subprocess.run(
+            cmd, capture_output=True
+        )
+    except Exception as e_:
+        return Left({
+            "command": cmd,
+            "error": str(e_),
+        })
+    if _result.stderr:
+        return Left({
+            "command": cmd,
+            "error": _result.stderr.decode()
+        })
+    return Right(_result.stdout)
+
+
 def save_dataset_metadata(
         git_dir: str, output: str,
         author: str, content: str, msg: str
 ) -> Either:
     """Save dataset metadata to git"""
-    @curry(2)
-    def __run_cmd(cmd, status_code):
-        __result = subprocess.run(
-            cmd, capture_output=True
-        )
-        if __result.stderr or status_code != 0:
-            return Left({
-                "command": cmd,
-                "error": __result.stderr.decode()
-            })
-        return 0
 
-    (Either.insert(0)
-        .then(__run_cmd(f"git -C {git_dir} reset --hard origin".split(" ")))
-        .then(__run_cmd(f"git -C {git_dir} pull".split(" "))))
+    (__run_cmd__(f"git -C {git_dir} reset --hard origin".split(" "))
+     .then(lambda _: __run_cmd__(
+         f"git -C {git_dir} pull".split(" ")))
+     )
 
     with Path(output).open(mode="w") as _f:
         _f.write(content)
+
     return (
-        Either.insert(0)
-        .then(__run_cmd(f"git -C {git_dir} add .".split(" ")))
-        .then(__run_cmd(f"git -C {git_dir} commit -m".split(" ") + [
-            f'{msg}', f"--author='{author}'", "--no-gpg-sign"
-        ]))
-        .then(__run_cmd(f"git -C {git_dir} \
+        __run_cmd__(f"git -C {git_dir} add .".split(" "))
+        .then(lambda _: __run_cmd__(
+            f"git -C {git_dir} commit -m".split(" ") + [
+                f'{msg}', f"--author='{author}'", "--no-gpg-sign"
+            ]))
+        .then(lambda _: __run_cmd__(f"git -C {git_dir} \
 push origin master --dry-run".split(" ")))
     )