aboutsummaryrefslogtreecommitdiff
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(" ")))
)