@@ -562,57 +562,36 @@ async def test_list_objects(
562562 # assert pre-conditions
563563 assert len (with_uploaded_folder_on_s3 ) >= 1 , "wrong initialization of test!"
564564
565- # Start testing from the root, will return only 1 object (the top level folder)
566- top_level_directories , top_level_files = _get_paths_with_prefix (
567- with_uploaded_folder_on_s3 , prefix_level = 0 , path_prefix = None
568- )
569- assert (
570- len (top_level_directories ) == 1
571- ), "wrong initialization of test! we expect only one folder here"
572- assert not top_level_files
573- top_level_paths = top_level_directories | top_level_files
565+ def find_deepest_file (files : list [UploadedFile ]) -> Path :
566+ return Path (max (files , key = lambda f : f .s3_key .count ("/" )).s3_key )
574567
575- objects = await simcore_s3_api .list_objects (
576- bucket = with_s3_bucket , prefix = None , start_after = None
577- )
578- assert len (objects ) == len (top_level_paths )
579- assert {_ .as_path () for _ in objects } == top_level_paths
568+ deepest_file_path = find_deepest_file (with_uploaded_folder_on_s3 )
569+ prefixes = deepest_file_path .parents [0 ].parts
580570
581- # go one level deeper, will return all the folders + files in the first level
582- first_level_prefix = random .choice (list (top_level_directories )) # noqa: S311
583- first_level_directories , first_level_files = _get_paths_with_prefix (
584- with_uploaded_folder_on_s3 , prefix_level = 1 , path_prefix = first_level_prefix
585- )
586- first_level_paths = first_level_directories | first_level_files
571+ # Start from the root and go down to the directory containing the deepest file
572+ for level in range (len (prefixes )):
573+ current_prefix = (
574+ Path (prefixes [0 ]).joinpath (* prefixes [1 :level ]) if level > 0 else None
575+ )
587576
588- objects = await simcore_s3_api .list_objects (
589- bucket = with_s3_bucket , prefix = first_level_prefix , start_after = None
590- )
591- assert len (objects ) == len (first_level_paths )
592- assert {_ .as_path () for _ in objects } == first_level_paths
593- # check files and directories are correctly separated
594- received_files = {_ for _ in objects if isinstance (_ , S3MetaData )}
595- received_directories = {_ for _ in objects if isinstance (_ , S3DirectoryMetaData )}
596- assert len (received_files ) == len (first_level_files )
597- assert len (received_directories ) == len (first_level_directories )
598-
599- # we go one more level down under a random first-level directory
600- second_level_prefix = random .choice (list (first_level_directories )) # noqa: S311
601- second_level_directories , second_level_files = _get_paths_with_prefix (
602- with_uploaded_folder_on_s3 , prefix_level = 2 , path_prefix = second_level_prefix
603- )
604- second_level_paths = second_level_directories | second_level_files
577+ directories , files = _get_paths_with_prefix (
578+ with_uploaded_folder_on_s3 , prefix_level = level , path_prefix = current_prefix
579+ )
580+ all_paths = directories | files
605581
606- objects = await simcore_s3_api .list_objects (
607- bucket = with_s3_bucket , prefix = second_level_prefix , start_after = None
608- )
609- assert len (objects ) == len (second_level_paths )
610- assert {_ .as_path () for _ in objects } == second_level_paths
611- # check files and directories are correctly separated
612- received_files = {_ for _ in objects if isinstance (_ , S3MetaData )}
613- received_directories = {_ for _ in objects if isinstance (_ , S3DirectoryMetaData )}
614- assert len (received_files ) == len (second_level_files )
615- assert len (received_directories ) == len (second_level_directories )
582+ objects = await simcore_s3_api .list_objects (
583+ bucket = with_s3_bucket , prefix = current_prefix , start_after = None
584+ )
585+ assert len (objects ) == len (all_paths )
586+ assert {_ .as_path () for _ in objects } == all_paths
587+
588+ # Check files and directories are correctly separated
589+ received_files = {_ for _ in objects if isinstance (_ , S3MetaData )}
590+ received_directories = {
591+ _ for _ in objects if isinstance (_ , S3DirectoryMetaData )
592+ }
593+ assert len (received_files ) == len (files )
594+ assert len (received_directories ) == len (directories )
616595
617596
618597async def test_get_file_metadata (
0 commit comments