def _request(self, request_method, method, **kwargs): if self.token: kwargs.setdefault('params', {})['token'] = self.token url = get_api_url(method) # while we have rate limit retries left, fetch the resource and back # off as Slack's HTTP response suggests for retry_num in range(self.rate_limit_retries): response = request_method(url, timeout=self.timeout, proxies=self.proxies, **kwargs) if response.status_code == requests.codes.ok: break # handle HTTP 429 as documented at # https://api.slack.com/docs/rate-limits if response.status_code == requests.codes.too_many: time.sleep( int(response.headers.get('retry-after', DEFAULT_WAIT))) continue response.raise_for_status() else: # with no retries left, make one final attempt to fetch the # resource, but do not handle too_many status differently response = request_method(url, timeout=self.timeout, proxies=self.proxies, **kwargs) response.raise_for_status() response = Response(response.text) if not response.successful: # show the full error details, so the users knows all the reasons # behind the error, just like Slack's API "Tester" shows the detailed # results for errors, e.g. it will now show: # slacker.Error: { # "ok": false,"error": "missing_scope","needed": "users:read","provided": "admin,identify" # } # # instead of just showing "slacker.Error: missing_scope" # # raise Error(response.error) # commented out this line and added below line raise Error(response.raw) return response
def test_invalid_channel_ids_return_none(self): response = { 'ok': 'true', 'channels': [ {'name': 'general', 'id': 'C111'}, {'name': 'random', 'id': 'C222'} ] } responses.add( responses.GET, get_api_url('channels.list'), json=response, status=200 ) channels = Channels(token='aaa') self.assertEqual(channels.get_channel_id('fake_group'), None)
def test_invalid_channel_ids_return_none(self): response = { 'ok': 'true', 'channels': [{ 'name': 'general', 'id': 'C111' }, { 'name': 'random', 'id': 'C222' }] } responses.add(responses.GET, get_api_url('channels.list'), json=response, status=200) channels = Channels(token='aaa') self.assertEqual(channels.get_channel_id('fake_group'), None)
def _request(self, request_method, method, **kwargs): if self.token: kwargs.setdefault('params', {})['token'] = self.token url = get_api_url(method) # while we have rate limit retries left, fetch the resource and back # off as Slack's HTTP response suggests for retry_num in range(self.rate_limit_retries): response = request_method(url, timeout=self.timeout, proxies=self.proxies, **kwargs) if response.status_code == requests.codes.ok: break # handle HTTP 429 as documented at # https://api.slack.com/docs/rate-limits if response.status_code == requests.codes.too_many: time.sleep( int(response.headers.get('retry-after', DEFAULT_WAIT))) continue response.raise_for_status() else: # with no retries left, make one final attempt to fetch the # resource, but do not handle too_many status differently response = request_method(url, timeout=self.timeout, proxies=self.proxies, **kwargs) response.raise_for_status() response = Response(response.text) if not response.successful: raise Error(response.error) return response