Пример #1
0
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))
Пример #2
0
 def yamldump(self, source: Any) -> str:
     """Dump dictionary to YAML string."""
     return cast(str, yaml.dumpyaml(self.yaml(), source))
Пример #3
0
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
            )
        )
Пример #4
0
 def yamldump(self, source: Any) -> str:
     """Dump dictionary to YAML string."""
     return cast(str, yaml.dumpyaml(self.yaml(), source))