diff --git a/slacker.py b/slacker.py index 0056107..4752e6e 100755 --- a/slacker.py +++ b/slacker.py @@ -50,11 +50,18 @@ def add_channel_markup(self, channel_name, fail_silently=True): if fail_silently: return "#{}".format(channel_name) + def sleep_for_slack(self): + self.logger.debug('Slack requests can be at most once per second. Sleeping 1.') + time.sleep(1) + def get_with_retry_to_json(self, url): # TODO: extract class retry_attempts = 0 max_retry_attempts = 10 payload = None + + self.sleep_for_slack() + while not payload: response = self.session.get(url) @@ -221,11 +228,15 @@ def get_all_user_objects(self): url = self.url + "users.list?token=" + self.token return self.get_with_retry_to_json(url)['members'] + def post(self, *args, **kwargs): + self.sleep_for_slack() + return self.session.post(*args, **kwargs) + def archive(self, channel_name): url_template = self.url + "channels.archive?token={}&channel={}" cid = self.get_channelid(channel_name) url = url_template.format(self.token, cid) - request = self.session.post(url) + request = self.post(url) payload = request.json() return payload @@ -258,5 +269,5 @@ def post_message(self, channel, message, message_type=None): if message_type: post_data['attachments'] = json.dumps([{'fallback': message_type}], encoding='utf-8') - p = self.session.post(self.url + "chat.postMessage", data=post_data) + p = self.post(self.url + "chat.postMessage", data=post_data) return p.json()