feat: Add data deletion endpoint

Add ability to delete data instance through endpoint

Feature #COG-455
This commit is contained in:
Igor Ilic 2024-10-28 14:40:49 +01:00
parent fc3eb9b9b5
commit eca1b9fddd
5 changed files with 48 additions and 1 deletions

View file

@ -52,6 +52,31 @@ def get_datasets_router():
await delete_dataset(dataset)
@router.delete("/{dataset_id}/data/{data_id}", response_model=None, responses={404: {"model": ErrorResponseDTO}})
async def delete_data(dataset_id: str, data_id: str, user: User = Depends(get_authenticated_user)):
from cognee.modules.data.methods import get_data, delete_data
from cognee.modules.data.methods import get_dataset
# Check if user has permission to access dataset and data by trying to get the dataset
dataset = await get_dataset(user.id, dataset_id)
#TODO: Handle situation differently if user doesn't have permission to access data?
if dataset is None:
raise HTTPException(
status_code=404,
detail=f"Dataset ({dataset_id}) not found."
)
data = await get_data(user.id, data_id)
if data is None:
raise HTTPException(
status_code=404,
detail=f"Dataset ({data_id}) not found."
)
await delete_data(data)
@router.get("/{dataset_id}/graph", response_model=str)
async def get_dataset_graph(dataset_id: str, user: User = Depends(get_authenticated_user)):
from cognee.shared.utils import render_graph

View file

@ -6,6 +6,8 @@ from .get_dataset import get_dataset
from .get_datasets import get_datasets
from .get_datasets_by_name import get_datasets_by_name
from .get_dataset_data import get_dataset_data
from .get_data import get_data
# Delete
from .delete_dataset import delete_dataset
from .delete_data import delete_data

View file

@ -0,0 +1,8 @@
from cognee.modules.data.models import Data
from cognee.infrastructure.databases.relational import get_relational_engine
async def delete_data(data: Data):
db_engine = get_relational_engine()
return await db_engine.delete_data_by_id(data.__tablename__, data.id)

View file

@ -4,4 +4,4 @@ from cognee.infrastructure.databases.relational import get_relational_engine
async def delete_dataset(dataset: Dataset):
db_engine = get_relational_engine()
return await db_engine.delete_table(dataset.id)
return await db_engine.delete_data_by_id(dataset.__tablename__, dataset.id)

View file

@ -0,0 +1,12 @@
from uuid import UUID
from typing import Optional
from cognee.infrastructure.databases.relational import get_relational_engine
from ..models import Data
async def get_data(user_id: UUID, data_id: UUID) -> Optional[Data]:
db_engine = get_relational_engine()
async with db_engine.get_async_session() as session:
data = await session.get(Data, data_id)
return data