From ae9c8d3d9f1ad6db05eb92268e6809b0a41da9f6 Mon Sep 17 00:00:00 2001 From: potapum Date: Tue, 28 Jan 2020 18:58:23 +0300 Subject: [PATCH 1/3] fixed No user found then Slack API paginates Added check and additional requests for paginated users.list Slack API call. --- response/slack/client.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/response/slack/client.py b/response/slack/client.py index ce78f7a8..478c0d3c 100644 --- a/response/slack/client.py +++ b/response/slack/client.py @@ -64,7 +64,13 @@ def api_call(self, api_endpoint, *args, **kwargs): def users_list(self): logger.info(f"Listing Slack users") - return self.api_call("users.list") + response = self.api_call("users.list") + result = response + while "response_metadata" in response: + next_cursor = response["response_metadata"]["next_cursor"] + response = self.get_paginated_users(limit=999, cursor=next_cursor) + result["members"].update(response["members"]) + return result def get_paginated_users(self, limit=0, cursor=None): response = self.api_call("users.list", limit=limit, cursor=cursor) From f96a826fe8d0f0b1f03489c6ee339daaaef4ee69 Mon Sep 17 00:00:00 2001 From: potapum Date: Tue, 28 Jan 2020 19:23:45 +0300 Subject: [PATCH 2/3] update slack/client.py fixed wrong combining of lists --- response/slack/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/response/slack/client.py b/response/slack/client.py index 478c0d3c..e057d06f 100644 --- a/response/slack/client.py +++ b/response/slack/client.py @@ -69,7 +69,7 @@ def users_list(self): while "response_metadata" in response: next_cursor = response["response_metadata"]["next_cursor"] response = self.get_paginated_users(limit=999, cursor=next_cursor) - result["members"].update(response["members"]) + result["members"].extend(response["members"]) return result def get_paginated_users(self, limit=0, cursor=None): From 411bd6aff454c4e4c8b6f33ac9ee6281f2b8f306 Mon Sep 17 00:00:00 2001 From: potapum Date: Wed, 29 Jan 2020 13:33:31 +0300 Subject: [PATCH 3/3] updated slack/client.py fixed infinite loop in pagination --- response/slack/client.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/response/slack/client.py b/response/slack/client.py index e057d06f..8362d4a6 100644 --- a/response/slack/client.py +++ b/response/slack/client.py @@ -67,7 +67,9 @@ def users_list(self): response = self.api_call("users.list") result = response while "response_metadata" in response: - next_cursor = response["response_metadata"]["next_cursor"] + next_cursor = response["response_metadata"].get("next_cursor") + if next_cursor is None or next_cursor == "": + break response = self.get_paginated_users(limit=999, cursor=next_cursor) result["members"].extend(response["members"]) return result