This commit is contained in:
2025-11-16 00:50:08 +00:00
parent 82f634f249
commit cf44ea8ef9
2 changed files with 169 additions and 52 deletions
+109
View File
@@ -414,3 +414,112 @@ class LocalGraph:
result['incoming'].append(rel_info)
return result
def get_queryable_relationships(self, node_id: str) -> dict:
"""Get relationships in a format optimized for graph queries."""
if node_id not in self.graph.nodes:
return {}
node_data = self.graph.nodes[node_id]
result = {
'node_id': node_id,
'node_type': node_data.get('type', ''),
'node_name': node_data.get('name', ''),
'file': node_data.get('file', ''),
'outgoing': [],
'incoming': [],
'cross_file': [],
'same_file': []
}
node_file = node_data.get('file', '')
# Process all relationships
for neighbor_id in self.graph.successors(node_id):
if neighbor_id in self.graph.nodes:
edge_data = self.graph.edges[node_id, neighbor_id]
neighbor_data = self.graph.nodes[neighbor_id]
rel_info = {
'type': edge_data.get('type', 'related'),
'target_id': neighbor_id,
'target_name': neighbor_data.get('name', ''),
'target_type': neighbor_data.get('type', ''),
'target_file': neighbor_data.get('file', '')
}
result['outgoing'].append(rel_info)
# Classify by file relationship
if neighbor_data.get('file') and neighbor_data.get('file') != node_file:
result['cross_file'].append(rel_info)
else:
result['same_file'].append(rel_info)
# Reverse relationships
for predecessor_id in self.graph.predecessors(node_id):
if predecessor_id in self.graph.nodes:
edge_data = self.graph.edges[predecessor_id, node_id]
predecessor_data = self.graph.nodes[predecessor_id]
rel_info = {
'type': edge_data.get('type', 'related'),
'source_id': predecessor_id,
'source_name': predecessor_data.get('name', ''),
'source_type': predecessor_data.get('type', ''),
'source_file': predecessor_data.get('file', '')
}
result['incoming'].append(rel_info)
return result
def classify_relationships(self, node_id):
node_data = self.graph.nodes[node_id]
node_file = node_data.get('file', '')
result = {
'outgoing': [],
'incoming': [],
'same_file': [],
'cross_file': []
}
for neighbor_id in self.graph.successors(node_id):
if neighbor_id in self.graph.nodes:
edge_data = self.graph.edges[node_id, neighbor_id]
neighbor_data = self.graph.nodes[neighbor_id]
rel_info = {
'type': edge_data.get('type', 'related'),
'target_id': neighbor_id,
'target_name': neighbor_data.get('name', ''),
'target_type': neighbor_data.get('type', ''),
'target_file': neighbor_data.get('file', '')
}
result['outgoing'].append(rel_info)
# Classify by file relationship
if neighbor_data.get('file') and neighbor_data.get('file') != node_file:
result['cross_file'].append(rel_info)
else:
result['same_file'].append(rel_info)
# Reverse relationships
for predecessor_id in self.graph.predecessors(node_id):
if predecessor_id in self.graph.nodes:
edge_data = self.graph.edges[predecessor_id, node_id]
predecessor_data = self.graph.nodes[predecessor_id]
rel_info = {
'type': edge_data.get('type', 'related'),
'source_id': predecessor_id,
'source_name': predecessor_data.get('name', ''),
'source_type': predecessor_data.get('type', ''),
'source_file': predecessor_data.get('file', '')
}
result['incoming'].append(rel_info)
return result