diff --git a/airbyte-integrations/connectors/source-systeme/README.md b/airbyte-integrations/connectors/source-systeme/README.md new file mode 100644 index 000000000000..a571fe472b31 --- /dev/null +++ b/airbyte-integrations/connectors/source-systeme/README.md @@ -0,0 +1,35 @@ +# Systeme +This directory contains the manifest-only connector for `source-systeme`. + +Systeme is an all in one marketing platform. +Using this connector we can extarct records from communities , contacts , tags , contact fields and course resources streams. +Docs : https://developer.systeme.io/reference/api + +## Usage +There are multiple ways to use this connector: +- You can use this connector as any other connector in Airbyte Marketplace. +- You can load this connector in `pyairbyte` using `get_source`! +- You can open this connector in Connector Builder, edit it, and publish to your workspaces. + +Please refer to the manifest-only connector documentation for more details. + +## Local Development +We recommend you use the Connector Builder to edit this connector. + +But, if you want to develop this connector locally, you can use the following steps. + +### Environment Setup +You will need `airbyte-ci` installed. You can find the documentation [here](airbyte-ci). + +### Build +This will create a dev image (`source-systeme:dev`) that you can use to test the connector locally. +```bash +airbyte-ci connectors --name=source-systeme build +``` + +### Test +This will run the acceptance tests for the connector. +```bash +airbyte-ci connectors --name=source-systeme test +``` + diff --git a/airbyte-integrations/connectors/source-systeme/acceptance-test-config.yml b/airbyte-integrations/connectors/source-systeme/acceptance-test-config.yml new file mode 100644 index 000000000000..e61deab32ea6 --- /dev/null +++ b/airbyte-integrations/connectors/source-systeme/acceptance-test-config.yml @@ -0,0 +1,17 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-systeme:dev +acceptance_tests: + spec: + tests: + - spec_path: "manifest.yaml" + connection: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + discovery: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + basic_read: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + incremental: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + full_refresh: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" diff --git a/airbyte-integrations/connectors/source-systeme/icon.svg b/airbyte-integrations/connectors/source-systeme/icon.svg new file mode 100644 index 000000000000..f71de06c9006 --- /dev/null +++ b/airbyte-integrations/connectors/source-systeme/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/airbyte-integrations/connectors/source-systeme/manifest.yaml b/airbyte-integrations/connectors/source-systeme/manifest.yaml new file mode 100644 index 000000000000..ab4bbb3b999c --- /dev/null +++ b/airbyte-integrations/connectors/source-systeme/manifest.yaml @@ -0,0 +1,451 @@ +version: 5.15.0 + +type: DeclarativeSource + +description: >- + Systeme is an all in one marketing platform. + + Using this connector we can extarct records from communities, contacts, tags, contact fields and course resources streams. + + Docs : https://developer.systeme.io/reference/api + +check: + type: CheckStream + stream_names: + - communities + +definitions: + streams: + communities: + type: DeclarativeStream + name: communities + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: community/communities + http_method: GET + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - items + paginator: + type: DefaultPaginator + page_token_option: + type: RequestOption + inject_into: request_parameter + field_name: startingAfter + page_size_option: + type: RequestOption + field_name: limit + inject_into: request_parameter + pagination_strategy: + type: CursorPagination + page_size: 100 + cursor_value: "{{ last_record['id'] }}" + stop_condition: "{{ response.hasMore is false }}" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/communities" + contacts: + type: DeclarativeStream + name: contacts + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: contacts + http_method: GET + request_headers: + accept: application/json + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - items + paginator: + type: DefaultPaginator + page_token_option: + type: RequestOption + inject_into: request_parameter + field_name: startingAfter + page_size_option: + type: RequestOption + field_name: limit + inject_into: request_parameter + pagination_strategy: + type: CursorPagination + page_size: 100 + cursor_value: "{{ last_record['id'] }}" + stop_condition: "{{ response.hasMore is false }}" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/contacts" + tags: + type: DeclarativeStream + name: tags + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: tags + http_method: GET + request_headers: + accept: application/json + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - items + paginator: + type: DefaultPaginator + page_token_option: + type: RequestOption + inject_into: request_parameter + field_name: startingAfter + page_size_option: + type: RequestOption + field_name: limit + inject_into: request_parameter + pagination_strategy: + type: CursorPagination + page_size: 100 + cursor_value: "{{ last_record['id'] }}" + stop_condition: "{{ response.hasMore is false }}" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/tags" + contact_fields: + type: DeclarativeStream + name: contact_fields + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: contact_fields + http_method: GET + request_headers: + accept: application/json + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - items + paginator: + type: DefaultPaginator + page_token_option: + type: RequestOption + inject_into: request_parameter + field_name: startingAfter + page_size_option: + type: RequestOption + field_name: limit + inject_into: request_parameter + pagination_strategy: + type: CursorPagination + page_size: 100 + cursor_value: "{{ last_record['id'] }}" + stop_condition: "{{ response.hasMore is false }}" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/contact_fields" + course_resources: + type: DeclarativeStream + name: course_resources + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: school/courses + http_method: GET + request_headers: + accept: application/json + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - items + paginator: + type: DefaultPaginator + page_token_option: + type: RequestOption + inject_into: request_parameter + field_name: startingAfter + page_size_option: + type: RequestOption + field_name: limit + inject_into: request_parameter + pagination_strategy: + type: CursorPagination + page_size: 100 + cursor_value: "{{ last_record['id'] }}" + stop_condition: "{{ response.hasMore is false }}" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/course_resources" + base_requester: + type: HttpRequester + url_base: https://api.systeme.io/api/ + authenticator: + type: ApiKeyAuthenticator + api_token: "{{ config[\"api_key\"] }}" + inject_into: + type: RequestOption + field_name: X-API-Key + inject_into: header + +streams: + - $ref: "#/definitions/streams/communities" + - $ref: "#/definitions/streams/contacts" + - $ref: "#/definitions/streams/tags" + - $ref: "#/definitions/streams/contact_fields" + - $ref: "#/definitions/streams/course_resources" + +spec: + type: Spec + connection_specification: + type: object + $schema: http://json-schema.org/draft-07/schema# + required: + - api_key + properties: + api_key: + type: string + order: 0 + title: API Key + airbyte_secret: true + additionalProperties: true + +metadata: + autoImportSchema: + communities: true + contacts: true + tags: true + contact_fields: true + course_resources: true + testedStreams: + communities: + streamHash: c1225da50424eadc73af707657a9da51738a86b7 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + contacts: + streamHash: 5468020d1e37baf53374c70b0d21406bd71bc353 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + tags: + streamHash: 4e3483527bfbd9a63d8750528650257407a38b69 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + contact_fields: + streamHash: b5735729e7b2c7ddcc3f2b1f76f242dbbc73c742 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + course_resources: + hasRecords: true + streamHash: 9191f05b35d42891f54aa2d0963952240aac1053 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + assist: {} + +schemas: + communities: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + domainName: + type: + - string + - "null" + id: + type: number + name: + type: + - string + - "null" + path: + type: + - string + - "null" + required: + - id + contacts: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + bounced: + type: + - boolean + - "null" + email: + type: + - string + - "null" + fields: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + fieldName: + type: + - string + - "null" + slug: + type: + - string + - "null" + value: + type: + - string + - "null" + id: + type: number + locale: + type: + - string + - "null" + needsConfirmation: + type: + - boolean + - "null" + registeredAt: + type: + - string + - "null" + tags: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + unsubscribed: + type: + - boolean + - "null" + required: + - id + tags: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + createdAt: + type: + - string + - "null" + id: + type: number + name: + type: + - string + - "null" + required: + - id + contact_fields: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + fieldName: + type: + - string + - "null" + slug: + type: + - string + - "null" + course_resources: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + active: + type: + - boolean + - "null" + domainName: + type: + - string + - "null" + id: + type: number + locale: + type: + - string + - "null" + modules: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + name: + type: + - string + - "null" + path: + type: + - string + - "null" + required: + - id diff --git a/airbyte-integrations/connectors/source-systeme/metadata.yaml b/airbyte-integrations/connectors/source-systeme/metadata.yaml new file mode 100644 index 000000000000..9cdf42e28686 --- /dev/null +++ b/airbyte-integrations/connectors/source-systeme/metadata.yaml @@ -0,0 +1,35 @@ +metadataSpecVersion: "1.0" +data: + allowedHosts: + hosts: + - "api.systeme.io" + registryOverrides: + oss: + enabled: true + cloud: + enabled: true + remoteRegistries: + pypi: + enabled: false + packageName: airbyte-source-systeme + connectorBuildOptions: + baseImage: docker.io/airbyte/source-declarative-manifest:5.17.0@sha256:9c6bfd080a247b7781ce5b25687e7c44e29d31315d0bf656584b38810521bbaa + connectorSubtype: api + connectorType: source + definitionId: 2e731a08-e503-4caf-998a-92bd4afd80c1 + dockerImageTag: 0.0.1 + dockerRepository: airbyte/source-systeme + githubIssueLabel: source-systeme + icon: icon.svg + license: MIT + name: Systeme + releaseDate: 2024-10-30 + releaseStage: alpha + supportLevel: community + documentationUrl: https://docs.airbyte.com/integrations/sources/systeme + tags: + - language:manifest-only + - cdk:low-code + ab_internal: + ql: 100 + sl: 100 diff --git a/docs/integrations/sources/systeme.md b/docs/integrations/sources/systeme.md new file mode 100644 index 000000000000..b61fdef7df3a --- /dev/null +++ b/docs/integrations/sources/systeme.md @@ -0,0 +1,30 @@ +# Systeme +Systeme is an all in one marketing platform. +Using this connector we can extarct records from communities , contacts , tags , contact fields and course resources streams. +Docs : https://developer.systeme.io/reference/api + +## Configuration + +| Input | Type | Description | Default Value | +|-------|------|-------------|---------------| +| `api_key` | `string` | API Key. | | + +## Streams +| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental | +|-------------|-------------|------------|---------------------|----------------------| +| communities | id | DefaultPaginator | ✅ | ❌ | +| contacts | id | DefaultPaginator | ✅ | ❌ | +| tags | id | DefaultPaginator | ✅ | ❌ | +| contact_fields | | DefaultPaginator | ✅ | ❌ | +| course_resources | id | DefaultPaginator | ✅ | ❌ | + +## Changelog + +
+ Expand to review + +| Version | Date | Pull Request | Subject | +|------------------|-------------------|--------------|----------------| +| 0.0.1 | 2024-10-30 | | Initial release by [@ombhardwajj](https://github.com/ombhardwajj) via Connector Builder | + +