--- /dev/null
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+import json
+import yaml
+import click
+from prettytable import PrettyTable
+
+from jsonpath_ng import parse
+
+
+def print_output(format, headers, rows):
+ if format == "table":
+ table = PrettyTable(headers)
+ for row in rows:
+ table.add_row(row)
+ print(table)
+ elif format == "json":
+ data = []
+ for row in rows:
+ data.append(dict(zip(headers, row)))
+ json_data = json.dumps(data)
+ print(json_data)
+ elif format == "csv":
+ table = PrettyTable(headers)
+ for row in rows:
+ table.add_row(row)
+ print(table.get_csv_string())
+ elif format == "yaml":
+ data = []
+ for row in rows:
+ data.append(dict(zip(headers, row)))
+ yaml_string = yaml.safe_dump(data, sort_keys=False)
+ print(yaml_string)
+ elif format.startswith("jsonpath="):
+ # JSONPath expression
+ json_path_expression = format.partition("=")[-1]
+ json_path = parse(json_path_expression)
+ data = []
+ for row in rows:
+ data.append(dict(zip(headers, row)))
+ # json_data = json.dumps(data)
+ # Apply JSONPath expression on the JSON object
+ results = [match.value for match in json_path.find(data)]
+ print(results)
+ else:
+ print("Valid values for -o are table, yaml, csv, json, jsonpath")
+
+
+def validate_command_output(ctx, param, value):
+ allowed_commands = [
+ "ns-list",
+ "ns-show",
+ "vim-list",
+ "vim-show",
+ "vnf-list",
+ "vnf-show",
+ ] # List of allowed commands
+
+ if ctx.command.name in allowed_commands:
+ return value
+ # if param:
+ # print (value)
+ else:
+ raise click.BadParameter(
+ f'Option "{param.name}" is not allowed for this command.'
+ )