Skip to content

Commit 1c421a9

Browse files
Source Hubspot: Fix getting submissions for all forms (#9555)
Co-authored-by: Marcos Marx <marcosmarxm@gmail.com>
1 parent e4661fb commit 1c421a9

File tree

5 files changed

+22
-10
lines changed

5 files changed

+22
-10
lines changed

airbyte-config/init/src/main/resources/config/STANDARD_SOURCE_DEFINITION/36c891d9-4bd9-43ac-bad2-10e12756272c.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"sourceDefinitionId": "36c891d9-4bd9-43ac-bad2-10e12756272c",
33
"name": "HubSpot",
44
"dockerRepository": "airbyte/source-hubspot",
5-
"dockerImageTag": "0.1.36",
5+
"dockerImageTag": "0.1.37",
66
"documentationUrl": "https://docs.airbyte.io/integrations/sources/hubspot",
77
"icon": "hubspot.svg"
88
}

airbyte-config/init/src/main/resources/seed/source_definitions.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@
307307
- name: HubSpot
308308
sourceDefinitionId: 36c891d9-4bd9-43ac-bad2-10e12756272c
309309
dockerRepository: airbyte/source-hubspot
310-
dockerImageTag: 0.1.36
310+
dockerImageTag: 0.1.37
311311
documentationUrl: https://docs.airbyte.io/integrations/sources/hubspot
312312
icon: hubspot.svg
313313
sourceType: api

airbyte-config/init/src/main/resources/seed/source_specs.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3082,7 +3082,7 @@
30823082
supportsNormalization: false
30833083
supportsDBT: false
30843084
supported_destination_sync_modes: []
3085-
- dockerImage: "airbyte/source-hubspot:0.1.36"
3085+
- dockerImage: "airbyte/source-hubspot:0.1.37"
30863086
spec:
30873087
documentationUrl: "https://docs.airbyte.io/integrations/sources/hubspot"
30883088
connectionSpecification:

airbyte-integrations/connectors/source-hubspot/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ COPY source_hubspot ./source_hubspot
3434
ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py"
3535
ENTRYPOINT ["python", "/airbyte/integration_code/main.py"]
3636

37-
LABEL io.airbyte.version=0.1.36
37+
LABEL io.airbyte.version=0.1.37
3838
LABEL io.airbyte.name=airbyte/source-hubspot

airbyte-integrations/connectors/source-hubspot/source_hubspot/api.py

+18-6
Original file line numberDiff line numberDiff line change
@@ -348,10 +348,14 @@ def _read(self, getter: Callable, params: MutableMapping[str, Any] = None) -> It
348348
if not next_page_token:
349349
break
350350

351-
def read(self, getter: Callable, params: Mapping[str, Any] = None) -> Iterator:
351+
def read(self, getter: Callable, params: Mapping[str, Any] = None, filter_old_records: bool = True) -> Iterator:
352352
default_params = {self.limit_field: self.limit}
353353
params = {**default_params, **params} if params else {**default_params}
354-
yield from self._filter_old_records(self._read(getter, params))
354+
generator = self._read(getter, params)
355+
if filter_old_records:
356+
generator = self._filter_old_records(generator)
357+
358+
yield from generator
355359

356360
def parse_response(self, response: Union[Mapping[str, Any], List[dict]]) -> Iterator:
357361
if isinstance(response, Mapping):
@@ -879,6 +883,10 @@ class FormSubmissionStream(Stream):
879883
limit = 50
880884
updated_at_field = "updatedAt"
881885

886+
def __init__(self, **kwargs):
887+
super().__init__(**kwargs)
888+
self.forms = FormStream(**kwargs)
889+
882890
def _transform(self, records: Iterable) -> Iterable:
883891
for record in super()._transform(records):
884892
keys = record.keys()
@@ -891,10 +899,14 @@ def _transform(self, records: Iterable) -> Iterable:
891899
yield record
892900

893901
def list_records(self, fields) -> Iterable:
894-
for form in self.read(getter=partial(self._api.get, url="/marketing/v3/forms")):
895-
for submission in self.read(getter=partial(self._api.get, url=f"{self.url}/{form['id']}")):
896-
submission["formId"] = form["id"]
897-
yield submission
902+
seen = set()
903+
# To get submissions for all forms date filtering has to be disabled
904+
for form in self.forms.read(getter=partial(self.forms._api.get, url=self.forms.url), filter_old_records=False):
905+
if form["id"] not in seen:
906+
seen.add(form["id"])
907+
for submission in self.read(getter=partial(self._api.get, url=f"{self.url}/{form['id']}")):
908+
submission["formId"] = form["id"]
909+
yield submission
898910

899911

900912
class MarketingEmailStream(Stream):

0 commit comments

Comments
 (0)