62 lines
1.7 KiB
Python
Executable File
62 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import json
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
sys.path.insert(0, os.environ.get('OLLIE_TOOLS_PATH', os.path.dirname(os.path.abspath(__file__))))
|
|
from _lib.args import parse_args
|
|
|
|
RESERVED_KEYS = {"command"}
|
|
|
|
|
|
def to_flags(raw: dict) -> list[str]:
|
|
"""Convert all non-reserved keys to --key=value flags."""
|
|
flags = []
|
|
|
|
for key, value in raw.items():
|
|
if key in RESERVED_KEYS:
|
|
continue
|
|
|
|
if isinstance(value, str):
|
|
try:
|
|
parsed = json.loads(value)
|
|
if isinstance(parsed, dict):
|
|
for k, v in parsed.items():
|
|
flags.append(f"--{k}={v}")
|
|
continue
|
|
elif isinstance(parsed, list):
|
|
for item in parsed:
|
|
flags.append(f"--{key}={item}")
|
|
continue
|
|
except (json.JSONDecodeError, TypeError):
|
|
pass
|
|
flags.append(f"--{key}={value}")
|
|
elif isinstance(value, list):
|
|
for item in value:
|
|
flags.append(f"--{key}={item}")
|
|
elif isinstance(value, bool):
|
|
if value:
|
|
flags.append(f"--{key}")
|
|
elif isinstance(value, dict):
|
|
flags.append(f"--{key}={json.dumps(value)}")
|
|
else:
|
|
flags.append(f"--{key}={value}")
|
|
|
|
return flags
|
|
|
|
|
|
args = parse_args()
|
|
raw = args.raw()
|
|
command = args.require("command")
|
|
|
|
cmd = ["logseq-cli", command] + to_flags(raw)
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
|
|
if result.stdout:
|
|
sys.stdout.write(result.stdout)
|
|
if result.stderr:
|
|
sys.stderr.write(result.stderr)
|
|
sys.exit(result.returncode)
|