From 1b96ab8c1aaa5ea014268b11b7fe24cad14d0a36 Mon Sep 17 00:00:00 2001 From: Key Date: Thu, 12 Sep 2024 14:31:26 -0500 Subject: [PATCH] bump logic to extract read-only fields --- target_salesforce_v3/sinks.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/target_salesforce_v3/sinks.py b/target_salesforce_v3/sinks.py index 6e65b03..ffb948b 100644 --- a/target_salesforce_v3/sinks.py +++ b/target_salesforce_v3/sinks.py @@ -1012,13 +1012,16 @@ def upsert_record(self, record, context): return id, True, state_updates except Exception as e: if "INVALID_FIELD_FOR_INSERT_UPDATE" in str(e): - fields = json.loads(str(e))[0]['fields'] + try: + fields = json.loads(str(e))[0]['fields'] + except: + raise Exception(f"Attempted to write read-only fields. Unable to extract read-only fields to retry request: {str(e)}") + self.logger.warning(f"Attempted to write read-only fields: {fields}. Removing them and retrying.") # append read-only field to a list if not self._target.read_only_fields.get(self.stream_name): - self._target.read_only_fields[self.stream_name] = fields - else: - self._target.read_only_fields[self.stream_name].extend(fields) + self._target.read_only_fields[self.stream_name] = [] + self._target.read_only_fields[self.stream_name].extend(fields) # remove read-only fields from record for f in fields: record.pop(f, None)