-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate sendgrid to config-based #15257
Merged
Merged
Changes from 71 commits
Commits
Show all changes
73 commits
Select commit
Hold shift + click to select a range
897ecc5
fix spec
girarda 6099e22
read records from lists stream
girarda aa31326
campaigns
girarda a05e5b0
contacts
girarda b193739
stats_automations
girarda 0cb7db5
segments
girarda 778e3c3
single_sends
girarda 2675e7d
templates
girarda 1d23578
suppressions_global
girarda d9ec5b3
suppression groups
girarda a1b2e08
suppression group memebers
girarda 9c8d83f
blocks
girarda 018d165
bounces
girarda 6f1fbbd
invalid emails and spam reports
girarda 7342626
bump cdk version
girarda b5e5ba6
fix paths
girarda 842f515
bump cdk version
girarda c6adde7
Merge branch 'master' into alex/configbasedsendgrid
girarda 2885ab2
only define cursor field in one place
girarda 53ebb79
move to definitions
girarda 8e32764
move bounces inside the streams array
girarda 01a300e
move all streams within the streams array
girarda 5f0a51e
Merge branch 'master' into alex/configbasedsendgrid
girarda 992f3a8
Merge branch 'master' into alex/configbasedsendgrid
girarda 936ccc6
update sendgrid config
girarda 9ad8824
fix
girarda 4b73912
derp
girarda 028bdfb
rename field
girarda 3c76c5a
fix parse
girarda b9277d0
Revert "fix parse"
girarda a584b84
fix parse timestamp
girarda 9957303
extract datetime parser
girarda 5f8e7d5
remove print
girarda 72880ce
use parser
girarda 4cd75ea
top level docstring
girarda 28f0588
rename variable
girarda 99caa58
Merge branch 'alex/datetimeFormatTimestamp' into alex/configbasedsend…
girarda 8d55afa
Revert "Merge branch 'alex/datetimeFormatTimestamp' into alex/configb…
girarda 9b70a3b
Revert "Revert "Merge branch 'alex/datetimeFormatTimestamp' into alex…
girarda 4a9876d
Revert "Revert "Revert "Merge branch 'alex/datetimeFormatTimestamp' i…
girarda 016cb69
do not use timestamp()
girarda b984d20
Revert "do not use timestamp()"
girarda 42af817
Handle extracting no records from root
girarda 5f0bcf2
Merge branch 'alex/datetimeFormatTimestamp' into alex/configbasedsend…
girarda f9c12a0
Merge branch 'master' into alex/configbasedsendgrid
girarda b36596c
bump cdk version
girarda 03ed92e
handle empty record
girarda 1fcd68f
Merge branch 'master' into alex/configbasedsendgrid
girarda 965b2cb
Merge branch 'master' into alex/configbasedsendgrid
girarda 53f3e68
update unit test
girarda 30920d2
messages stream needs a different slicer
girarda 52d28fe
handle missing keys
girarda e10d6b9
Update unit test
girarda 7975a89
Merge branch 'master' into alex/selectNoRecords
girarda b582e87
record extractor interface
girarda 1b34c19
dpath extractor
girarda 3dadc32
docstring
girarda ac92374
Merge branch 'alex/selectNoRecords' into alex/configbasedsendgrid
girarda f94a4a4
use dpath
girarda 6708c46
Revert "Merge branch 'alex/selectNoRecords' into alex/configbasedsend…
girarda b0a2d2b
Merge branch 'master' into alex/configbasedsendgrid
girarda ec94936
bump cdk version
girarda ffefa97
use dpath
girarda 8d10fa9
missing cursor field
girarda 3256a2f
Merge branch 'master' into alex/configbasedsendgrid
girarda 421f72e
start DRYing the config
girarda b70e518
delete more cruff
girarda a5c2734
DRY
girarda 971ab82
get start time from config
girarda 28fec5e
delete custom streams
girarda 2e103f3
step=30days
girarda 5ef1817
bump version
girarda 04be9c4
auto-bump connector version [ci skip]
octavia-squidington-iii File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
256 changes: 256 additions & 0 deletions
256
airbyte-integrations/connectors/source-sendgrid/source_sendgrid/sendgrid.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
definitions: | ||
page_size: 50 | ||
step: "30d" | ||
|
||
schema_loader: | ||
type: JsonSchema | ||
file_path: "./source_sendgrid/schemas/{{ options.name }}.json" | ||
|
||
requester: | ||
type: HttpRequester | ||
name: "{{ options['name'] }}" | ||
url_base: "https://api.sendgrid.com" | ||
http_method: "GET" | ||
authenticator: | ||
type: "BearerAuthenticator" | ||
api_token: "{{ config.apikey }}" | ||
cursor_paginator: | ||
type: LimitPaginator | ||
url_base: "*ref(definitions.requester.url_base)" | ||
page_size: "*ref(definitions.page_size)" | ||
limit_option: | ||
inject_into: "request_parameter" | ||
field_name: "page_size" | ||
page_token_option: | ||
inject_into: "path" | ||
pagination_strategy: | ||
type: "CursorPagination" | ||
cursor_value: "{{ response._metadata.next }}" | ||
offset_paginator: | ||
type: LimitPaginator | ||
$options: | ||
url_base: "*ref(definitions.requester.url_base)" | ||
page_size: "*ref(definitions.page_size)" | ||
limit_option: | ||
inject_into: "request_parameter" | ||
field_name: "limit" | ||
page_token_option: | ||
inject_into: "request_parameter" | ||
field_name: "offset" | ||
pagination_strategy: | ||
type: "OffsetIncrement" | ||
retriever: | ||
type: SimpleRetriever | ||
name: "{{ options['name'] }}" | ||
primary_key: "{{ options['primary_key'] }}" | ||
stream_slicer: | ||
type: "DatetimeStreamSlicer" | ||
start_datetime: | ||
datetime: "{{ config['start_time'] }}" | ||
datetime_format: "%s" | ||
end_datetime: | ||
datetime: "{{ now_utc() }}" | ||
datetime_format: "%Y-%m-%d %H:%M:%S.%f%z" | ||
step: "*ref(definitions.step)" | ||
cursor_field: "{{ options.stream_cursor_field }}" | ||
start_time_option: | ||
field_name: "start_time" | ||
inject_into: "request_parameter" | ||
end_time_option: | ||
field_name: "end_time" | ||
inject_into: "request_parameter" | ||
datetime_format: "%s" | ||
messages_stream_slicer: | ||
type: "DatetimeStreamSlicer" | ||
start_datetime: | ||
datetime: "{{ config['start_time'] }}" | ||
datetime_format: "%s" | ||
end_datetime: | ||
datetime: "{{ now_utc() }}}" | ||
datetime_format: "%Y-%m-%d %H:%M:%S.%f%z" | ||
step: "*ref(definitions.step)" | ||
cursor_field: "{{ options.stream_cursor_field }}" | ||
datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" | ||
|
||
base_stream: | ||
type: DeclarativeStream | ||
schema_loader: | ||
$ref: "*ref(definitions.schema_loader)" | ||
retriever: | ||
$ref: "*ref(definitions.retriever)" | ||
record_selector: | ||
extractor: | ||
field_pointer: [] | ||
requester: | ||
$ref: "*ref(definitions.requester)" | ||
paginator: | ||
type: NoPagination | ||
streams: | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "lists" | ||
primary_key: "id" | ||
path: "/v3/marketing/lists" | ||
field_pointer: ["result"] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.cursor_paginator)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "campaigns" | ||
primary_key: "id" | ||
path: "/v3/marketing/campaigns" | ||
field_pointer: ["result"] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.cursor_paginator)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "contacts" | ||
primary_key: "id" | ||
path: "/v3/marketing/contacts" | ||
field_pointer: ["result"] | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "stats_automations" | ||
primary_key: "id" | ||
path: "/v3/marketing/stats/automations" | ||
field_pointer: ["results"] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.cursor_paginator)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "segments" | ||
primary_key: "id" | ||
path: "/v3/marketing/segments" | ||
field_pointer: ["results"] | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "single_sends" | ||
primary_key: "id" | ||
path: "/v3/marketing/stats/singlesends" | ||
field_pointer: ["results"] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.cursor_paginator)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "templates" | ||
primary_key: "id" | ||
path: "/v3/templates" | ||
field_pointer: ["result"] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
requester: | ||
$ref: "*ref(definitions.base_stream.retriever.requester)" | ||
request_options_provider: | ||
request_parameters: | ||
generations: "legacy,dynamic" | ||
paginator: | ||
$ref: "*ref(definitions.cursor_paginator)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "bounces" | ||
primary_key: "email" | ||
stream_cursor_field: "created" | ||
path: "/v3/suppression/bounces" | ||
field_pointer: [] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.offset_paginator)" | ||
stream_slicer: | ||
$ref: "*ref(definitions.stream_slicer)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "global_suppressions" | ||
primary_key: "email" | ||
stream_cursor_field: "created" | ||
path: "/v3/suppression/unsubscribes" | ||
field_pointer: [] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.offset_paginator)" | ||
stream_slicer: | ||
$ref: "*ref(definitions.stream_slicer)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "blocks" | ||
primary_key: "email" | ||
stream_cursor_field: "created" | ||
path: "/v3/suppression/blocks" | ||
field_pointer: [] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.offset_paginator)" | ||
stream_slicer: | ||
$ref: "*ref(definitions.stream_slicer)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "suppression_groups" | ||
primary_key: "id" | ||
path: "/v3/asm/groups" | ||
field_pointer: [] | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "suppression_group_members" | ||
primary_key: "group_id" | ||
path: "/v3/asm/suppressions" | ||
field_pointer: [] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.offset_paginator)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "invalid_emails" | ||
primary_key: "email" | ||
stream_cursor_field: "created" | ||
path: "/v3/suppression/invalid_emails" | ||
field_pointer: [] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.offset_paginator)" | ||
stream_slicer: | ||
$ref: "*ref(definitions.stream_slicer)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "spam_reports" | ||
primary_key: "email" | ||
stream_cursor_field: "created" | ||
path: "/v3/suppression/spam_reports" | ||
field_pointer: [] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
paginator: | ||
$ref: "*ref(definitions.offset_paginator)" | ||
stream_slicer: | ||
$ref: "*ref(definitions.stream_slicer)" | ||
- $ref: "*ref(definitions.base_stream)" | ||
$options: | ||
name: "messages" | ||
primary_key: "msg_id" | ||
stream_cursor_field: "last_event_time" | ||
path: "/v3/messages" | ||
field_pointer: [] | ||
retriever: | ||
$ref: "*ref(definitions.base_stream.retriever)" | ||
requester: | ||
$ref: "*ref(definitions.requester)" | ||
request_options_provider: | ||
request_parameters: | ||
limit: 1000 | ||
query: 'last_event_time BETWEEN TIMESTAMP "{{stream_slice.start_time}}" AND TIMESTAMP "{{stream_slice.end_time}}"' | ||
stream_slicer: | ||
$ref: "*ref(definitions.messages_stream_slicer)" | ||
check: | ||
type: CheckStream | ||
stream_names: ["lists"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no stop condition?