From 1ea936cf389adee30551554d6b60374f3c97e121 Mon Sep 17 00:00:00 2001 From: Key Date: Mon, 17 Jun 2024 10:37:05 -0500 Subject: [PATCH] parse boolean fields to always be boolean --- tap_hubspot_beta/client_base.py | 12 ++++++++++++ tap_hubspot_beta/client_v1.py | 2 +- tap_hubspot_beta/client_v3.py | 15 +++------------ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/tap_hubspot_beta/client_base.py b/tap_hubspot_beta/client_base.py index 155f48b..41044f9 100644 --- a/tap_hubspot_beta/client_base.py +++ b/tap_hubspot_beta/client_base.py @@ -303,6 +303,18 @@ def stream_maps(self) -> List[StreamMap]: ] return self._stream_maps + def parse_value(self, field, value): + if "boolean" == self.schema["properties"].get(field, {}).get("type", [""])[0] and value in ["true", "false", "True", "False"]: + value = True if value.lower() == "true" else False if value.lower() == "false" else value + return value + + def parse_properties(self, row): + if self.properties_url: + for name, value in row["properties"].items(): + row[name] = self.parse_value(name, value) + del row["properties"] + return row + class hubspotStreamSchema(hubspotStream): diff --git a/tap_hubspot_beta/client_v1.py b/tap_hubspot_beta/client_v1.py index b579c46..9b4efdc 100644 --- a/tap_hubspot_beta/client_v1.py +++ b/tap_hubspot_beta/client_v1.py @@ -59,7 +59,7 @@ def post_process(self, row: dict, context: Optional[dict]) -> dict: if self.properties_url: if row.get("properties"): for name, value in row.get("properties", {}).items(): - row[name] = value.get("value") + row[name] = self.parse_value(name, value.get("value")) del row["properties"] for field in self.datetime_fields: if row.get(field) is not None: diff --git a/tap_hubspot_beta/client_v3.py b/tap_hubspot_beta/client_v3.py index 71bd9f1..4c5c96a 100644 --- a/tap_hubspot_beta/client_v3.py +++ b/tap_hubspot_beta/client_v3.py @@ -103,10 +103,7 @@ def prepare_request_payload( def post_process(self, row: dict, context: Optional[dict]) -> dict: """As needed, append or transform raw data to match expected structure.""" - if self.properties_url: - for name, value in row["properties"].items(): - row[name] = value - del row["properties"] + row = self.parse_properties(row) return row def _sync_records( # noqa C901 # too complex @@ -212,10 +209,7 @@ def get_url_params( def post_process(self, row: dict, context: Optional[dict]) -> dict: """As needed, append or transform raw data to match expected structure.""" - if self.properties_url: - for name, value in row["properties"].items(): - row[name] = value - del row["properties"] + row = self.parse_properties(row) return row @@ -267,8 +261,5 @@ def prepare_request_payload( def post_process(self, row: dict, context: Optional[dict]) -> dict: """As needed, append or transform raw data to match expected structure.""" - if self.properties_url: - for name, value in row["properties"].items(): - row[name] = value - del row["properties"] + row = self.parse_properties(row) return row \ No newline at end of file