diff --git a/src/python/jw/pkg/lib/util.py b/src/python/jw/pkg/lib/util.py index 8e6dce1b..de242812 100644 --- a/src/python/jw/pkg/lib/util.py +++ b/src/python/jw/pkg/lib/util.py @@ -40,25 +40,30 @@ async def run_cmd(*args, ec: ExecContext|None=None, verbose: bool|None=None, **k ec = Local(verbose_default=verbose) return await ec.run(verbose=verbose, *args, **kwargs) -async def run_curl(args: list[str], parse_json: bool=True, wd=None, throw=None, verbose=None, cmd_input=None, ec: ExecContext|None=None) -> dict|str: # export +async def run_curl(args: list[str], parse_json: bool=False, wd=None, throw=None, verbose=None, cmd_input=None, ec: ExecContext|None=None, decode=False) -> dict|str: # export if verbose is None: verbose = False if ec is None else ec.verbose_default cmd = ['curl'] if not verbose: cmd.append('-s') cmd.extend(args) - ret, stderr, status = await run_cmd(cmd, wd=wd, throw=throw, verbose=verbose, cmd_input=cmd_input, ec=ec).decode() if parse_json: + decode = True + output = await run_cmd(cmd, wd=wd, throw=throw, verbose=verbose, cmd_input=cmd_input, ec=ec) + stdout, stderr, status = output.decode() if decode else output + if not parse_json: + ret = stdout + else: try: - ret = json.loads(ret) + ret = json.loads(stdout) except Exception as e: size = 'unknown number of' try: - size = len(ret) + size = len(stdout) except: pass log(ERR, f'Failed to parse {size} bytes output of command ' - + f'>{pretty_cmd(cmd, wd)}< ({str(e)}): "{ret}"', file=sys.stderr) + + f'>{pretty_cmd(cmd, wd)}< ({str(e)}): "{stdout}"', file=sys.stderr) raise return ret, stderr, status