Recursively collect all element refs (dicts with 'id') from a nested structure.
(data: Any, seen: set[int], result: list[dict[str, Any]])
| 161 | |
| 162 | |
| 163 | def _collect_elements(data: Any, seen: set[int], result: list[dict[str, Any]]) -> None: |
| 164 | """Recursively collect all element refs (dicts with 'id') from a nested structure.""" |
| 165 | if isinstance(data, dict): |
| 166 | if "id" in data and isinstance(data["id"], int): |
| 167 | eid = data["id"] |
| 168 | if eid not in seen: |
| 169 | seen.add(eid) |
| 170 | result.append( |
| 171 | {"id": data["id"], "type": data.get("type"), "name": data.get("name")} |
| 172 | if "name" in data |
| 173 | else {"id": data["id"], "type": data.get("type")} |
| 174 | ) |
| 175 | for v in data.values(): |
| 176 | _collect_elements(v, seen, result) |
| 177 | elif isinstance(data, list): |
| 178 | for item in data: |
| 179 | _collect_elements(item, seen, result) |
| 180 | |
| 181 | |
| 182 | def relations( |