diff --git a/.generator/src/generator/templates/api_client.j2 b/.generator/src/generator/templates/api_client.j2 index 4357a5c46e..c9e5170574 100644 --- a/.generator/src/generator/templates/api_client.j2 +++ b/.generator/src/generator/templates/api_client.j2 @@ -350,9 +350,13 @@ class ApiClient: host=host, collection_formats=params["collection_format"], ) - for item in get_attribute_from_path(response, pagination.get("results_path")): + results = get_attribute_from_path(response, pagination.get("results_path")) + for item in results: yield item - if len(get_attribute_from_path(response, pagination.get("results_path"))) < pagination["limit_value"]: + if "cursor_param" in pagination: + if len(results) == 0 or not get_attribute_from_path(response, pagination["cursor_path"], default=""): + break + elif len(results) < pagination["limit_value"]: break params = self._update_paginated_params(pagination, response) @@ -651,9 +655,13 @@ class AsyncApiClient(ApiClient): host=host, collection_formats=params["collection_format"], ) - for item in get_attribute_from_path(response, pagination.get("results_path")): + results = get_attribute_from_path(response, pagination.get("results_path")) + for item in results: yield item - if len(get_attribute_from_path(response, pagination.get("results_path"))) < pagination["limit_value"]: + if "cursor_param" in pagination: + if len(results) == 0 or not get_attribute_from_path(response, pagination["cursor_path"], default=""): + break + elif len(results) < pagination["limit_value"]: break params = self._update_paginated_params(pagination, response) diff --git a/src/datadog_api_client/api_client.py b/src/datadog_api_client/api_client.py index 5471b20b3f..3ada61834a 100644 --- a/src/datadog_api_client/api_client.py +++ b/src/datadog_api_client/api_client.py @@ -357,9 +357,13 @@ def call_api_paginated( host=host, collection_formats=params["collection_format"], ) - for item in get_attribute_from_path(response, pagination.get("results_path")): + results = get_attribute_from_path(response, pagination.get("results_path")) + for item in results: yield item - if len(get_attribute_from_path(response, pagination.get("results_path"))) < pagination["limit_value"]: + if "cursor_param" in pagination: + if len(results) == 0 or not get_attribute_from_path(response, pagination["cursor_path"], default=""): + break + elif len(results) < pagination["limit_value"]: break params = self._update_paginated_params(pagination, response) @@ -659,9 +663,13 @@ async def call_api_paginated( host=host, collection_formats=params["collection_format"], ) - for item in get_attribute_from_path(response, pagination.get("results_path")): + results = get_attribute_from_path(response, pagination.get("results_path")) + for item in results: yield item - if len(get_attribute_from_path(response, pagination.get("results_path"))) < pagination["limit_value"]: + if "cursor_param" in pagination: + if len(results) == 0 or not get_attribute_from_path(response, pagination["cursor_path"], default=""): + break + elif len(results) < pagination["limit_value"]: break params = self._update_paginated_params(pagination, response)