def raise_on_second(*_, **__): nonlocal count count += 1 if count > 1: raise SecondException() else: raise RateLimitReachedError()
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)
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"
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'
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()
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")
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')
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
def parse_error(self): RetryableThrowingError.parse_error_counter += 1 if RetryableThrowingError.parse_error_counter > 1: return "success" else: raise RateLimitReachedError()
def parse_error(self): raise RateLimitReachedError()