From ec1d366597a283f77638aafd8da5e2bc23012070 Mon Sep 17 00:00:00 2001 From: garciadeblas Date: Wed, 19 Jun 2024 18:29:50 +0200 Subject: [PATCH] Enable print_output common function to print json and yaml from python dict or list Change-Id: Iaab535c2e9e6361fbb2cf629031323ebd5c5293e Signed-off-by: garciadeblas --- osmclient/common/print_output.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/osmclient/common/print_output.py b/osmclient/common/print_output.py index a9364c8..3d72205 100644 --- a/osmclient/common/print_output.py +++ b/osmclient/common/print_output.py @@ -53,7 +53,16 @@ literal_option = click.option( ) -def print_output(format, headers, rows): +def print_output(format="table", headers=["field", "value"], rows=[], data=None): + """ + Prints content in specified format. + :param format: output format (table, yaml, json, csv, jsonpath=...). Default: + :param headers: headers of the content + :param rows: rows of the content + :param data: dictionary or list with the content to be printed. Only applies to yaml, json or jsonpath format. + If specified, headers and rows are ignored, and json/yaml/jsonpath output is generated directly from data. + """ + logger.debug("") if format == "table": table = PrettyTable(headers) @@ -67,12 +76,13 @@ def print_output(format, headers, rows): table.add_row(row) print(table.get_csv_string()) elif format == "json" or format == "yaml" or format.startswith("jsonpath="): - data = [] - for row in rows: - item = {} - for i in range(len(row)): - item[headers[i]] = row[i] - data.append(item) + if not data: + data = [] + for row in rows: + item = {} + for i in range(len(row)): + item[headers[i]] = row[i] + data.append(item) if format == "json": print(json.dumps(data, indent=4)) elif format == "yaml": -- 2.25.1