From ea9ac6a1cda7aa493bb73c35d505d1a85d1e3432 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sun, 3 May 2026 01:17:21 +0000 Subject: [PATCH] fix(graph-api): fix project/task dict access after ProjectManager refactor Replace .to_dict() calls and attribute access with direct dict usage, add get_storage() import for delete_project, and rewrite reset_project to use save_project() with a partial dict instead of mutating an ORM object. Co-Authored-By: Claude Sonnet 4.6 --- backend/app/api/graph.py | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/backend/app/api/graph.py b/backend/app/api/graph.py index aff1e5ac..a5e0eef6 100644 --- a/backend/app/api/graph.py +++ b/backend/app/api/graph.py @@ -10,6 +10,7 @@ import threading from flask import request, jsonify from . import graph_bp +from .. import get_storage from ..config import Config from ..services.ontology_generator import OntologyGenerator from ..services.graph_builder import GraphBuilderService @@ -49,7 +50,7 @@ def get_project(project_id: str): return jsonify({ "success": True, - "data": project.to_dict() + "data": project }) @@ -63,7 +64,7 @@ def list_projects(): return jsonify({ "success": True, - "data": [p.to_dict() for p in projects], + "data": projects, "count": len(projects) }) @@ -73,7 +74,8 @@ def delete_project(project_id: str): """ Delete a project """ - success = ProjectManager.delete_project(project_id) + storage = get_storage() + success = ProjectManager.delete_project(project_id, storage=storage) if not success: return jsonify({ @@ -93,28 +95,25 @@ def reset_project(project_id: str): Reset project status (used to rebuild the graph) """ project = ProjectManager.get_project(project_id) - + if not project: return jsonify({ "success": False, "error": t('api.projectNotFound', id=project_id) }), 404 - # Reset to ontology-generated status - if project.ontology: - project.status = ProjectStatus.ONTOLOGY_GENERATED - else: - project.status = ProjectStatus.CREATED - - project.graph_id = None - project.graph_build_task_id = None - project.error = None - ProjectManager.save_project(project) - + new_status = ProjectStatus.ONTOLOGY_GENERATED if project.get("ontology") else ProjectStatus.CREATED + ProjectManager.save_project({ + "id": project_id, + "status": new_status, + "active_task_id": None, + }) + updated = ProjectManager.get_project(project_id) + return jsonify({ "success": True, "message": t('api.projectReset', id=project_id), - "data": project.to_dict() + "data": updated }) @@ -670,7 +669,7 @@ def get_task(task_id: str): return jsonify({ "success": True, - "data": task.to_dict() + "data": task }) @@ -683,7 +682,7 @@ def list_tasks(): return jsonify({ "success": True, - "data": [t.to_dict() for t in tasks], + "data": tasks, "count": len(tasks) })