Skip to content

Commit 11e0867

Browse files
committed
simplify
1 parent 22ebba9 commit 11e0867

File tree

1 file changed

+45
-45
lines changed

1 file changed

+45
-45
lines changed

packages/aws-library/tests/test_s3_client.py

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,25 @@ async def test_http_check_bucket_connected(
520520
)
521521

522522

523+
def _get_paths_with_prefix(
524+
uploaded_files: list[UploadedFile], prefix_level: int, path_prefix: Path
525+
) -> tuple[set[Path], set[Path]]:
526+
def _filter_by_prefix(uploaded_file: UploadedFile) -> bool:
527+
return Path(uploaded_file.s3_key).is_relative_to(path_prefix)
528+
529+
directories = {
530+
Path(file.s3_key).parents[prefix_level]
531+
for file in filter(_filter_by_prefix, uploaded_files)
532+
if Path(file.s3_key).parent != path_prefix
533+
}
534+
files = {
535+
Path(file.s3_key)
536+
for file in filter(_filter_by_prefix, uploaded_files)
537+
if Path(file.s3_key).parent == path_prefix
538+
}
539+
return directories, files
540+
541+
523542
@pytest.mark.parametrize(
524543
"directory_size, min_file_size, max_file_size",
525544
[
@@ -537,72 +556,53 @@ async def test_list_objects(
537556
with_uploaded_folder_on_s3: list[UploadedFile],
538557
simcore_s3_api: SimcoreS3API,
539558
):
540-
# Start testing from the root, will return only 1 object (the top level folder)
559+
# assert pre-conditions
541560
assert len(with_uploaded_folder_on_s3) >= 1, "wrong initialization of test!"
542561
top_level_paths = {
543562
Path(file.s3_key).parents[-2] for file in with_uploaded_folder_on_s3
544563
}
545-
assert len(top_level_paths) == 1
564+
assert (
565+
len(top_level_paths) == 1
566+
), "wrong initialization of test! we expect only one folder here"
546567

547-
received_objects = await simcore_s3_api.list_objects(
568+
# Start testing from the root, will return only 1 object (the top level folder)
569+
objects = await simcore_s3_api.list_objects(
548570
bucket=with_s3_bucket, prefix=None, start_after=None
549571
)
550-
assert len(received_objects) == len(top_level_paths)
551-
552-
listed_object_paths = {obj.as_path() for obj in received_objects}
553-
assert listed_object_paths == top_level_paths
572+
assert len(objects) == len(top_level_paths)
573+
assert {_.as_path() for _ in objects} == top_level_paths
554574

555575
# go one level deeper, will return all the folders + files in the first level
556576
first_level_prefix = next(iter(top_level_paths))
557-
first_level_directories = {
558-
Path(file.s3_key).parents[-3]
559-
for file in with_uploaded_folder_on_s3
560-
if Path(file.s3_key).parent != first_level_prefix
561-
}
562-
first_level_files = {
563-
Path(file.s3_key)
564-
for file in with_uploaded_folder_on_s3
565-
if Path(file.s3_key).parent == first_level_prefix
566-
}
577+
first_level_directories, first_level_files = _get_paths_with_prefix(
578+
with_uploaded_folder_on_s3, -3, path_prefix=first_level_prefix
579+
)
567580
first_level_paths = first_level_directories | first_level_files
568581

569-
received_objects = await simcore_s3_api.list_objects(
582+
objects = await simcore_s3_api.list_objects(
570583
bucket=with_s3_bucket, prefix=first_level_prefix, start_after=None
571584
)
572-
assert len(received_objects) == len(first_level_paths)
573-
listed_object_paths = {obj.as_path() for obj in received_objects}
574-
assert first_level_paths == listed_object_paths
575-
# split the received objects into files and directories
576-
received_files = {obj for obj in received_objects if isinstance(obj, S3MetaData)}
577-
received_directories = {
578-
obj for obj in received_objects if isinstance(obj, S3DirectoryMetaData)
579-
}
585+
assert len(objects) == len(first_level_paths)
586+
assert {_.as_path() for _ in objects} == first_level_paths
587+
# check files and directories are correctly separated
588+
received_files = {_ for _ in objects if isinstance(_, S3MetaData)}
589+
received_directories = {_ for _ in objects if isinstance(_, S3DirectoryMetaData)}
580590
assert len(received_files) == len(first_level_files)
581591
assert len(received_directories) == len(first_level_directories)
582592

583-
# we go one more level down
593+
# we go one more level down under a random first-level directory
584594
second_level_prefix = random.choice(list(first_level_directories)) # noqa: S311
585-
586-
def _filter_by_prefix(uploaded_file: UploadedFile) -> bool:
587-
return bool(f"{second_level_prefix}" in uploaded_file.s3_key)
588-
589-
second_level_directories = {
590-
Path(file.s3_key).parents[-4]
591-
for file in filter(_filter_by_prefix, with_uploaded_folder_on_s3)
592-
if Path(file.s3_key).parent != second_level_prefix
593-
}
594-
second_level_files = {
595-
Path(file.s3_key)
596-
for file in filter(_filter_by_prefix, with_uploaded_folder_on_s3)
597-
if Path(file.s3_key).parent == second_level_prefix
598-
}
595+
second_level_directories, second_level_files = _get_paths_with_prefix(
596+
with_uploaded_folder_on_s3, -4, path_prefix=second_level_prefix
597+
)
599598
second_level_paths = second_level_directories | second_level_files
600-
received_objects = await simcore_s3_api.list_objects(
599+
600+
objects = await simcore_s3_api.list_objects(
601601
bucket=with_s3_bucket, prefix=second_level_prefix, start_after=None
602602
)
603-
assert len(received_objects) == len(second_level_paths)
604-
listed_object_paths = {obj.as_path() for obj in received_objects}
605-
assert second_level_paths == listed_object_paths
603+
assert len(objects) == len(second_level_paths)
604+
received_paths = {obj.as_path() for obj in objects}
605+
assert second_level_paths == received_paths
606606

607607

608608
async def test_get_file_metadata(

0 commit comments

Comments
 (0)