""" Use ReadActionMappings API to examine a working mapping's structure """ import grpc import sys import io sys.path.append(r'C:\DEV\COPILOT\geutebruck-api\src\api') if sys.platform == 'win32': sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') from protos import configuration_pb2 from protos import configuration_pb2_grpc print("="*70) print("EXAMINING WORKING MAPPING VIA API") print("="*70) channel = grpc.insecure_channel('localhost:50051') stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) print("\n1. Reading all action mappings...") request = configuration_pb2.ReadActionMappingsRequest() response = stub.ReadActionMappings(request) if not response.success: print(f" [ERROR] {response.error_message}") sys.exit(1) print(f" Total mappings: {response.total_count}") # Find a working mapping (with CrossSwitch) print("\n2. Looking for working mapping...") working_mapping = None for mapping in response.mappings: if "CrossSwitch" in mapping.name or "C_" in mapping.name: working_mapping = mapping break if not working_mapping: print(" [ERROR] No working mapping found!") print("\n All mappings:") for m in response.mappings: print(f" - {m.name}") sys.exit(1) print(f"\n3. Found working mapping: '{working_mapping.name}'") print(f"\n4. Mapping details:") print(f" Name: {working_mapping.name}") print(f" Start offset: {working_mapping.start_offset}") print(f" End offset: {working_mapping.end_offset}") print(f"\n5. Input actions ({len(working_mapping.input_actions)}):") for i, action in enumerate(working_mapping.input_actions): print(f" [{i}] Action: {action.action}") print(f" Parameters:") for param in action.parameters: print(f" - {param.name} = {param.value}") print(f"\n6. Output actions ({len(working_mapping.output_actions)}):") for i, action in enumerate(working_mapping.output_actions): print(f" [{i}] Action: {action.action}") print(f" Parameters:") for param in action.parameters: print(f" - {param.name} = {param.value}") # Also check our test mapping print(f"\n" + "="*70) print("COMPARING WITH TEST MAPPING") print("="*70) test_mapping = None for mapping in response.mappings: if "TEST_WITH_VIDEO_INPUT" in mapping.name: test_mapping = mapping break if test_mapping: print(f"\n7. Test mapping: '{test_mapping.name}'") print(f" Input actions: {len(test_mapping.input_actions)}") print(f" Output actions: {len(test_mapping.output_actions)}") print(f"\n8. KEY DIFFERENCE:") print(f" Working mapping has {len(working_mapping.input_actions)} input action(s)") print(f" Test mapping has {len(test_mapping.input_actions)} input action(s)") print(f"\n -> GeViSet probably requires at least 1 INPUT ACTION!") else: print("\n[WARNING] Test mapping not found") print("\n" + "="*70) print("DONE") print("="*70)