From ca3925abaa3358aea46392a063b335bde2e0085f Mon Sep 17 00:00:00 2001 From: jefferlu Date: Thu, 23 Jan 2025 20:55:27 +0800 Subject: [PATCH] feat: Add pagination support to get_objects method - Modified `get_objects` method to include pagination for fetching objects from Autodesk OSS API. - Added `limit` parameter to specify the maximum number of objects per page (Autodesk OSS API acceptable values = 1 - 100. Default = 10.). - Implemented a loop to fetch all pages of objects until no more pages are available. - Accumulated all fetched items into a single DataFrame before returning. --- APSToolkitPython/src/aps_toolkit/Bucket.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/APSToolkitPython/src/aps_toolkit/Bucket.py b/APSToolkitPython/src/aps_toolkit/Bucket.py index 120afa0..6c3453a 100644 --- a/APSToolkitPython/src/aps_toolkit/Bucket.py +++ b/APSToolkitPython/src/aps_toolkit/Bucket.py @@ -91,7 +91,7 @@ def delete_bucket(self, bucket_name: str): raise Exception(response.reason) return response.content - def get_objects(self, bucket_name: str) -> pd.DataFrame: + def get_objects(self, bucket_name: str, limit: int = 10) -> pd.DataFrame: """ Retrieves all the objects in a specified bucket from the Autodesk OSS API. @@ -106,12 +106,16 @@ def get_objects(self, bucket_name: str) -> pd.DataFrame: headers = { "Authorization": f"Bearer {self.token.access_token}" } - url = f"{self.host}/{bucket_name}/objects" - response = requests.get(url, headers=headers) - if response.status_code != 200: - raise Exception(response.reason) - data = response.json() - df = pd.DataFrame(data["items"]) + url = f"{self.host}/{bucket_name}/objects?limit={limit}" + fetched_objects = [] + while url: + response = requests.get(url, headers=headers) + if response.status_code != 200: + raise Exception(response.reason) + data = response.json() + fetched_objects.extend(data["items"]) + url = data.get("next") + df = pd.DataFrame(fetched_objects) return df def upload_object(self, bucket_name: str, file_path: str, object_name: str) -> dict: