Exemple #1
0
    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
Exemple #2
0
 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)
Exemple #3
0
 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)
Exemple #4
0
    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