Merge pull request #812 from atYuguo/fix-neo4j

Fix neo4j `get_edge()`  edge_properties format
This commit is contained in:
Yannick Stephan
2025-02-17 18:37:05 +01:00
committed by GitHub

View File

@@ -278,14 +278,16 @@ class Neo4JStorage(BaseGraphStorage):
result = await session.run(query) result = await session.run(query)
record = await result.single() record = await result.single()
if record and "edge_properties" in record: if record:
try: try:
result = dict(record["edge_properties"]) result = dict(record["edge_properties"])
logger.info(f"Result: {result}")
# Ensure required keys exist with defaults # Ensure required keys exist with defaults
required_keys = { required_keys = {
"weight": 0.0, "weight": 0.0,
"source_id": None, "source_id": None,
"target_id": None, "description": None,
"keywords": None,
} }
for key, default_value in required_keys.items(): for key, default_value in required_keys.items():
if key not in result: if key not in result:
@@ -305,20 +307,20 @@ class Neo4JStorage(BaseGraphStorage):
f"and {entity_name_label_target}: {str(e)}" f"and {entity_name_label_target}: {str(e)}"
) )
# Return default edge properties on error # Return default edge properties on error
return {"weight": 0.0, "source_id": None, "target_id": None} return {"weight": 0.0, "description": None, "keywords": None, "source_id": None}
logger.debug( logger.debug(
f"{inspect.currentframe().f_code.co_name}: No edge found between {entity_name_label_source} and {entity_name_label_target}" f"{inspect.currentframe().f_code.co_name}: No edge found between {entity_name_label_source} and {entity_name_label_target}"
) )
# Return default edge properties when no edge found # Return default edge properties when no edge found
return {"weight": 0.0, "source_id": None, "target_id": None} return {"weight": 0.0, "description": None, "keywords": None, "source_id": None}
except Exception as e: except Exception as e:
logger.error( logger.error(
f"Error in get_edge between {source_node_id} and {target_node_id}: {str(e)}" f"Error in get_edge between {source_node_id} and {target_node_id}: {str(e)}"
) )
# Return default edge properties on error # Return default edge properties on error
return {"weight": 0.0, "source_id": None, "target_id": None} return {"weight": 0.0, "description": None, "keywords": None, "source_id": None}
async def get_node_edges(self, source_node_id: str) -> list[tuple[str, str]] | None: async def get_node_edges(self, source_node_id: str) -> list[tuple[str, str]] | None:
node_label = source_node_id.strip('"') node_label = source_node_id.strip('"')