✨source-outreach: add additional stream sequenceSteps (#26211)
* add sequenceSteps stream * update stream docstrings * updated tests and docker version * updated image version in docs * additional instructions for oauth in docs * added PR in docs * delete last file * fix formatting of json files --------- Co-authored-by: sajarin <sajarindider@gmail.com>
This commit is contained in:
@@ -34,5 +34,5 @@ COPY source_outreach ./source_outreach
|
||||
ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py"
|
||||
ENTRYPOINT ["python", "/airbyte/integration_code/main.py"]
|
||||
|
||||
LABEL io.airbyte.version=0.2.0
|
||||
LABEL io.airbyte.version=0.3.0
|
||||
LABEL io.airbyte.name=airbyte/source-outreach
|
||||
|
||||
@@ -1,12 +1,35 @@
|
||||
{
|
||||
"prospects": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"sequences": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"sequence_states": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"accounts": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"opportunities": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"personas": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"mailings": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"mailboxes": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"stages": { "updatedAt": "2040-11-16T00:00:00Z" },
|
||||
"calls": { "updatedAt": "2040-11-16T00:00:00Z" }
|
||||
"prospects": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"sequences": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"sequence_states": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"sequence_steps": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"accounts": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"opportunities": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"personas": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"mailings": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"mailboxes": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"stages": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
},
|
||||
"calls": {
|
||||
"updatedAt": "2040-11-16T00:00:00Z"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,19 @@
|
||||
"destination_sync_mode": "overwrite",
|
||||
"cursor_field": ["updatedAt"]
|
||||
},
|
||||
{
|
||||
"stream": {
|
||||
"name": "sequence_steps",
|
||||
"json_schema": {},
|
||||
"supported_sync_modes": ["full_refresh", "incremental"],
|
||||
"source_defined_cursor": true,
|
||||
"default_cursor_field": ["updatedAt"],
|
||||
"source_defined_primary_key": [["id"]]
|
||||
},
|
||||
"sync_mode": "incremental",
|
||||
"destination_sync_mode": "overwrite",
|
||||
"cursor_field": ["updatedAt"]
|
||||
},
|
||||
{
|
||||
"stream": {
|
||||
"name": "accounts",
|
||||
|
||||
@@ -1,12 +1,35 @@
|
||||
{
|
||||
"prospects": { "updatedAt": "2020-11-16T00:00:00Z" },
|
||||
"sequences": { "updatedAt": "2021-02-16T00:00:00Z" },
|
||||
"sequenceStates": { "updatedAt": "2021-04-16T00:00:00Z" },
|
||||
"accounts": { "updatedAt": "2021-11-16T00:00:00Z" },
|
||||
"opportunities": { "updatedAt": "2022-01-16T00:00:00Z" },
|
||||
"personas": { "updatedAt": "2022-01-03T10:00:00Z" },
|
||||
"mailings": { "updatedAt": "2021-11-01T11:22:00Z" },
|
||||
"mailboxes": { "updatedAt": "2019-01-01T00:00:30Z" },
|
||||
"stages": { "updatedAt": "2021-06-28T10:10:20Z" },
|
||||
"calls": { "updatedAt": "2021-06-28T10:10:20Z" }
|
||||
"prospects": {
|
||||
"updatedAt": "2020-11-16T00:00:00Z"
|
||||
},
|
||||
"sequences": {
|
||||
"updatedAt": "2021-02-16T00:00:00Z"
|
||||
},
|
||||
"sequenceStates": {
|
||||
"updatedAt": "2021-04-16T00:00:00Z"
|
||||
},
|
||||
"sequenceSteps": {
|
||||
"updatedAt": "2021-04-16T00:00:00Z"
|
||||
},
|
||||
"accounts": {
|
||||
"updatedAt": "2021-11-16T00:00:00Z"
|
||||
},
|
||||
"opportunities": {
|
||||
"updatedAt": "2022-01-16T00:00:00Z"
|
||||
},
|
||||
"personas": {
|
||||
"updatedAt": "2022-01-03T10:00:00Z"
|
||||
},
|
||||
"mailings": {
|
||||
"updatedAt": "2021-11-01T11:22:00Z"
|
||||
},
|
||||
"mailboxes": {
|
||||
"updatedAt": "2019-01-01T00:00:30Z"
|
||||
},
|
||||
"stages": {
|
||||
"updatedAt": "2021-06-28T10:10:20Z"
|
||||
},
|
||||
"calls": {
|
||||
"updatedAt": "2021-06-28T10:10:20Z"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ data:
|
||||
connectorSubtype: api
|
||||
connectorType: source
|
||||
definitionId: 3490c201-5d95-4783-b600-eaf07a4c7787
|
||||
dockerImageTag: 0.2.0
|
||||
dockerImageTag: 0.3.0
|
||||
dockerRepository: airbyte/source-outreach
|
||||
githubIssueLabel: source-outreach
|
||||
icon: outreach.svg
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"bounceCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"clickCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"createdAt": {
|
||||
"type": ["null", "string"],
|
||||
"format": "date-time"
|
||||
},
|
||||
"date": {
|
||||
"type": ["null", "string"],
|
||||
"format": "date"
|
||||
},
|
||||
"deliverCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"displayName": {
|
||||
"type": ["null", "string"]
|
||||
},
|
||||
"failureCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"interval": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"negativeReplyCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"neutralReplyCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"openCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"optOutCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"order": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"positiveReplyCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"replyCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"scheduleCount": {
|
||||
"type": ["null", "integer"]
|
||||
},
|
||||
"stepType": {
|
||||
"type": ["null", "string"]
|
||||
},
|
||||
"taskAutoDisplay": {
|
||||
"type": ["null", "string"]
|
||||
},
|
||||
"updatedAt": {
|
||||
"type": ["null", "string"],
|
||||
"format": "date-time"
|
||||
},
|
||||
"callPurpose": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"calls": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"creator": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"mailings": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"sequence": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"sequenceTemplates": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"taskPriority": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"tasks": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"updater": {
|
||||
"type": ["null", "array"],
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,6 @@ _URL_BASE = "https://api.outreach.io/api/v2/"
|
||||
|
||||
# Basic full refresh stream
|
||||
class OutreachStream(HttpStream, ABC):
|
||||
|
||||
url_base = _URL_BASE
|
||||
primary_key = "id"
|
||||
page_size = 1000
|
||||
@@ -121,7 +120,7 @@ class Sequences(IncrementalOutreachStream):
|
||||
|
||||
class SequenceStates(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /sequenceStates endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#sequenceState
|
||||
"""
|
||||
|
||||
@@ -129,9 +128,19 @@ class SequenceStates(IncrementalOutreachStream):
|
||||
return "sequenceStates"
|
||||
|
||||
|
||||
class SequenceSteps(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequenceSteps endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#sequenceStep
|
||||
"""
|
||||
|
||||
def path(self, **kwargs) -> str:
|
||||
return "sequenceStates"
|
||||
|
||||
|
||||
class Accounts(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /accounts endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#account
|
||||
"""
|
||||
|
||||
@@ -141,7 +150,7 @@ class Accounts(IncrementalOutreachStream):
|
||||
|
||||
class Opportunities(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /opportunities endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#opportunity
|
||||
"""
|
||||
|
||||
@@ -151,7 +160,7 @@ class Opportunities(IncrementalOutreachStream):
|
||||
|
||||
class Personas(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /personas endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#persona
|
||||
"""
|
||||
|
||||
@@ -161,7 +170,7 @@ class Personas(IncrementalOutreachStream):
|
||||
|
||||
class Mailings(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /mailings endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#mailing
|
||||
"""
|
||||
|
||||
@@ -171,7 +180,7 @@ class Mailings(IncrementalOutreachStream):
|
||||
|
||||
class Mailboxes(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /mailboxes endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#mailbox
|
||||
"""
|
||||
|
||||
@@ -181,7 +190,7 @@ class Mailboxes(IncrementalOutreachStream):
|
||||
|
||||
class Stages(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /stages endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#stage
|
||||
"""
|
||||
|
||||
@@ -191,7 +200,7 @@ class Stages(IncrementalOutreachStream):
|
||||
|
||||
class Calls(IncrementalOutreachStream):
|
||||
"""
|
||||
Sequence stream. Yields data from the GET /sequences endpoint.
|
||||
Sequence stream. Yields data from the GET /calls endpoint.
|
||||
See https://api.outreach.io/api/v2/docs#call
|
||||
"""
|
||||
|
||||
@@ -239,6 +248,7 @@ class SourceOutreach(AbstractSource):
|
||||
Prospects(authenticator=auth, **config),
|
||||
Sequences(authenticator=auth, **config),
|
||||
SequenceStates(authenticator=auth, **config),
|
||||
SequenceSteps(authenticator=auth, **config),
|
||||
Accounts(authenticator=auth, **config),
|
||||
Opportunities(authenticator=auth, **config),
|
||||
Personas(authenticator=auth, **config),
|
||||
|
||||
@@ -11,5 +11,5 @@ def test_streams(mocker):
|
||||
source = SourceOutreach()
|
||||
config_mock = MagicMock()
|
||||
streams = source.streams(config_mock)
|
||||
expected_streams_number = 10
|
||||
expected_streams_number = 11
|
||||
assert len(streams) == expected_streams_number
|
||||
|
||||
@@ -10,45 +10,48 @@ Some output streams are available from this source. A list of these streams can
|
||||
|
||||
### Features
|
||||
|
||||
| Feature | Supported? |
|
||||
| :--- | :--- |
|
||||
| Full Refresh Sync | Yes |
|
||||
| Incremental Sync | Yes |
|
||||
| SSL connection | Yes |
|
||||
| Namespaces | No |
|
||||
| Feature | Supported? |
|
||||
| :---------------- | :--------- |
|
||||
| Full Refresh Sync | Yes |
|
||||
| Incremental Sync | Yes |
|
||||
| SSL connection | Yes |
|
||||
| Namespaces | No |
|
||||
|
||||
## Getting started
|
||||
|
||||
### Requirements
|
||||
|
||||
* Outreach Account
|
||||
* Outreach OAuth credentials
|
||||
- Outreach Account
|
||||
- Outreach OAuth credentials
|
||||
|
||||
### Setup guide
|
||||
|
||||
Getting oauth credentials require contacting Outreach to request an account. Check out [here](https://www.outreach.io/lp/watch-demo#request-demo).
|
||||
Once you have an API application, you can follow the steps [here](https://api.outreach.io/api/v2/docs#authentication) to obtain a refresh token.
|
||||
|
||||
## Streams
|
||||
|
||||
List of available streams:
|
||||
|
||||
* Prospects
|
||||
* Sequences
|
||||
* SequenceStates
|
||||
* Calls
|
||||
* Mailings
|
||||
* Accounts
|
||||
* Opportunities
|
||||
* Personas
|
||||
* Mailboxes
|
||||
* Stages
|
||||
- Prospects
|
||||
- Sequences
|
||||
- SequenceStates
|
||||
- SequenceSteps
|
||||
- Calls
|
||||
- Mailings
|
||||
- Accounts
|
||||
- Opportunities
|
||||
- Personas
|
||||
- Mailboxes
|
||||
- Stages
|
||||
|
||||
## Changelog
|
||||
|
||||
| Version | Date | Pull Request | Subject |
|
||||
| Version | Date | Pull Request | Subject |
|
||||
|
||||
| :------ | :-------- | :----- | :------ |
|
||||
| 0.2.0 | 2022-10-27 | [17385](https://github.com/airbytehq/airbyte/pull/17385) | Add new streams + page size variable + relationship data |
|
||||
| 0.1.2 | 2022-07-04 | [14386](https://github.com/airbytehq/airbyte/pull/14386) | Fix stream schema and cursor field |
|
||||
| 0.1.1 | 2021-12-07 | [8582](https://github.com/airbytehq/airbyte/pull/8582) | Update connector fields title/description |
|
||||
| 0.1.0 | 2021-11-03 | [7507](https://github.com/airbytehq/airbyte/pull/7507) | Outreach Connector |
|
||||
| :------ | :-------- | :----- | :------ |
|
||||
| 0.3.0 | 2023-05-17 | [26211](https://github.com/airbytehq/airbyte/pull/26211) | Add SequenceStates Stream
|
||||
| 0.2.0 | 2022-10-27 | [17385](https://github.com/airbytehq/airbyte/pull/17385) | Add new streams + page size variable + relationship data |
|
||||
| 0.1.2 | 2022-07-04 | [14386](https://github.com/airbytehq/airbyte/pull/14386) | Fix stream schema and cursor field |
|
||||
| 0.1.1 | 2021-12-07 | [8582](https://github.com/airbytehq/airbyte/pull/8582) | Update connector fields title/description |
|
||||
| 0.1.0 | 2021-11-03 | [7507](https://github.com/airbytehq/airbyte/pull/7507) | Outreach Connector |
|
||||
|
||||
Reference in New Issue
Block a user