Skip to content

Commit 62f24b3

Browse files
committed
better handling of 503 errors
1 parent 37d39d4 commit 62f24b3

File tree

2 files changed

+10
-20
lines changed

2 files changed

+10
-20
lines changed

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "tap-salesforce-connect"
3-
version = "0.1.1"
3+
version = "0.1.2"
44
description = "`tap-salesforce-connect` is a Singer tap for SalesforceConnect, built with the Meltano Singer SDK."
55
readme = "README.md"
66
authors = ["Josh Lloyd"]

tap_salesforce_connect/client.py

+9-19
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from pathlib import Path
88
from typing import Any, Callable, Generator, Iterable
99

10-
import backoff
1110
import requests
1211
from singer_sdk.helpers.jsonpath import extract_jsonpath
1312
from singer_sdk.streams import RESTStream
@@ -110,24 +109,15 @@ def post_process(self, row: dict, context: dict | None = None) -> dict | None:
110109
stringified_row[k] = v
111110
return stringified_row
112111

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.
119114
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
124116
"""
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)
126120

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

Comments
 (0)