Skip to content

Commit 281cfd8

Browse files
use pagenator in list item to avoid 1000 limit (#178)
* use pagenator in list item to avoid 1000 limit * fix linter issue * minor code improvement
1 parent a452dbf commit 281cfd8

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

charon/storage.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -698,32 +698,36 @@ def list_folder_content(self, bucket_name: str, folder: str) -> List[str]:
698698
not in its subfolders.
699699
"""
700700
bucket = self.__get_bucket(bucket_name)
701+
701702
try:
703+
paginator = bucket.meta.client.get_paginator('list_objects_v2')
702704
if not folder or folder.strip() == "/" or folder.strip() == "":
703-
result = bucket.meta.client.list_objects(
705+
pages = paginator.paginate(
704706
Bucket=bucket.name,
705707
Delimiter='/'
706708
)
707709
else:
708710
prefix = folder if folder.endswith("/") else folder+"/"
709-
result = bucket.meta.client.list_objects(
711+
pages = paginator.paginate(
710712
Bucket=bucket.name,
711713
Prefix=prefix,
712714
Delimiter='/'
713715
)
716+
714717
except (ClientError, HTTPClientError) as e:
715718
logger.error("ERROR: Can not get contents of %s from bucket"
716719
" %s due to error: %s ", folder,
717720
bucket_name, e)
718721
return []
719722

720723
contents = []
721-
folders = result.get("CommonPrefixes")
722-
if folders:
723-
contents.extend([f.get("Prefix") for f in folders])
724-
files = result.get("Contents")
725-
if files:
726-
contents.extend([f.get("Key") for f in files])
724+
for page in pages:
725+
folders = page.get("CommonPrefixes")
726+
if folders:
727+
contents.extend([f.get("Prefix") for f in folders])
728+
files = page.get("Contents")
729+
if files:
730+
contents.extend([f.get("Key") for f in files])
727731
return contents
728732

729733
def file_exists_in_bucket(

0 commit comments

Comments
 (0)