Source code for uac_cli.utils.process

import json
import re

import click
from jsonpath_ng import jsonpath, parse


[docs]def snake_to_camel(snake_case_str): """Converts a snake_case string to camelCase. Args: snake_case_str: The string in snake_case format. Returns: The converted string in camelCase format. """ components = snake_case_str.split("_") return components[0] + "".join(x.title() for x in components[1:])
[docs]def process_output(output, select, response, text=False, binary=False): if output: if binary: # write response to a binary file output.write(response) else: if text: output.write( f"{response.get('response', '')}".replace("\\n", "\n").encode() ) else: output.write(json.dumps(response, indent=4)) if select: jsonpath_expr = parse(select) result = [str(match.value) for match in jsonpath_expr.find(response)] click.echo("\n".join(result)) else: if output is None: if binary: click.echo(response) else: if text: click.echo(response.get("response", "").replace("\\n", "\n")) else: click.echo(json.dumps(response, indent=4))
[docs]def process_input(args, input=None, binary=False): vars_dict = dict(var.split("=", 1) for var in args) ctx = click.get_current_context() argument_file = ctx.find_root().params.get("argument_file") if argument_file: extra_arg_lines = argument_file.read().split("\n") for extra_arg in extra_arg_lines: if "=" in extra_arg: k_, v_ = extra_arg.split("=", 1) # Only add to vars_dict if the key isn't already there from args if k_ not in vars_dict: vars_dict[k_] = v_ if ( input != None and "retain_sys_ids" not in vars_dict and "retainSysIds" not in vars_dict ): vars_dict["retain_sys_ids"] = "true" if input: payload = input.read() if not binary: if not isinstance(payload, dict): payload = json.loads(payload) for var in vars_dict: _var = snake_to_camel(var) value = input_value_parsing(vars_dict[var]) if var in payload: payload[var] = value elif _var in payload: payload[_var] = value vars_dict["payload"] = payload else: vars_dict["data"] = payload return vars_dict
[docs]def input_value_parsing(value): if not isinstance(value, str): return value if value.lower() == ":none:": return None elif value.lower() == ":false:": return False elif value.lower() == ":true:": return True elif value == ":[]:": return [] elif value == ":{}:": return {} elif re.match(r"^:\d+:$", value): return int(value.strip(":")) else: return value
[docs]def create_payload(args): vars_dict = dict(var.split("=") for var in args) payload = {} for k, v in vars_dict.items(): payload[k] = v return payload