From 6040c637a029036f4ec794411827e55bab869bdf Mon Sep 17 00:00:00 2001 From: Biplab Bera <123734227+bishalbera@users.noreply.github.com> Date: Mon, 28 Oct 2024 06:39:39 +0530 Subject: [PATCH] Submission for source-zoho-analytics from Connector Builder --- .../source-zoho-analytics/README.md | 33 + .../acceptance-test-config.yml | 17 + .../connectors/source-zoho-analytics/icon.svg | 3 + .../source-zoho-analytics/manifest.yaml | 653 ++++++++++++++++++ .../source-zoho-analytics/metadata.yaml | 35 + docs/integrations/sources/zoho-analytics.md | 35 + 6 files changed, 776 insertions(+) create mode 100644 airbyte-integrations/connectors/source-zoho-analytics/README.md create mode 100644 airbyte-integrations/connectors/source-zoho-analytics/acceptance-test-config.yml create mode 100644 airbyte-integrations/connectors/source-zoho-analytics/icon.svg create mode 100644 airbyte-integrations/connectors/source-zoho-analytics/manifest.yaml create mode 100644 airbyte-integrations/connectors/source-zoho-analytics/metadata.yaml create mode 100644 docs/integrations/sources/zoho-analytics.md diff --git a/airbyte-integrations/connectors/source-zoho-analytics/README.md b/airbyte-integrations/connectors/source-zoho-analytics/README.md new file mode 100644 index 000000000000..9635fda8bc4d --- /dev/null +++ b/airbyte-integrations/connectors/source-zoho-analytics/README.md @@ -0,0 +1,33 @@ +# Zoho Analytics +This directory contains the manifest-only connector for `source-zoho-analytics`. + +Zoho Analytics connector enables seamless data syncing from Zoho Analytics into data warehouses or BI tools. This connector automates OAuth authentication and ensures reliable data transfer, empowering businesses to streamline analytics workflows and gain deeper insights efficiently. + +## 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-zoho-analytics:dev`) that you can use to test the connector locally. +```bash +airbyte-ci connectors --name=source-zoho-analytics build +``` + +### Test +This will run the acceptance tests for the connector. +```bash +airbyte-ci connectors --name=source-zoho-analytics test +``` + diff --git a/airbyte-integrations/connectors/source-zoho-analytics/acceptance-test-config.yml b/airbyte-integrations/connectors/source-zoho-analytics/acceptance-test-config.yml new file mode 100644 index 000000000000..e0f57111cadb --- /dev/null +++ b/airbyte-integrations/connectors/source-zoho-analytics/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-zoho-analytics: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-zoho-analytics/icon.svg b/airbyte-integrations/connectors/source-zoho-analytics/icon.svg new file mode 100644 index 000000000000..cf5618012c9a --- /dev/null +++ b/airbyte-integrations/connectors/source-zoho-analytics/icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoho-analytics/manifest.yaml b/airbyte-integrations/connectors/source-zoho-analytics/manifest.yaml new file mode 100644 index 000000000000..fb85d794346d --- /dev/null +++ b/airbyte-integrations/connectors/source-zoho-analytics/manifest.yaml @@ -0,0 +1,653 @@ +version: 5.15.0 + +type: DeclarativeSource + +description: >- + Zoho Analytics connector enables seamless data syncing from Zoho Analytics + into data warehouses or BI tools. This connector automates OAuth + authentication and ensures reliable data transfer, empowering businesses to + streamline analytics workflows and gain deeper insights efficiently. + +check: + type: CheckStream + stream_names: + - users + +definitions: + streams: + users: + type: DeclarativeStream + name: users + primary_key: + - emailId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/users + http_method: GET + request_headers: + ZANALYTICS-ORGID: "{{ config['org_id'] }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - users + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/users" + workspaces: + type: DeclarativeStream + name: workspaces + primary_key: + - workspaceId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/workspaces + http_method: GET + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - ownedWorkspaces + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/workspaces" + organizations: + type: DeclarativeStream + name: organizations + primary_key: + - orgId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/orgs + http_method: GET + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - orgs + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/organizations" + views: + type: DeclarativeStream + name: views + primary_key: + - viewId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/workspaces/{{ stream_partition.workspace }}/views + http_method: GET + request_headers: + ZANALYTICS-ORGID: "{{ config[\"org_id\"] }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - views + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - type: ParentStreamConfig + parent_key: workspaceId + partition_field: workspace + stream: + $ref: "#/definitions/streams/workspaces" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/views" + dashboards: + type: DeclarativeStream + name: dashboards + primary_key: + - viewId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/dashboards + http_method: GET + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - ownedViews + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/dashboards" + trash: + type: DeclarativeStream + name: trash + primary_key: + - viewId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/workspaces/{{ stream_partition.workspace }}/trash + http_method: GET + request_headers: + ZANALYTICS-ORGID: "{{ config[\"org_id\"] }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - views + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - type: ParentStreamConfig + parent_key: workspaceId + partition_field: workspace + stream: + $ref: "#/definitions/streams/workspaces" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/trash" + workspace_users: + type: DeclarativeStream + name: workspace_users + primary_key: + - emailId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/workspaces/{{ stream_partition.workspace }}/users + http_method: GET + request_headers: + ZANALYTICS-ORGID: "{{ config[\"org_id\"] }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - users + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - type: ParentStreamConfig + parent_key: workspaceId + partition_field: workspace + stream: + $ref: "#/definitions/streams/workspaces" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/workspace_users" + folders: + type: DeclarativeStream + name: folders + primary_key: + - folderId + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: /restapi/v2/workspaces/{{ stream_partition.workspace }}/folders + http_method: GET + request_headers: + ZANALYTICS-ORGID: "{{ config[\"org_id\"] }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - data + - folders + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - type: ParentStreamConfig + parent_key: workspaceId + partition_field: workspace + stream: + $ref: "#/definitions/streams/workspaces" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/folders" + base_requester: + type: HttpRequester + url_base: https://analyticsapi.zoho.{{ config["data_center"] }} + authenticator: + type: OAuthAuthenticator + client_id: "{{ config[\"client_id\"] }}" + grant_type: refresh_token + client_secret: "{{ config[\"client_secret\"] }}" + refresh_token: "{{ config[\"refresh_token\"] }}" + expires_in_name: expires_in + access_token_name: access_token + refresh_request_body: {} + token_refresh_endpoint: https://accounts.zoho.{{ config["data_center"] }}/oauth/v2/token + +streams: + - $ref: "#/definitions/streams/users" + - $ref: "#/definitions/streams/workspaces" + - $ref: "#/definitions/streams/organizations" + - $ref: "#/definitions/streams/views" + - $ref: "#/definitions/streams/dashboards" + - $ref: "#/definitions/streams/trash" + - $ref: "#/definitions/streams/workspace_users" + - $ref: "#/definitions/streams/folders" + +spec: + type: Spec + connection_specification: + type: object + $schema: http://json-schema.org/draft-07/schema# + required: + - client_id + - client_secret + - refresh_token + - data_center + - org_id + properties: + client_id: + type: string + name: client_id + order: 0 + title: OAuth Client ID + airbyte_secret: true + client_secret: + type: string + name: client_secret + order: 1 + title: OAuth Client Secret + airbyte_secret: true + refresh_token: + type: string + name: refresh_token + order: 2 + title: OAuth Refresh Token + airbyte_secret: true + data_center: + type: string + enum: + - com + - eu + - in + - com.au + - com.cn + - jp + order: 3 + title: Data Center + org_id: + type: number + order: 4 + title: Org Id + additionalProperties: true + +metadata: + autoImportSchema: + users: true + workspaces: true + organizations: true + views: true + dashboards: true + trash: true + workspace_users: true + folders: true + testedStreams: + users: + hasRecords: true + streamHash: 30b9674113495c708b88b03206126e121d54637b + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + workspaces: + hasRecords: true + streamHash: 412f2d3ff4d56ea7401a905def908c42a0ee450a + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + organizations: + hasRecords: true + streamHash: fe29c6780e8b266bbe44d9feb13a6f0d486b425c + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + views: + streamHash: 32af56a385b314e6e5c9238a605b9d0c2ad7f8b0 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + dashboards: + streamHash: e13cb711a5f8a91eb42ac3f163d5a9c39f164346 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + trash: + streamHash: 0d8d1ecf9c0edad58d67d0a255234ee38278eb6c + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + workspace_users: + streamHash: dc51d9f2fc5b699cf7dad3a46a5396d85cca9d5c + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + folders: + streamHash: 2c74239bed086e4cd23916c4f5f450df3215db18 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + assist: + docsUrl: https://www.zoho.com/analytics/api/v2/introduction.html + +schemas: + users: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + emailId: + type: string + role: + type: + - string + - "null" + status: + type: + - boolean + - "null" + required: + - emailId + workspaces: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + createdBy: + type: + - string + - "null" + createdTime: + type: + - string + - "null" + isDefault: + type: + - boolean + - "null" + orgId: + type: + - string + - "null" + workspaceDesc: + type: + - string + - "null" + workspaceId: + type: string + workspaceName: + type: + - string + - "null" + required: + - workspaceId + organizations: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + createdBy: + type: + - string + - "null" + createdByZuId: + type: + - string + - "null" + isDefault: + type: + - boolean + - "null" + numberOfWorkspaces: + type: + - number + - "null" + orgDesc: + type: + - string + - "null" + orgId: + type: string + orgName: + type: + - string + - "null" + planName: + type: + - string + - "null" + role: + type: + - string + - "null" + required: + - orgId + views: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + createdBy: + type: + - string + - "null" + createdTime: + type: + - string + - "null" + folderId: + type: + - string + - "null" + isFavorite: + type: + - boolean + - "null" + lastModifiedBy: + type: + - string + - "null" + lastModifiedTime: + type: + - string + - "null" + parentViewId: + type: + - string + - "null" + sharedBy: + type: + - string + - "null" + viewDesc: + type: + - string + - "null" + viewId: + type: string + viewName: + type: + - string + - "null" + viewType: + type: + - string + - "null" + required: + - viewId + dashboards: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + createdBy: + type: + - string + - "null" + createdTime: + type: + - string + - "null" + folderId: + type: + - string + - "null" + isFavorite: + type: + - boolean + - "null" + lastModifiedBy: + type: + - string + - "null" + lastModifiedTime: + type: + - string + - "null" + orgId: + type: + - string + - "null" + parentViewId: + type: + - string + - "null" + sharedBy: + type: + - string + - "null" + viewDesc: + type: + - string + - "null" + viewId: + type: string + viewName: + type: + - string + - "null" + viewType: + type: + - string + - "null" + workspaceId: + type: + - string + - "null" + required: + - viewId + trash: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + deletedBy: + type: + - string + - "null" + deletedTime: + type: + - string + - "null" + viewId: + type: string + viewName: + type: + - string + - "null" + viewType: + type: + - string + - "null" + required: + - viewId + workspace_users: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + emailId: + type: string + role: + type: + - string + - "null" + status: + type: + - boolean + - "null" + required: + - emailId + folders: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + folderDesc: + type: + - string + - "null" + folderId: + type: string + folderIndex: + type: + - number + - "null" + folderName: + type: + - string + - "null" + isDefault: + type: + - boolean + - "null" + parentFolderId: + type: + - string + - "null" + required: + - folderId diff --git a/airbyte-integrations/connectors/source-zoho-analytics/metadata.yaml b/airbyte-integrations/connectors/source-zoho-analytics/metadata.yaml new file mode 100644 index 000000000000..3e0562c1666c --- /dev/null +++ b/airbyte-integrations/connectors/source-zoho-analytics/metadata.yaml @@ -0,0 +1,35 @@ +metadataSpecVersion: "1.0" +data: + allowedHosts: + hosts: + - "analyticsapi.zoho." + registryOverrides: + oss: + enabled: true + cloud: + enabled: true + remoteRegistries: + pypi: + enabled: false + packageName: airbyte-source-zoho-analytics + connectorBuildOptions: + baseImage: docker.io/airbyte/source-declarative-manifest:5.16.0@sha256:6800f806944ee4fccf24ae01f6b8fbefb12d952c3b3da338f51f732b55de51f2 + connectorSubtype: api + connectorType: source + definitionId: 90427ec0-435c-4cce-8de0-81df3a7c2df3 + dockerImageTag: 0.0.1 + dockerRepository: airbyte/source-zoho-analytics + githubIssueLabel: source-zoho-analytics + icon: icon.svg + license: MIT + name: Zoho Analytics + releaseDate: 2024-10-28 + releaseStage: alpha + supportLevel: community + documentationUrl: https://docs.airbyte.com/integrations/sources/zoho-analytics + tags: + - language:manifest-only + - cdk:low-code + ab_internal: + ql: 100 + sl: 100 diff --git a/docs/integrations/sources/zoho-analytics.md b/docs/integrations/sources/zoho-analytics.md new file mode 100644 index 000000000000..afadb0776e19 --- /dev/null +++ b/docs/integrations/sources/zoho-analytics.md @@ -0,0 +1,35 @@ +# Zoho Analytics +Zoho Analytics connector enables seamless data syncing from Zoho Analytics into data warehouses or BI tools. This connector automates OAuth authentication and ensures reliable data transfer, empowering businesses to streamline analytics workflows and gain deeper insights efficiently. + +## Configuration + +| Input | Type | Description | Default Value | +|-------|------|-------------|---------------| +| `client_id` | `string` | OAuth Client ID. | | +| `client_secret` | `string` | OAuth Client Secret. | | +| `refresh_token` | `string` | OAuth Refresh Token. | | +| `data_center` | `string` | Data Center. | | +| `org_id` | `number` | Org Id. | | + +## Streams +| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental | +|-------------|-------------|------------|---------------------|----------------------| +| users | emailId | No pagination | ✅ | ❌ | +| workspaces | workspaceId | No pagination | ✅ | ❌ | +| organizations | orgId | No pagination | ✅ | ❌ | +| views | viewId | No pagination | ✅ | ❌ | +| dashboards | viewId | No pagination | ✅ | ❌ | +| trash | viewId | No pagination | ✅ | ❌ | +| workspace_users | emailId | No pagination | ✅ | ❌ | +| folders | folderId | No pagination | ✅ | ❌ | + +## Changelog + +
+ Expand to review + +| Version | Date | Pull Request | Subject | +|------------------|-------------------|--------------|----------------| +| 0.0.1 | 2024-10-28 | | Initial release by [@bishalbera](https://github.com/bishalbera) via Connector Builder | + +