|
7 | 7 | from pathlib import Path
|
8 | 8 | from typing import Any, Callable, Generator, Iterable
|
9 | 9 |
|
10 |
| -import backoff |
11 | 10 | import requests
|
12 | 11 | from singer_sdk.helpers.jsonpath import extract_jsonpath
|
13 | 12 | from singer_sdk.streams import RESTStream
|
@@ -110,24 +109,15 @@ def post_process(self, row: dict, context: dict | None = None) -> dict | None:
|
110 | 109 | stringified_row[k] = v
|
111 | 110 | return stringified_row
|
112 | 111 |
|
113 |
| - # there is a one-hour rate limit on the SalesforceConnect API |
114 |
| - def backoff_wait_generator(self) -> Generator[float, None, None]: |
115 |
| - """Use wait generator for the backoff decorator on request failure. |
116 |
| -
|
117 |
| - See for options: |
118 |
| - https://github.com/litl/backoff/blob/master/backoff/_wait_gen.py |
| 112 | + def get_wait_time_based_on_response(self, exception): |
| 113 | + """Return the number of seconds to wait before retrying. |
119 | 114 |
|
120 |
| - And see for examples: `Code Samples <../code_samples.html#custom-backoff>`_ |
121 |
| -
|
122 |
| - Returns: |
123 |
| - The wait generator |
| 115 | + Salesforce Connect API has a rate limit scoped to an hour |
124 | 116 | """
|
125 |
| - return backoff.expo(factor=3) # type: ignore # ignore 'Returning Any' |
| 117 | + if exception.response.status_code == 503: |
| 118 | + return 60 * 60 |
| 119 | + return exception.response.headers.get("Retry-After", 0) |
126 | 120 |
|
127 |
| - def backoff_max_tries(self) -> int: |
128 |
| - """Provide the number of attempts before giving up when retrying requests. |
129 |
| -
|
130 |
| - Returns: |
131 |
| - Number of max retries. |
132 |
| - """ |
133 |
| - return 20 |
| 121 | + def backoff_wait_generator(self) -> Generator[float, None, None]: |
| 122 | + """Return a generator of wait times between retries.""" |
| 123 | + return self.backoff_runtime(value=self.get_wait_time_based_on_response) |
0 commit comments