From 77aba17508ffb49221a8c5d18abedb5c03fd3c50 Mon Sep 17 00:00:00 2001 From: iancart Date: Mon, 7 Apr 2025 11:40:44 -0400 Subject: [PATCH] - Fixes a KeyError exception when paginating through the API endpoints whose response payloads are JSON objects. --- meraki/aio/rest_session.py | 7 +++++++ meraki/rest_session.py | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/meraki/aio/rest_session.py b/meraki/aio/rest_session.py index 25eb2bb3..1eae47b2 100644 --- a/meraki/aio/rest_session.py +++ b/meraki/aio/rest_session.py @@ -388,6 +388,8 @@ async def _get_pages_iterator( # just prepare the list if type(results) == list: return_items = results + elif type(results) == dict and "items" in results: + return_items = results["items"] # For event log endpoint elif type(results) == dict: if direction == "next": @@ -467,6 +469,11 @@ async def _get_pages_legacy( # Append that page's results, depending on the endpoint if type(results) == list: results.extend(await response.json(content_type = None)) + elif isinstance(results, dict) and "items" in results: + json_response = await response.json(content_type=None) + results.extend(json_response["items"]) + if "meta" in results: + results["meta"]["counts"]["items"]["remaining"] = json_response["meta"]["counts"]["items"]["remaining"] # For event log endpoint elif type(results) == dict: json_response = await response.json(content_type = None) diff --git a/meraki/rest_session.py b/meraki/rest_session.py index 7e9653f5..d7aa0e3e 100644 --- a/meraki/rest_session.py +++ b/meraki/rest_session.py @@ -377,6 +377,8 @@ def _get_pages_iterator( # just prepare the list if type(results) == list: return_items = results + elif type(results) == dict and "items" in results: + return_items = results["items"] # For event log endpoint elif type(results) == dict: if direction == "next": @@ -448,6 +450,10 @@ def _get_pages_legacy(self, metadata, url, params=None, total_pages=-1, directio # Append that page's results, depending on the endpoint if isinstance(results, list): results.extend(response.json()) + elif isinstance(results, dict) and "items" in results: + results["items"].extend(response.json()["items"]) + if "meta" in results: + results["meta"]["counts"]["items"]["remaining"] = response.json()["meta"]["counts"]["items"]["remaining"] # For event log endpoint elif isinstance(results, dict): try: