From be7f20366d390c46fc5d395b3f4eb70bbf5ff490 Mon Sep 17 00:00:00 2001 From: Cyber MacGeddon Date: Fri, 26 Sep 2025 10:17:49 +0100 Subject: [PATCH] Update tg-show-flows CLI --- trustgraph-cli/trustgraph/cli/show_flows.py | 69 ++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/trustgraph-cli/trustgraph/cli/show_flows.py b/trustgraph-cli/trustgraph/cli/show_flows.py index 06fbfbe8..f624c96e 100644 --- a/trustgraph-cli/trustgraph/cli/show_flows.py +++ b/trustgraph-cli/trustgraph/cli/show_flows.py @@ -45,6 +45,58 @@ def describe_interfaces(intdefs, flow): return "\n".join(lst) +def format_parameters(flow_params, class_params_metadata): + """ + Format flow parameters with their human-readable descriptions + + Args: + flow_params: The actual parameter values used in the flow + class_params_metadata: The parameter metadata from the flow class definition + + Returns: + Formatted string of parameters with descriptions + """ + if not flow_params: + return "None" + + param_list = [] + + # Sort parameters by order if available + sorted_params = sorted( + class_params_metadata.items(), + key=lambda x: x[1].get("order", 999) + ) + + for param_name, param_meta in sorted_params: + if param_name in flow_params: + value = flow_params[param_name] + description = param_meta.get("description", param_name) + param_type = param_meta.get("type", "") + advanced = param_meta.get("advanced", False) + controlled_by = param_meta.get("controlled-by", None) + + # Format the parameter line + line = f"• {description}: {value}" + + # Add metadata indicators + indicators = [] + if advanced: + indicators.append("advanced") + if controlled_by: + indicators.append(f"controlled by {controlled_by}") + + if indicators: + line += f" ({', '.join(indicators)})" + + param_list.append(line) + + # Add any parameters that aren't in the class metadata (shouldn't happen normally) + for param_name, value in flow_params.items(): + if param_name not in class_params_metadata: + param_list.append(f"• {param_name}: {value} (undefined)") + + return "\n".join(param_list) if param_list else "None" + def show_flows(url): api = Api(url) @@ -75,10 +127,23 @@ def show_flows(url): table.append(("class", flow.get("class-name", ""))) table.append(("desc", flow.get("description", ""))) - # Display parameters if they exist + # Display parameters with human-readable descriptions parameters = flow.get("parameters", {}) if parameters: - param_str = json.dumps(parameters, indent=2) + # Try to get the flow class definition for parameter metadata + class_name = flow.get("class-name", "") + if class_name: + try: + flow_class = flow_api.get_class(class_name) + class_params_metadata = flow_class.get("parameters", {}) + param_str = format_parameters(parameters, class_params_metadata) + except Exception as e: + # Fallback to JSON if we can't get the class definition + param_str = json.dumps(parameters, indent=2) + else: + # No class name, fallback to JSON + param_str = json.dumps(parameters, indent=2) + table.append(("parameters", param_str)) table.append(("queue", describe_interfaces(interface_defs, flow)))