|
24 | 24 | import cirq_ionq
|
25 | 25 | from cirq_ionq import ionq_exceptions
|
26 | 26 |
|
| 27 | +RETRIABLE_STATUS_CODES = { |
| 28 | + requests.codes.internal_server_error, |
| 29 | + requests.codes.service_unavailable, |
| 30 | +} |
| 31 | + |
| 32 | + |
| 33 | +def _is_retriable(code): |
| 34 | + # Handle 52x responses from cloudflare. |
| 35 | + # See https://support.cloudflare.com/hc/en-us/articles/115003011431/ |
| 36 | + return code in RETRIABLE_STATUS_CODES or (code >= 520 and code <= 530) |
| 37 | + |
27 | 38 |
|
28 | 39 | class _IonQClient:
|
29 | 40 | """Handles calls to IonQ's API.
|
30 | 41 |
|
31 | 42 | Users should not instantiate this themselves, but instead should use `cirq_ionq.Service`.
|
32 | 43 | """
|
33 | 44 |
|
34 |
| - RETRIABLE_STATUS_CODES = { |
35 |
| - requests.codes.internal_server_error, |
36 |
| - requests.codes.service_unavailable, |
37 |
| - } |
38 | 45 | SUPPORTED_TARGETS = {'qpu', 'simulator'}
|
39 | 46 | SUPPORTED_VERSIONS = {
|
40 | 47 | 'v0.1',
|
@@ -294,7 +301,7 @@ def _make_request(self, request: Callable[[], requests.Response]) -> requests.Re
|
294 | 301 | raise ionq_exceptions.IonQNotFoundException(
|
295 | 302 | 'IonQ could not find requested resource.'
|
296 | 303 | )
|
297 |
| - if response.status_code not in self.RETRIABLE_STATUS_CODES: |
| 304 | + if not _is_retriable(response.status_code): |
298 | 305 | raise ionq_exceptions.IonQException(
|
299 | 306 | 'Non-retry-able error making request to IonQ API. '
|
300 | 307 | f'Status: {response.status_code} '
|
|
0 commit comments