(val, nodes_dict, edges)
| 522 | |
| 523 | |
| 524 | def parse_element(val, nodes_dict, edges): |
| 525 | if val is None: |
| 526 | return |
| 527 | |
| 528 | # If it is a Path |
| 529 | if hasattr(val, 'nodes') and hasattr(val, 'relationships'): |
| 530 | for n in val.nodes: |
| 531 | parse_element(n, nodes_dict, edges) |
| 532 | for r in val.relationships: |
| 533 | parse_element(r, nodes_dict, edges) |
| 534 | return |
| 535 | |
| 536 | type_name = type(val).__name__ |
| 537 | |
| 538 | is_dict_rel = isinstance(val, dict) and ( |
| 539 | any(k in val for k in ('_src', '_dst', '_SRC', '_DST', 'src_node', 'dest_node')) |
| 540 | ) |
| 541 | is_dict_node = isinstance(val, dict) and ( |
| 542 | '_label' in val or '_LABEL' in val or 'labels' in val |
| 543 | ) and not is_dict_rel |
| 544 | |
| 545 | if type_name in ('Node', 'KuzuNode') or is_dict_node: |
| 546 | parse_node(val, nodes_dict) |
| 547 | elif type_name in ('Relationship', 'KuzuRelationship') or is_dict_rel: |
| 548 | parse_rel(val, edges) |
| 549 | elif isinstance(val, (list, tuple)): |
| 550 | for item in val: |
| 551 | parse_element(item, nodes_dict, edges) |
| 552 | |
| 553 | |
| 554 | class AIQueryRequest(BaseModel): |
no test coverage detected