From 19db08e417aab6b12b6207f672f4d5d3915a9e26 Mon Sep 17 00:00:00 2001 From: Per Olofsson Date: Thu, 24 Nov 2022 11:08:16 +0100 Subject: [PATCH 1/3] Fix handling of req_params for pagination --- SimpleMDMpy/SimpleMDM.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/SimpleMDMpy/SimpleMDM.py b/SimpleMDMpy/SimpleMDM.py index c859048..064d1d3 100644 --- a/SimpleMDMpy/SimpleMDM.py +++ b/SimpleMDMpy/SimpleMDM.py @@ -51,7 +51,7 @@ def _url(self, path): #pylint: disable=no-self-use def _is_devices_req(self, url): return url.startswith(self._url("/devices")) - def _get_data(self, url, params={}): + def _get_data(self, url, params=None): """GET call to SimpleMDM API""" has_more = True list_data = [] @@ -59,9 +59,11 @@ def _get_data(self, url, params={}): # the parameters aren't included with the input params. This is needed # so that certain other functions, like Logs.get_logs(), can send custom # starting_after and limit parameters. - req_params = {} - req_params['limit'] = params.get('limit', 100) - req_params['starting_after'] = params.get('starting_after', 0) + if params is None: + req_params = {} + else: + req_params = params.copy() + req_params['limit'] = req_params.get('limit', 100) while has_more: # Calls to /devices should be rate limited if self._is_devices_req(url): @@ -69,7 +71,7 @@ def _get_data(self, url, params={}): time.sleep(time.time() - self.last_device_req_timestamp) self.last_device_req_timestamp = time.time() while True: - resp = self.session.get(url, params=params, auth=(self.api_key, ""), proxies=self.proxyDict) + resp = self.session.get(url, params=req_params, auth=(self.api_key, ""), proxies=self.proxyDict) # A 429 means we've hit the rate limit, so back off and retry if resp.status_code == 429: time.sleep(1) @@ -86,7 +88,7 @@ def _get_data(self, url, params={}): list_data.extend(data) has_more = resp_json.get('has_more', False) if has_more: - params["starting_after"] = data[-1].get('id') + req_params["starting_after"] = data[-1].get('id') return list_data def _get_xml(self, url, params=None): From 8c7b1be1e995d1c2fc46caca28b8b970966e2d9c Mon Sep 17 00:00:00 2001 From: Per Olofsson Date: Thu, 24 Nov 2022 11:08:16 +0100 Subject: [PATCH 2/3] Fix handling of req_params for pagination --- SimpleMDMpy/SimpleMDM.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/SimpleMDMpy/SimpleMDM.py b/SimpleMDMpy/SimpleMDM.py index c859048..064d1d3 100644 --- a/SimpleMDMpy/SimpleMDM.py +++ b/SimpleMDMpy/SimpleMDM.py @@ -51,7 +51,7 @@ def _url(self, path): #pylint: disable=no-self-use def _is_devices_req(self, url): return url.startswith(self._url("/devices")) - def _get_data(self, url, params={}): + def _get_data(self, url, params=None): """GET call to SimpleMDM API""" has_more = True list_data = [] @@ -59,9 +59,11 @@ def _get_data(self, url, params={}): # the parameters aren't included with the input params. This is needed # so that certain other functions, like Logs.get_logs(), can send custom # starting_after and limit parameters. - req_params = {} - req_params['limit'] = params.get('limit', 100) - req_params['starting_after'] = params.get('starting_after', 0) + if params is None: + req_params = {} + else: + req_params = params.copy() + req_params['limit'] = req_params.get('limit', 100) while has_more: # Calls to /devices should be rate limited if self._is_devices_req(url): @@ -69,7 +71,7 @@ def _get_data(self, url, params={}): time.sleep(time.time() - self.last_device_req_timestamp) self.last_device_req_timestamp = time.time() while True: - resp = self.session.get(url, params=params, auth=(self.api_key, ""), proxies=self.proxyDict) + resp = self.session.get(url, params=req_params, auth=(self.api_key, ""), proxies=self.proxyDict) # A 429 means we've hit the rate limit, so back off and retry if resp.status_code == 429: time.sleep(1) @@ -86,7 +88,7 @@ def _get_data(self, url, params={}): list_data.extend(data) has_more = resp_json.get('has_more', False) if has_more: - params["starting_after"] = data[-1].get('id') + req_params["starting_after"] = data[-1].get('id') return list_data def _get_xml(self, url, params=None): From d822ce6abeea969774a3fbfcd85af3746aedcb63 Mon Sep 17 00:00:00 2001 From: Per Olofsson Date: Thu, 24 Nov 2022 11:19:02 +0100 Subject: [PATCH 3/3] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e43431e..59d71ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - Fixes `_get_data` so that it properly preserves all input parameters ([#45](https://github.com/macadmins/simpleMDMpy/issues/45)) - TY [@bryanheinz](https://github.com/bryanheinz) - Adds help docs to Devices.get_device() - TY [@bryanheinz](https://github.com/bryanheinz) - Add Scripts and ScriptJobs - TY [@MagerValp](https://github.com/MagerValp) +- Fix pagination - TY [@jcfrt](https://github.com/jcfrt) ### Issues @@ -32,6 +33,7 @@ - Closes issue #43 - Closes issue #29 - Closes issue #45 +- Closes issue #57 ## [v3.0.6]