diff --git a/api/extensions/ext_storage.py b/api/extensions/ext_storage.py index a609f13dbc..6df0879694 100644 --- a/api/extensions/ext_storage.py +++ b/api/extensions/ext_storage.py @@ -112,7 +112,7 @@ class Storage: def exists(self, filename): return self.storage_runner.exists(filename) - def delete(self, filename): + def delete(self, filename: str): return self.storage_runner.delete(filename) def scan(self, path: str, files: bool = True, directories: bool = False) -> list[str]: diff --git a/api/services/file_service.py b/api/services/file_service.py index b0c5a32c9f..1980cd8d59 100644 --- a/api/services/file_service.py +++ b/api/services/file_service.py @@ -3,8 +3,8 @@ import os import uuid from typing import Literal, Union -from sqlalchemy import Engine -from sqlalchemy.orm import sessionmaker +from sqlalchemy import Engine, select +from sqlalchemy.orm import Session, sessionmaker from werkzeug.exceptions import NotFound from configs import dify_config @@ -29,7 +29,7 @@ PREVIEW_WORDS_LIMIT = 3000 class FileService: - _session_maker: sessionmaker + _session_maker: sessionmaker[Session] def __init__(self, session_factory: sessionmaker | Engine | None = None): if isinstance(session_factory, Engine): @@ -236,11 +236,10 @@ class FileService: return content.decode("utf-8") def delete_file(self, file_id: str): - with self._session_maker(expire_on_commit=False) as session: - upload_file: UploadFile | None = session.query(UploadFile).where(UploadFile.id == file_id).first() + with self._session_maker() as session, session.begin(): + upload_file = session.scalar(select(UploadFile).where(UploadFile.id == file_id)) - if not upload_file: - return - storage.delete(upload_file.key) - session.delete(upload_file) - session.commit() + if not upload_file: + return + storage.delete(upload_file.key) + session.delete(upload_file)