Skip to content

Commit cdaa562

Browse files
committed
skipping 503 errors
1 parent 448c0b4 commit cdaa562

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "tap-salesforce-connect"
3-
version = "0.1.4"
3+
version = "0.1.5"
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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
from __future__ import annotations
44

55
import json
6+
import logging
67
import sys
78
import typing as t
9+
from http import HTTPStatus
810
from pathlib import Path
911
from typing import Any, Callable, Generator, Iterable
1012

1113
import requests
1214
from singer_sdk import metrics
15+
from singer_sdk.exceptions import FatalAPIError, RetriableAPIError
1316
from singer_sdk.helpers.jsonpath import extract_jsonpath
1417
from singer_sdk.streams import RESTStream
1518

@@ -161,3 +164,36 @@ def request_records(self, context: dict | None) -> t.Iterable[dict]:
161164
else:
162165
yield from self.parse_response(resp)
163166
paginator.advance(resp)
167+
168+
def validate_response(self, response: requests.Response) -> None:
169+
"""Validate HTTP response.
170+
171+
Args:
172+
response: A `requests.Response`_ object.
173+
174+
Raises:
175+
FatalAPIError: If the request is not retriable.
176+
RetriableAPIError: If the request is retriable.
177+
"""
178+
if response.status_code in [503]:
179+
msg = self.response_error_message(response)
180+
logging.info(
181+
f"Skipping request due to {response.status_code} error: {msg} "
182+
f"| body: {response.text}"
183+
)
184+
return
185+
186+
if (
187+
response.status_code in self.extra_retry_statuses
188+
or response.status_code >= HTTPStatus.INTERNAL_SERVER_ERROR
189+
):
190+
msg = self.response_error_message(response)
191+
raise RetriableAPIError(msg, response)
192+
193+
if (
194+
HTTPStatus.BAD_REQUEST
195+
<= response.status_code
196+
< HTTPStatus.INTERNAL_SERVER_ERROR
197+
):
198+
msg = self.response_error_message(response)
199+
raise FatalAPIError(msg)

0 commit comments

Comments
 (0)