From 787daa9961b6b103e8d520c544277fc77c191dfb Mon Sep 17 00:00:00 2001 From: Luis Gomez <781929+lgomezm@users.noreply.github.com> Date: Fri, 25 Mar 2022 13:09:34 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Source=20Intercom:=20Added=20con?= =?UTF-8?q?versation=5Fid=20field=20to=20conversation=5Fpart=20records=20(?= =?UTF-8?q?#11206)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-intercom/Dockerfile | 2 +- .../source-intercom/source_intercom/source.py | 7 ++++ .../source-intercom/unit_tests/unit_test.py | 34 ++++++++++++++++++- docs/integrations/sources/intercom.md | 1 + 6 files changed, 44 insertions(+), 4 deletions(-) diff --git a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml index e50f5f1c44f5..a10ff405eb9c 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -356,7 +356,7 @@ - name: Intercom sourceDefinitionId: d8313939-3782-41b0-be29-b3ca20d8dd3a dockerRepository: airbyte/source-intercom - dockerImageTag: 0.1.15 + dockerImageTag: 0.1.16 documentationUrl: https://docs.airbyte.io/integrations/sources/intercom icon: intercom.svg sourceType: api diff --git a/airbyte-config/init/src/main/resources/seed/source_specs.yaml b/airbyte-config/init/src/main/resources/seed/source_specs.yaml index d11a0c91a416..f25a3e0c6b5a 100644 --- a/airbyte-config/init/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_specs.yaml @@ -3633,7 +3633,7 @@ oauthFlowInitParameters: [] oauthFlowOutputParameters: - - "access_token" -- dockerImage: "airbyte/source-intercom:0.1.15" +- dockerImage: "airbyte/source-intercom:0.1.16" spec: documentationUrl: "https://docs.airbyte.io/integrations/sources/intercom" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-intercom/Dockerfile b/airbyte-integrations/connectors/source-intercom/Dockerfile index 75a3c7dbbe98..9c21baded33a 100644 --- a/airbyte-integrations/connectors/source-intercom/Dockerfile +++ b/airbyte-integrations/connectors/source-intercom/Dockerfile @@ -35,5 +35,5 @@ COPY source_intercom ./source_intercom ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.15 +LABEL io.airbyte.version=0.1.16 LABEL io.airbyte.name=airbyte/source-intercom diff --git a/airbyte-integrations/connectors/source-intercom/source_intercom/source.py b/airbyte-integrations/connectors/source-intercom/source_intercom/source.py index 05700e4dc7bc..3b00101bc44f 100755 --- a/airbyte-integrations/connectors/source-intercom/source_intercom/source.py +++ b/airbyte-integrations/connectors/source-intercom/source_intercom/source.py @@ -314,6 +314,13 @@ class ConversationParts(ChildStreamMixin, IncrementalIntercomStream): def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: return f"/conversations/{stream_slice['id']}" + def parse_response(self, response: requests.Response, stream_state: Mapping[str, Any], **kwargs) -> Iterable[Mapping]: + records = super().parse_response(response, stream_state, **kwargs) + conversation_id = response.json().get("id") + for conversation_part in records: + conversation_part.setdefault("conversation_id", conversation_id) + yield conversation_part + class Segments(IncrementalIntercomStream): """Return list of all segments. diff --git a/airbyte-integrations/connectors/source-intercom/unit_tests/unit_test.py b/airbyte-integrations/connectors/source-intercom/unit_tests/unit_test.py index 40b0cfc2eb91..9f41d2461895 100644 --- a/airbyte-integrations/connectors/source-intercom/unit_tests/unit_test.py +++ b/airbyte-integrations/connectors/source-intercom/unit_tests/unit_test.py @@ -7,7 +7,7 @@ import requests from airbyte_cdk.models import SyncMode from airbyte_cdk.sources.streams.http.auth import NoAuth -from source_intercom.source import Companies, Contacts, IntercomStream +from source_intercom.source import Companies, Contacts, ConversationParts, IntercomStream test_data = [ ( @@ -76,3 +76,35 @@ def test_switch_to_standard_endpoint_if_scroll_expired(requests_mock): records += list(stream1.read_records(sync_mode=SyncMode, stream_slice=slice)) assert stream1._endpoint_type == Companies.EndpointType.standard + + +def test_conversation_part_has_conversation_id(requests_mock): + """ + Test shows that conversation_part records include the `conversation_id` field. + """ + + response_body = { + "type": "conversation", + "id": "151272900024304", + "created_at": 1647365706, + "updated_at": 1647366443, + "conversation_parts": { + "type": "conversation_part.list", + "conversation_parts": [ + {"type": "conversation_part", "id": "13740311965"}, + {"type": "conversation_part", "id": "13740312024"}, + ], + "total_count": 2, + }, + } + url = "https://api.intercom.io/conversations/151272900024304" + requests_mock.get(url, json=response_body) + + stream1 = ConversationParts(authenticator=NoAuth()) + + record_count = 0 + for record in stream1.read_records(sync_mode=SyncMode.incremental, stream_slice={"id": "151272900024304"}): + assert record["conversation_id"] == "151272900024304" + record_count += 1 + + assert record_count == 2 diff --git a/docs/integrations/sources/intercom.md b/docs/integrations/sources/intercom.md index 7f3232262ad8..90b329c55eb4 100644 --- a/docs/integrations/sources/intercom.md +++ b/docs/integrations/sources/intercom.md @@ -55,6 +55,7 @@ Please read [How to get your Access Token](https://developers.intercom.com/build | Version | Date | Pull Request | Subject | | :--- | :--- | :--- | :--- | +| 0.1.16 | 2022-03-23 | [11206](https://github.com/airbytehq/airbyte/pull/11206) | Added conversation_id field to conversation_part records | | 0.1.15 | 2022-03-22 | [11176](https://github.com/airbytehq/airbyte/pull/11176) | Correct `check_connection` URL | | 0.1.14 | 2022-03-16 | [11208](https://github.com/airbytehq/airbyte/pull/11208) | Improve 'conversations' incremental sync speed | | 0.1.13 | 2022-01-14 | [9513](https://github.com/airbytehq/airbyte/pull/9513) | Added handling of scroll param when it expired |