def raw_format_output( output: str, data: List[Dict[str, Any]], yamlparser: YAML, columns: Optional[List] = None, no_headers: bool = False, table_format: str = 'plain', sort_by: Optional[str] = None, ) -> str: """Format the raw output.""" if output == 'auto': _LOGGING.debug("Output `auto` thus using %s", const.DEFAULT_DATAOUTPUT) output = const.DEFAULT_DATAOUTPUT if sort_by: _sort_table(data, sort_by) if output == 'json': try: return json.dumps(data, indent=2, sort_keys=False) except ValueError: return str(data) elif output == 'yaml': try: return cast(str, yaml.dumpyaml(yamlparser, data)) except ValueError: return str(data) elif output == 'table': from jsonpath_rw import parse if not columns: columns = const.COLUMNS_DEFAULT fmt = [(v[0], parse(v[1] if len(v) > 1 else v[0])) for v in columns] result = [] if no_headers: headers = [] # type: List[str] else: headers = [v[0] for v in fmt] for item in data: row = [] for fmtpair in fmt: val = [match.value for match in fmtpair[1].find(item)] row.append(", ".join(map(str, val))) result.append(row) res = tabulate(result, headers=headers, tablefmt=table_format) # type: str return res else: raise ValueError( "Output Format was {}, expected either 'json' or 'yaml'".format( output))
def yamldump(self, source: Any) -> str: """Dump dictionary to YAML string.""" return cast(str, yaml.dumpyaml(self.yaml(), source))
def raw_format_output( output: str, data: Union[Dict[str, Any], List[Dict[str, Any]]], yamlparser: YAML, columns: Optional[List] = None, no_headers: bool = False, table_format: str = 'plain', sort_by: Optional[str] = None, ) -> str: """Format the raw output.""" if output == 'auto': _LOGGING.debug("Output `auto` thus using %s", const.DEFAULT_DATAOUTPUT) output = const.DEFAULT_DATAOUTPUT if sort_by and isinstance(data, List): _sort_table(data, sort_by) if output == 'json': try: return json.dumps(data, indent=2, sort_keys=False) except ValueError: return str(data) elif output == 'yaml': try: return cast(str, yaml.dumpyaml(yamlparser, data)) except ValueError: return str(data) elif output == 'table': from jsonpath_rw import parse if not columns: columns = const.COLUMNS_DEFAULT fmt = [(v[0], parse(v[1] if len(v) > 1 else v[0])) for v in columns] result = [] if no_headers: headers = [] # type: List[str] else: headers = [v[0] for v in fmt] # in case data passed in is a single element # we turn it into a single item list for better table output if not isinstance(data, List): data = [data] for item in data: row = [] for fmtpair in fmt: val = [match.value for match in fmtpair[1].find(item)] row.append(", ".join(map(str, val))) result.append(row) res = tabulate( result, headers=headers, tablefmt=table_format ) # type: str return res else: raise ValueError( "Output Format was {}, expected either 'json' or 'yaml'".format( output ) )