Skip to content

Commit fc49438

Browse files
authored
Add retries for payroll 404s (#29)
1 parent c6749b7 commit fc49438

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

tap_adp/streams.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import requests
1212

1313
from singer_sdk import typing as th # JSON Schema typing helpers
14+
from singer_sdk.exceptions import RetriableAPIError
1415
from tap_adp.client import ADPStream, PaginatedADPStream
1516

1617
SCHEMAS_DIR = resources.files(__package__) / "schemas"
@@ -261,16 +262,27 @@ def get_url_params( # noqa: PLR6301
261262
}
262263

263264
def validate_response(self, response: requests.Response) -> None:
265+
# Handle 404 errors with specific message about data loading
266+
if response.status_code == 404:
267+
response_json = response.json()
268+
if response_json.get("confirmMessage", {}).get("processMessages"):
269+
process_messages = response_json.get("confirmMessage", {}).get("processMessages")
270+
for process_message in process_messages:
271+
dev_message= process_message.get("developerMessage", {}).get("messageTxt", "")
272+
code_value = process_message.get("developerMessage", {}).get("codeValue") # Could use TURBOGEN000010 but this is such a weird code, I'm going with the message in case there's others that are close to this
273+
if "still loading the acc-all payroll data" in dev_message:
274+
raise RetriableAPIError(f"ADP API is still loading payroll data, will retry: {dev_message=}, {code_value=}", response)
275+
264276
if response.status_code == 400 and response.json().get("confirmMessage", {}).get("processMessages"):
265277
process_messages = response.json().get("confirmMessage", {}).get("processMessages")
266278
for process_message in process_messages:
267279
dev_message = process_message["developerMessage"]["messageTxt"]
268-
codeValue = process_message["developerMessage"]["codeValue"]
280+
code_value = process_message["developerMessage"]["codeValue"]
269281
if dev_message == "Mass Processing is currently Disabled.":
270282
exception_message = "Mass Processing is currently Disabled."
271283
self.logger.warning(exception_message)
272284
raise SkippableAPIError(exception_message)
273-
if codeValue == "PAYGEN00030": #The payroll job id provided was in an invalid state (EDL, DAT, PVE, NER, EER, etc).
285+
if code_value == "PAYGEN00030": #The payroll job id provided was in an invalid state (EDL, DAT, PVE, NER, EER, etc).
274286
exception_message = f"The payroll job id provided was in an invalid state ({dev_message})."
275287
self.logger.warning(exception_message)
276288
raise SkippableAPIError(exception_message)

0 commit comments

Comments
 (0)