예제 #1
0
 def raise_on_second(*_, **__):
     nonlocal count
     count += 1
     if count > 1:
         raise SecondException()
     else:
         raise RateLimitReachedError()
예제 #2
0
 def create_node(self,
                 name=None,
                 size=None,
                 image=None,
                 auth=None,
                 ex_storage_account=None,
                 ex_customdata=None,
                 ex_resource_group=None,
                 ex_user_name=None,
                 ex_tags=None,
                 ex_network=None):
     global create_calls
     create_calls += 1
     if create_calls < 2:
         raise RateLimitReachedError(429,
                                     "Rate limit exceeded",
                                     headers={'retry-after': '2'})
     elif create_calls < 3:
         raise BaseHTTPError(429, "Rate limit exceeded",
                             {'retry-after': '1'})
     else:
         return super(RetryDriver, self).create_node(
             name=name,
             size=size,
             image=image,
             auth=auth,
             ex_storage_account=ex_storage_account,
             ex_customdata=ex_customdata,
             ex_resource_group=ex_resource_group,
             ex_user_name=ex_user_name,
             ex_tags=ex_tags,
             ex_network=ex_network)
예제 #3
0
        def mock_connect_side_effect(*args, **kwargs):
            self.retry_counter += 1

            if self.retry_counter < 4:
                headers = {"retry-after": 0.1}
                raise RateLimitReachedError(headers=headers)

            return "success"
예제 #4
0
        def mock_connect_side_effect(*args, **kwargs):
            self.retry_counter += 1

            if self.retry_counter < 2:
                headers = {'retry-after': 0.2}
                raise RateLimitReachedError(headers=headers)

            return 'success'
예제 #5
0
 def succeed_on_second(*_, **__) -> mock.MagicMock:
     nonlocal count
     count += 1
     if count > 1:
         successful_response = mock.MagicMock()
         successful_response.status_code = 200
         return successful_response
     else:
         raise RateLimitReachedError()
예제 #6
0
    def test_retry_rate_limit_error_timeout(self, mock_connect):
        con = Connection()
        con.connection = Mock()

        mock_connect.__name__ = "mock_connect"
        headers = {"retry-after": 0.2}
        mock_connect.side_effect = RateLimitReachedError(headers=headers)
        retry_request = Retry(timeout=1, retry_delay=0.1, backoff=1)
        self.assertRaises(RateLimitReachedError, retry_request(con.request), action="/")
        self.assertGreater(mock_connect.call_count, 1, "Retry logic failed")
예제 #7
0
    def test_retry_rate_limit_error_timeout(self, mock_connect):
        con = Connection()
        con.connection = Mock()

        mock_connect.__name__ = 'mock_connect'
        headers = {'retry-after': 0.2}
        mock_connect.side_effect = RateLimitReachedError(headers=headers)
        retry_request = Retry(timeout=0.4, retry_delay=0.1, backoff=1)
        self.assertRaises(RateLimitReachedError,
                          retry_request(con.request),
                          action='/')
        self.assertEqual(mock_connect.call_count, 2, 'Retry logic failed')
예제 #8
0
    def parse_error(self):
        body = super().parse_error()

        # error codes https://ruvds.com/en-usd/use_api # sign-insection
        reject_reason = body["rejectReason"]
        if reject_reason in (1, 2, 3, 6, 7):
            raise InvalidCredsError(value=body["errMessage"])
        elif reject_reason == 5:
            raise ServiceUnavailableError()
        elif reject_reason == 8:
            raise RateLimitReachedError()

        return body
예제 #9
0
 def parse_error(self):
     RetryableThrowingError.parse_error_counter += 1
     if RetryableThrowingError.parse_error_counter > 1:
         return "success"
     else:
         raise RateLimitReachedError()
예제 #10
0
 def parse_error(self):
     raise RateLimitReachedError()