#!/usr/bin/env python3 """Export structured action mappings to JSON file""" import sys sys.path.insert(0, r'C:\DEV\COPILOT\geutebruck-api\src\api') import grpc import json from protos import configuration_pb2 from protos import configuration_pb2_grpc def export_mappings(): """Export action mappings in structured format""" print("Exporting structured action mappings...") print("="*70) with grpc.insecure_channel('localhost:50051') as channel: stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) # Get action mappings request = configuration_pb2.ReadActionMappingsRequest() response = stub.ReadActionMappings(request) if not response.success: print(f"Failed: {response.error_message}") return False print(f"Total mappings: {response.total_count}") # Convert to structured format mappings = [] mappings_with_params = 0 for idx, mapping in enumerate(response.mappings, 1): # Convert input actions input_actions = [] for action_def in mapping.input_actions: parameters = {} for param in action_def.parameters: parameters[param.name] = param.value input_actions.append({ "action": action_def.action, "parameters": parameters }) # Convert output actions output_actions = [] for action_def in mapping.output_actions: parameters = {} for param in action_def.parameters: parameters[param.name] = param.value output_actions.append({ "action": action_def.action, "parameters": parameters }) # Check if has parameters has_params = any(len(a["parameters"]) > 0 for a in output_actions) or \ any(len(a["parameters"]) > 0 for a in input_actions) if has_params: mappings_with_params += 1 mappings.append({ "id": idx, "offset": mapping.start_offset, "input_actions": input_actions, "output_actions": output_actions }) # Build result result = { "total_mappings": len(mappings), "mappings_with_parameters": mappings_with_params, "mappings": mappings } # Save to file output_file = "structured_action_mappings_export.json" with open(output_file, 'w', encoding='utf-8') as f: json.dump(result, f, indent=2, ensure_ascii=False) print(f"Mappings with parameters: {mappings_with_params}") print(f"\nSaved to: {output_file}") # Show examples print("\n" + "="*70) print("EXAMPLES:") print("="*70) # Simple mapping simple = [m for m in mappings if len(m["output_actions"]) > 0 and all(len(a["parameters"]) == 0 for a in m["output_actions"])] if simple: print("\n1. Simple mapping (no parameters):") print(f" Offset: {simple[0]['offset']}") for action in simple[0]["output_actions"][:2]: print(f" • {action['action']}") # Complex mapping complex_mappings = [m for m in mappings if len(m["output_actions"]) > 0 and any(len(a["parameters"]) > 0 for a in m["output_actions"])] if complex_mappings: print(f"\n2. Complex mapping with parameters:") m = complex_mappings[0] print(f" Offset: {m['offset']}") for i, action in enumerate(m["output_actions"][:2], 1): print(f"\n Action {i}: {action['action']}") if action["parameters"]: print(f" Parameters:") for key, val in list(action["parameters"].items())[:5]: print(f" • {key}: {val}") print("\n" + "="*70) print("✓ Export completed successfully!") return True if __name__ == '__main__': export_mappings()