""" Dump raw folder tree structure for comparison """ import grpc import sys import json sys.path.append(r'C:\DEV\COPILOT\geutebruck-api\src\api') from protos import configuration_pb2 from protos import configuration_pb2_grpc def node_to_dict(node): """Convert FolderNode to dict for display""" result = { "type": node.Type, "name": node.Name } if node.StringValue: result["value"] = node.StringValue if node.IntValue is not None: result["value"] = node.IntValue if node.BoolValue is not None: result["value"] = node.BoolValue if node.Children: result["children"] = [node_to_dict(c) for c in node.Children] return result def dump_tree(): channel = grpc.insecure_channel('localhost:50051') stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) print("Requesting raw configuration export...") # Export as JSON export_request = configuration_pb2.ExportJsonRequest() export_response = stub.ExportConfigurationJson(export_request) if not export_response.success: print(f"ERROR: {export_response.error_message}") return print(f"Exported {export_response.json_size} bytes of JSON") # Parse the JSON root = json.loads(export_response.json_data) # Navigate to MappingRules config = root if root.get("Name") != "MappingRules": # Find MappingRules child mapping_rules = next((c for c in root.get("Children", []) if c.get("Name") == "MappingRules"), None) if not mapping_rules: print("ERROR: MappingRules not found!") print(f"Root name: {root.get('Name')}") return config = mapping_rules total_rules = len([c for c in config.get("Children", []) if c.get("Type") == "folder"]) print(f"\nTotal rule folders: {total_rules}") # Find first working mapping and first test mapping working = None test = None for child in config.get("Children", []): if child.get("Type") == "folder": # Get @ field for name name_field = next((c for c in child.get("Children", []) if c.get("Name") == "@"), None) name = name_field.get("StringValue", "") if name_field else "" if "GRPC_TEST" in name and not test: test = child elif "GRPC_TEST" not in name and not working: working = child if working and test: break if working: print(f"\n{'='*70}") print("WORKING MAPPING STRUCTURE:") print(f"{'='*70}") print(json.dumps(working, indent=2)) if test: print(f"\n{'='*70}") print("TEST MAPPING STRUCTURE:") print(f"{'='*70}") print(json.dumps(test, indent=2)) if __name__ == "__main__": try: dump_tree() except Exception as e: print(f"ERROR: {e}") import traceback traceback.print_exc()