Skip to content

Commit f5de42b

Browse files
enhance implementation
1 parent 8f9231f commit f5de42b

File tree

2 files changed

+26
-42
lines changed

2 files changed

+26
-42
lines changed

services/storage/src/simcore_service_storage/simcore_s3_dsm.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,7 @@
7979
from .s3 import get_s3_client
8080
from .s3_utils import S3TransferDataCB, update_task_progress
8181
from .settings import Settings
82-
from .simcore_s3_dsm_utils import (
83-
expand_directory,
84-
find_enclosing_file,
85-
get_directory_file_id,
86-
)
82+
from .simcore_s3_dsm_utils import expand_directory, get_directory_file_id, get_fmd
8783
from .utils import (
8884
convert_db_to_model,
8985
download_to_file_or_raise,
@@ -527,19 +523,23 @@ async def delete_file(
527523
if not can.delete:
528524
raise FileAccessRightError(access_right="delete", file_id=file_id)
529525

530-
enclosing_file = await find_enclosing_file(conn, user_id, file_id)
531-
if enclosing_file:
532-
if enclosing_file.file_id == file_id:
533-
await db_file_meta_data.delete(conn, [file_id])
534-
else:
535-
enclosing_file.file_size = UNDEFINED_SIZE_TYPE
536-
await db_file_meta_data.upsert(conn, enclosing_file)
537-
538526
await get_s3_client(self.app).delete_objects_recursively(
539527
bucket=self.simcore_bucket_name,
540528
prefix=file_id,
541529
)
542530

531+
async with self.engine.acquire() as conn:
532+
file_fmd = await get_fmd(conn, file_id)
533+
if file_fmd and not file_fmd.is_directory:
534+
enclosing_dir_file_id = await get_directory_file_id(conn, file_id)
535+
if enclosing_dir_file_id:
536+
enclosing_dir_fmd = await db_file_meta_data.get(
537+
conn, enclosing_dir_file_id
538+
)
539+
enclosing_dir_fmd.file_size = -1
540+
await db_file_meta_data.upsert(conn, enclosing_dir_fmd)
541+
await db_file_meta_data.delete(conn, [file_id])
542+
543543
async def delete_project_simcore_s3(
544544
self, user_id: UserID, project_id: ProjectID, node_id: NodeID | None = None
545545
) -> None:

services/storage/src/simcore_service_storage/simcore_s3_dsm_utils.py

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from . import db_file_meta_data
1616
from .exceptions import FileMetaDataNotFoundError
17-
from .models import FileMetaData, FileMetaDataAtDB, UserID
17+
from .models import FileMetaData, FileMetaDataAtDB
1818
from .utils import convert_db_to_model
1919

2020

@@ -78,6 +78,16 @@ async def expand_directory(
7878
return result
7979

8080

81+
async def get_fmd(
82+
conn: SAConnection, s3_file_id: StorageFileID
83+
) -> FileMetaDataAtDB | None:
84+
with suppress(FileMetaDataNotFoundError):
85+
return await db_file_meta_data.get(
86+
conn, TypeAdapter(SimcoreS3FileID).validate_python(s3_file_id)
87+
)
88+
return None
89+
90+
8191
def get_simcore_directory(file_id: SimcoreS3FileID) -> str:
8292
try:
8393
directory_id = SimcoreS3DirectoryID.from_simcore_s3_object(file_id)
@@ -94,16 +104,7 @@ async def get_directory_file_id(
94104
in the `file_meta_data` table
95105
"""
96106

97-
async def _get_fmd(
98-
conn: SAConnection, s3_file_id: StorageFileID
99-
) -> FileMetaDataAtDB | None:
100-
with suppress(FileMetaDataNotFoundError):
101-
return await db_file_meta_data.get(
102-
conn, TypeAdapter(SimcoreS3FileID).validate_python(s3_file_id)
103-
)
104-
return None
105-
106-
provided_file_id_fmd = await _get_fmd(conn, file_id)
107+
provided_file_id_fmd = await get_fmd(conn, file_id)
107108
if provided_file_id_fmd:
108109
# file_meta_data exists it is not a directory
109110
return None
@@ -116,23 +117,6 @@ async def _get_fmd(
116117
directory_file_id = TypeAdapter(SimcoreS3FileID).validate_python(
117118
directory_file_id_str
118119
)
119-
directory_file_id_fmd = await _get_fmd(conn, directory_file_id)
120+
directory_file_id_fmd = await get_fmd(conn, directory_file_id)
120121

121122
return directory_file_id if directory_file_id_fmd else None
122-
123-
124-
async def find_enclosing_file(
125-
conn: SAConnection, user_id: UserID, file_id: SimcoreS3FileID
126-
) -> FileMetaDataAtDB | None:
127-
known_files = {
128-
Path(known_file.file_id): known_file
129-
for known_file in await db_file_meta_data.list_fmds(conn, user_id=user_id)
130-
}
131-
current_path = Path(file_id)
132-
while current_path and current_path != Path(current_path).parent:
133-
if current_path in known_files:
134-
return known_files.get(current_path)
135-
136-
current_path = Path(current_path).parent
137-
138-
return None

0 commit comments

Comments
 (0)