Files
wehub-resource-sync c889a57b6b
Test Suites / Build CI Environment (push) Has been cancelled
Test Suites / Basic Tests (push) Has been cancelled
Test Suites / End-to-End Tests (push) Has been cancelled
Test Suites / CLI Tests (push) Has been cancelled
Test Suites / Slow End-to-End Tests (push) Has been cancelled
Test Suites / Graph Database Tests (push) Has been cancelled
Test Suites / Vector DB Tests (push) Has been cancelled
Test Suites / Temporal Graph Test (push) Has been cancelled
Test Suites / Search Test on Different DBs (push) Has been cancelled
Test Suites / Example Tests (push) Has been cancelled
Test Suites / Notebook Tests (push) Has been cancelled
Test Suites / OS and Python Tests Ubuntu (push) Has been cancelled
Test Suites / OS and Python Tests Extended (push) Has been cancelled
Test Suites / LLM Test Suite (push) Has been cancelled
Test Suites / S3 File Storage Test (push) Has been cancelled
Test Suites / Run Integration Tests (push) Has been cancelled
Test Suites / MCP Tests (push) Has been cancelled
Test Suites / Docker Compose Test (push) Has been cancelled
Test Suites / Docker CI test (push) Has been cancelled
Test Suites / Relational DB Migration Tests (push) Has been cancelled
Test Suites / Distributed Cognee Test (push) Has been cancelled
Test Suites / DB Examples Tests (push) Has been cancelled
Test Suites / Test Completion Status (push) Has been cancelled
Test Suites / Claude Code Review (push) Has been cancelled
Test Suites / basic checks (push) Has been cancelled
build | Build and Push Cognee MCP Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
build | Build and Push Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.11) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.12) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (kuzu, kuzu) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (neo4j, neo4j) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Examples (push) Has been cancelled
Weighted Edges Tests / Code Quality for Weighted Edges (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:02:24 +08:00

60 lines
2.7 KiB
Python

from uuid import UUID
from cognee.context_global_variables import backend_access_control_enabled
from cognee.infrastructure.databases.unified import get_unified_engine
from cognee.infrastructure.databases.provenance.markers import stores_provenance_in_graph
from cognee.modules.graph.legacy.has_nodes_in_legacy_ledger import has_nodes_in_legacy_ledger
from cognee.modules.graph.legacy.has_edges_in_legacy_ledger import has_edges_in_legacy_ledger
from cognee.modules.graph.methods import (
delete_dataset_related_edges,
delete_dataset_related_nodes,
get_dataset_related_nodes,
get_dataset_related_edges,
get_global_dataset_related_nodes,
get_global_dataset_related_edges,
)
from cognee.modules.graph.methods.delete_from_graph_and_vector import (
delete_from_graph_and_vector,
)
from cognee.modules.data.methods.get_authorized_dataset import get_authorized_dataset
from cognee.modules.users.methods.get_user import get_user
async def delete_dataset_nodes_and_edges(dataset_id: UUID, user_id: UUID) -> None:
user = await get_user(user_id)
# Check if user has delete permission for the dataset before proceeding with deletion of related graph/vector nodes and edges.
dataset = await get_authorized_dataset(user, dataset_id, "delete")
dataset_id = dataset.id
# Graph-provenance graphs carry provenance in the graph (no relational ledger
# rows). Route them through the unified boundary, which removes the
# dataset's source refs and hard-deletes any artifact left unowned.
unified = await get_unified_engine()
if unified.supports_graph_provenance_delete():
graph_engine = unified.graph
if await stores_provenance_in_graph(graph_engine):
await unified.delete_by_dataset_id(str(dataset_id))
return
if backend_access_control_enabled():
affected_nodes = await get_dataset_related_nodes(dataset_id)
affected_edges = await get_dataset_related_edges(dataset_id) if affected_nodes else []
else:
affected_nodes = await get_global_dataset_related_nodes(dataset_id)
affected_edges = (
await get_global_dataset_related_edges(dataset_id) if affected_nodes else []
)
if affected_nodes:
is_legacy_node = await has_nodes_in_legacy_ledger(affected_nodes)
is_legacy_edge = await has_edges_in_legacy_ledger(affected_edges)
await delete_from_graph_and_vector(
affected_nodes, affected_edges, is_legacy_node, is_legacy_edge
)
# Always clean up relational ownership records, even when no unique
# graph/vector nodes needed deletion (e.g. shared nodes across datasets).
await delete_dataset_related_nodes(dataset_id)
await delete_dataset_related_edges(dataset_id)