From 6b8165e3109eb1aac73d460f755b0e6e8ae7fe0d Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Tue, 11 Oct 2022 13:56:19 +0530 Subject: [PATCH 01/15] feat: implement meetings & users API in zoom connector --- .../connectors/source-zoom/.dockerignore | 6 + .../connectors/source-zoom/Dockerfile | 43 +++ .../connectors/source-zoom/README.md | 79 ++++++ .../connectors/source-zoom/__init__.py | 3 + .../source-zoom/acceptance-test-config.yml | 30 +++ .../source-zoom/acceptance-test-docker.sh | 16 ++ .../connectors/source-zoom/build.gradle | 9 + .../source-zoom/integration_tests/__init__.py | 3 + .../integration_tests/abnormal_state.json | 5 + .../integration_tests/acceptance.py | 14 + .../integration_tests/catalog.json | 39 +++ .../integration_tests/configured_catalog.json | 58 +++++ .../integration_tests/invalid_config.json | 3 + .../integration_tests/sample_config.json | 3 + .../integration_tests/sample_state.json | 3 + .../connectors/source-zoom/main.py | 13 + .../connectors/source-zoom/requirements.txt | 2 + .../connectors/source-zoom/setup.py | 29 +++ .../source-zoom/source_zoom/__init__.py | 8 + .../source-zoom/source_zoom/schemas/TODO.md | 16 ++ .../schemas/meeting_poll_results.json | 30 +++ .../source_zoom/schemas/meeting_polls.json | 39 +++ .../schemas/meeting_registrants.json | 85 ++++++ .../meeting_registration_questions.json | 48 ++++ .../source_zoom/schemas/meetings.json | 242 +++++++++++++++++ .../source_zoom/schemas/users.json | 59 +++++ .../source-zoom/source_zoom/source.py | 18 ++ .../source-zoom/source_zoom/spec.yaml | 13 + .../source-zoom/source_zoom/zoom.yaml | 246 ++++++++++++++++++ 29 files changed, 1162 insertions(+) create mode 100644 airbyte-integrations/connectors/source-zoom/.dockerignore create mode 100644 airbyte-integrations/connectors/source-zoom/Dockerfile create mode 100644 airbyte-integrations/connectors/source-zoom/README.md create mode 100644 airbyte-integrations/connectors/source-zoom/__init__.py create mode 100644 airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml create mode 100644 airbyte-integrations/connectors/source-zoom/acceptance-test-docker.sh create mode 100644 airbyte-integrations/connectors/source-zoom/build.gradle create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/__init__.py create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/abnormal_state.json create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/acceptance.py create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/invalid_config.json create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/sample_config.json create mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/sample_state.json create mode 100644 airbyte-integrations/connectors/source-zoom/main.py create mode 100644 airbyte-integrations/connectors/source-zoom/requirements.txt create mode 100644 airbyte-integrations/connectors/source-zoom/setup.py create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/__init__.py create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/source.py create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml diff --git a/airbyte-integrations/connectors/source-zoom/.dockerignore b/airbyte-integrations/connectors/source-zoom/.dockerignore new file mode 100644 index 000000000000..5837f55a1c80 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/.dockerignore @@ -0,0 +1,6 @@ +* +!Dockerfile +!main.py +!source_zoom +!setup.py +!secrets \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/Dockerfile b/airbyte-integrations/connectors/source-zoom/Dockerfile new file mode 100644 index 000000000000..ad322088d161 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/Dockerfile @@ -0,0 +1,43 @@ +FROM python:3.9.11-alpine3.15 as base + +# build and load all requirements +FROM base as builder +WORKDIR /airbyte/integration_code + +# upgrade pip to the latest version +RUN apk --no-cache upgrade \ + && pip install --upgrade pip \ + && apk --no-cache add tzdata build-base + + +COPY setup.py ./ +# install necessary packages to a temporary folder +RUN pip install --prefix=/install . + +# build a clean environment +FROM base +WORKDIR /airbyte/integration_code + +# copy all loaded and built libraries to a pure basic image +COPY --from=builder /install /usr/local +# add default timezone settings +COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime +RUN echo "Etc/UTC" > /etc/timezone + +# bash is installed for more convenient debugging. +RUN apk --no-cache add bash + +# copy payload code only +COPY main.py ./ +COPY source_zoom ./source_zoom + + +ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" +RUN ls -al + +# ENTRYPOINT ["sleep", "infinity"] + +ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] + +LABEL io.airbyte.version=0.1.0 +LABEL io.airbyte.name=airbyte/source-zoom diff --git a/airbyte-integrations/connectors/source-zoom/README.md b/airbyte-integrations/connectors/source-zoom/README.md new file mode 100644 index 000000000000..d99d216cf198 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/README.md @@ -0,0 +1,79 @@ +# Zoom Source + +This is the repository for the Zoom configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.io/integrations/sources/zoom). + +## Local development + +#### Building via Gradle +You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. + +To build using Gradle, from the Airbyte repository root, run: +``` +./gradlew :airbyte-integrations:connectors:source-zoom:build +``` + +#### Create credentials +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/zoom) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_zoom/spec.yaml` file. +Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. +See `integration_tests/sample_config.json` for a sample config file. + +**If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source zoom test creds` +and place them into `secrets/config.json`. + +### Locally running the connector docker image + +#### Build +First, make sure you build the latest Docker image: +``` +docker build . -t airbyte/source-zoom:dev +``` + +You can also build the connector image via Gradle: +``` +./gradlew :airbyte-integrations:connectors:source-zoom:airbyteDocker +``` +When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in +the Dockerfile. + +#### Run +Then run any of the connector commands as follows: +``` +docker run --rm airbyte/source-zoom:dev spec +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-zoom:dev check --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-zoom:dev discover --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-zoom:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json +``` +## Testing + +#### Acceptance Tests +Customize `acceptance-test-config.yml` file to configure tests. See [Source Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/source-acceptance-tests-reference) for more information. +If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. + +To run your integration tests with docker + +### Using gradle to run tests +All commands should be run from airbyte project root. +To run unit tests: +``` +./gradlew :airbyte-integrations:connectors:source-zoom:unitTest +``` +To run acceptance and custom integration tests: +``` +./gradlew :airbyte-integrations:connectors:source-zoom:integrationTest +``` + +## Dependency Management +All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. +We split dependencies between two groups, dependencies that are: +* required for your connector to work need to go to `MAIN_REQUIREMENTS` list. +* required for the testing need to go to `TEST_REQUIREMENTS` list + +### Publishing a new version of the connector +You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? +1. Make sure your changes are passing unit and integration tests. +1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). +1. Create a Pull Request. +1. Pat yourself on the back for being an awesome contributor. +1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. diff --git a/airbyte-integrations/connectors/source-zoom/__init__.py b/airbyte-integrations/connectors/source-zoom/__init__.py new file mode 100644 index 000000000000..1100c1c58cf5 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml new file mode 100644 index 000000000000..fd211423cb68 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml @@ -0,0 +1,30 @@ +# See [Source Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/source-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-zoom:dev +tests: + spec: + - spec_path: "source_zoom/spec.yaml" + connection: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" + discovery: + - config_path: "secrets/config.json" + basic_read: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + empty_streams: [] + # TODO uncomment this block to specify that the tests should assert the connector outputs the records provided in the input file a file + # expect_records: + # path: "integration_tests/expected_records.txt" + # extra_fields: no + # exact_order: no + # extra_records: yes + # incremental: # TODO if your connector does not implement incremental sync, remove this block + # - config_path: "secrets/config.json" + # configured_catalog_path: "integration_tests/configured_catalog.json" + # future_state_path: "integration_tests/abnormal_state.json" + full_refresh: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-zoom/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-zoom/acceptance-test-docker.sh new file mode 100644 index 000000000000..c51577d10690 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/acceptance-test-docker.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env sh + +# Build latest connector image +docker build . -t $(cat acceptance-test-config.yml | grep "connector_image" | head -n 1 | cut -d: -f2-) + +# Pull latest acctest image +docker pull airbyte/source-acceptance-test:latest + +# Run +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /tmp:/tmp \ + -v $(pwd):/test_input \ + airbyte/source-acceptance-test \ + --acceptance-test-config /test_input + diff --git a/airbyte-integrations/connectors/source-zoom/build.gradle b/airbyte-integrations/connectors/source-zoom/build.gradle new file mode 100644 index 000000000000..fa9adb45e4e0 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'airbyte-python' + id 'airbyte-docker' + id 'airbyte-source-acceptance-test' +} + +airbytePython { + moduleDirectory 'source_zoom' +} diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/__init__.py b/airbyte-integrations/connectors/source-zoom/integration_tests/__init__.py new file mode 100644 index 000000000000..1100c1c58cf5 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-zoom/integration_tests/abnormal_state.json new file mode 100644 index 000000000000..848a6177c4b7 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/abnormal_state.json @@ -0,0 +1,5 @@ +{ + "users": { + "updated_at": "2222-01-21T00:00:00.000Z" + } +} diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-zoom/integration_tests/acceptance.py new file mode 100644 index 000000000000..950b53b59d41 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/acceptance.py @@ -0,0 +1,14 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +import pytest + +pytest_plugins = ("source_acceptance_test.plugin",) + + +@pytest.fixture(scope="session", autouse=True) +def connector_setup(): + """This fixture is a placeholder for external resources that acceptance test might require.""" + yield diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json b/airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json new file mode 100644 index 000000000000..6799946a6851 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json @@ -0,0 +1,39 @@ +{ + "streams": [ + { + "name": "TODO fix this file", + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": "column1", + "json_schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "column1": { + "type": "string" + }, + "column2": { + "type": "number" + } + } + } + }, + { + "name": "table1", + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": false, + "json_schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "column1": { + "type": "string" + }, + "column2": { + "type": "number" + } + } + } + } + ] +} diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json new file mode 100644 index 000000000000..3f5b16bf8b14 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json @@ -0,0 +1,58 @@ +{ + "streams": [ + { + "stream": { + "name": "users", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meetings", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meeting_registrants", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meeting_polls", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meeting_poll_results", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meeting_registration_questions", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + } + ] +} diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-zoom/integration_tests/invalid_config.json new file mode 100644 index 000000000000..6a603fda8000 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/invalid_config.json @@ -0,0 +1,3 @@ +{ + "jwt_token": "dummy" +} diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-zoom/integration_tests/sample_config.json new file mode 100644 index 000000000000..f875ad8416c6 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/sample_config.json @@ -0,0 +1,3 @@ +{ + "jwt_token": "abcd" +} diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-zoom/integration_tests/sample_state.json new file mode 100644 index 000000000000..0151c6fc660e --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/sample_state.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/airbyte-integrations/connectors/source-zoom/main.py b/airbyte-integrations/connectors/source-zoom/main.py new file mode 100644 index 000000000000..4b6bfd836670 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/main.py @@ -0,0 +1,13 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +import sys + +from airbyte_cdk.entrypoint import launch +from source_zoom import SourceZoom + +if __name__ == "__main__": + source = SourceZoom() + launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-zoom/requirements.txt b/airbyte-integrations/connectors/source-zoom/requirements.txt new file mode 100644 index 000000000000..0411042aa091 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/requirements.txt @@ -0,0 +1,2 @@ +-e ../../bases/source-acceptance-test +-e . diff --git a/airbyte-integrations/connectors/source-zoom/setup.py b/airbyte-integrations/connectors/source-zoom/setup.py new file mode 100644 index 000000000000..e646cdcd338b --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/setup.py @@ -0,0 +1,29 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +from setuptools import find_packages, setup + +MAIN_REQUIREMENTS = [ + "airbyte-cdk~=0.1", +] + +TEST_REQUIREMENTS = [ + "pytest~=6.1", + "pytest-mock~=3.6.1", + "source-acceptance-test", +] + +setup( + name="source_zoom", + description="Source implementation for Zoom.", + author="Airbyte", + author_email="contact@airbyte.io", + packages=find_packages(), + install_requires=MAIN_REQUIREMENTS, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, + extras_require={ + "tests": TEST_REQUIREMENTS, + }, +) diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/__init__.py b/airbyte-integrations/connectors/source-zoom/source_zoom/__init__.py new file mode 100644 index 000000000000..4fb74e1fc140 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/__init__.py @@ -0,0 +1,8 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +from .source import SourceZoom + +__all__ = ["SourceZoom"] diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md new file mode 100644 index 000000000000..b8e010c372e7 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md @@ -0,0 +1,16 @@ +# TODO: Define your stream schemas +Your connector must describe the schema of each stream it can output using [JSONSchema](https://json-schema.org). + +You can describe the schema of your streams using one `.json` file per stream. + +## Static schemas +From the `zoom.yaml` configuration file, you read the `.json` files in the `schemas/` directory. You can refer to a schema in your configuration file using the `schema_loader` component's `file_path` field. For example: +``` +schema_loader: + type: JsonSchema + file_path: "./source_zoom/schemas/customers.json" +``` +Every stream specified in the configuration file should have a corresponding `.json` schema file. + +Delete this file once you're done. Or don't. Up to you :) + diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json new file mode 100644 index 000000000000..91808fd367e1 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "meeting_id": { + "type": ["string"] + }, + "email": { + "type": ["string"] + }, + "name": { + "type": ["null", "string"] + }, + "question_details": { + "items": { + "properties": { + "question": { + "type": ["null", "string"] + }, + "answer": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + } + } + } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json new file mode 100644 index 000000000000..542c0b86dec8 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "meeting_id": { + "type": ["string"] + }, + "status": { + "type": ["null", "string"] + }, + "title": { + "type": ["null", "string"] + }, + "questions": { + "items": { + "properties": { + "name": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "string"] + }, + "answers": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + } + } + } \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json new file mode 100644 index 000000000000..f30a6e09fd3b --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json @@ -0,0 +1,85 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "meeting_id": { + "type": ["string"] + }, + "email": { + "type": ["null", "string"] + }, + "first_name": { + "type": ["null", "string"] + }, + "last_name": { + "type": ["null", "string"] + }, + "address": { + "type": ["null", "string"] + }, + "city": { + "type": ["null", "string"] + }, + "county": { + "type": ["null", "string"] + }, + "zip": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + }, + "phone": { + "type": ["null", "string"] + }, + "industry": { + "type": ["null", "string"] + }, + "org": { + "type": ["null", "string"] + }, + "job_title": { + "type": ["null", "string"] + }, + "purchasing_time_frame": { + "type": ["null", "string"] + }, + "role_in_purchase_process": { + "type": ["null", "string"] + }, + "no_of_employees": { + "type": ["null", "string"] + }, + "comments": { + "type": ["null", "string"] + }, + "custom_questions": { + "items": { + "properties": { + "title": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "status": { + "type": ["null", "string"] + }, + "create_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "join_url": { + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json new file mode 100644 index 000000000000..8c3fa0847e12 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json @@ -0,0 +1,48 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "meeting_id": { + "type": ["string"] + }, + "questions": { + "items": { + "properties": { + "field_name": { + "type": ["null", "string"] + }, + "required": { + "type": ["null", "boolean"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "custom_questions": { + "items": { + "properties": { + "title": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "string"] + }, + "required": { + "type": ["null", "boolean"] + }, + "answers": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + } + } + } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json new file mode 100644 index 000000000000..405d9b0a966e --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json @@ -0,0 +1,242 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["integer"] + }, + "meeting_id": { + "type": ["string"] + }, + "uuid12":{ + "type": ["string"] + }, + "uuid": { + "type": ["string"] + }, + "host_id": { + "type": ["null", "string"] + }, + "topic": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "integer"] + }, + "status": { + "type": ["null", "string"] + }, + "start_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "integer"] + }, + "timezone": { + "type": ["null", "string"] + }, + "created_at": { + "format": "date-time", + "type": ["null", "string"] + }, + "agenda": { + "type": ["null", "string"] + }, + "start_url": { + "type": ["null", "string"] + }, + "join_url": { + "type": ["null", "string"] + }, + "password": { + "type": ["null", "string"] + }, + "h323_password": { + "type": ["null", "string"] + }, + "encrypted_Password": { + "type": ["null", "string"] + }, + "pmi": { + "type": ["null", "integer"] + }, + "tracking_fields": { + "items": { + "properties": { + "field": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "occurences": { + "items": { + "properties": { + "occurence_id": { + "type": ["null", "string"] + }, + "start_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "integer"] + }, + "status": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "settings": { + "properties": { + "host_video": { + "type": ["null", "boolean"] + }, + "participant_video": { + "type": ["null", "boolean"] + }, + "cn_meeting": { + "type": ["null", "boolean"] + }, + "in_meeting": { + "type": ["null", "boolean"] + }, + "join_before_host": { + "type": ["null", "boolean"] + }, + "mute_upon_entry": { + "type": ["null", "boolean"] + }, + "watermark": { + "type": ["null", "boolean"] + }, + "use_pmi": { + "type": ["null", "boolean"] + }, + "approval_type": { + "type": ["null", "integer"] + }, + "registration_type": { + "type": ["null", "integer"] + }, + "audio": { + "type": ["null", "string"] + }, + "auto_recording": { + "type": ["null", "string"] + }, + "enforce_login": { + "type": ["null", "boolean"] + }, + "enforce_login_domains": { + "type": ["null", "string"] + }, + "alternative_hosts": { + "type": ["null", "string"] + }, + "close_registration": { + "type": ["null", "boolean"] + }, + "waiting_room": { + "type": ["null", "boolean"] + }, + "global_dial_in_countries": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + }, + "global_dial_in_numbers": { + "items": { + "properties": { + "country": { + "type": ["null", "string"] + }, + "country_name": { + "type": ["null", "string"] + }, + "city": { + "type": ["null", "string"] + }, + "number": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "contact_name": { + "type": ["null", "boolean"] + }, + "contact_email": { + "type": ["null", "boolean"] + }, + "registrants_confirmation_email": { + "type": ["null", "boolean"] + }, + "registrants_email_notification": { + "type": ["null", "boolean"] + }, + "meeting_authentication": { + "type": ["null", "boolean"] + }, + "authentication_option": { + "type": ["null", "string"] + }, + "authentication_domains": { + "type": ["null", "string"] + } + }, + "type": ["null", "object"], + "additionalProperties": false + }, + "recurrence": { + "properties": { + "type": { + "type": ["null", "integer"] + }, + "repeat_interval": { + "type": ["null", "integer"] + }, + "weekly_days": { + "type": ["null", "integer"] + }, + "monthly_day": { + "type": ["null", "integer"] + }, + "monthly_week": { + "type": ["null", "integer"] + }, + "monthly_week_day": { + "type": ["null", "integer"] + }, + "end_times": { + "type": ["null", "integer"] + }, + "end_date_time": { + "format": "date-time", + "type": ["null", "string"] + } + }, + "type": ["null", "object"], + "additionalProperties": false + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json new file mode 100644 index 000000000000..b558a457dcf1 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "first_name": { + "type": ["null", "string"] + }, + "last_name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "integer"] + }, + "status": { + "type": ["null", "string"] + }, + "pmi": { + "type": ["null", "integer"] + }, + "timezone": { + "type": ["null", "string"] + }, + "dept": { + "type": ["null", "string"] + }, + "created_at": { + "format": "date-time", + "type": ["null", "string"] + }, + "last_login_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "last_client_version": { + "type": ["null", "string"] + }, + "group_ids": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + }, + "im_group_ids": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + }, + "verified": { + "type": ["null", "integer"] + } + } +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/source.py b/airbyte-integrations/connectors/source-zoom/source_zoom/source.py new file mode 100644 index 000000000000..f7c16e43a355 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/source.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource + +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. + +WARNING: Do not modify this file. +""" + + +# Declarative Source +class SourceZoom(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "zoom.yaml"}) diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml b/airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml new file mode 100644 index 000000000000..a6919ababc94 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml @@ -0,0 +1,13 @@ +documentationUrl: https://docsurl.com +connectionSpecification: + $schema: http://json-schema.org/draft-07/schema# + title: Zoom Spec + type: object + required: + - jwt_token + additionalProperties: true + properties: + jwt_token: + type: string + description: JWT Token + airbyte_secret: true \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml new file mode 100644 index 000000000000..0b73074fa7ac --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml @@ -0,0 +1,246 @@ +version: "0.1.0" + +definitions: + requester: + url_base: "https://api.zoom.us/v2/" + http_method: "GET" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['jwt_token'] }}" + + zoom_paginator: + type: DefaultPaginator + pagination_strategy: + type: "CursorPagination" + cursor_value: "{{ response.next_page_token }}" + stop_condition: "{{ response.next_page_token == '' }}" + page_size: 10 # TODO: make it 30 + page_size_option: + field_name: "page_size" + inject_into: "request_parameter" + page_token_option: + field_name: "next_page_token" + inject_into: "request_parameter" + url_base: "*ref(definitions.requester.url_base)" + + + retriever: + requester: + $ref: "*ref(definitions.requester)" + + schema_loader: + type: JsonSchema + file_path: "./source_zoom/schemas/{{ options['name'] }}.json" + + + users_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["users"] + $ref: "*ref(definitions.retriever)" + $options: + name: "users" + primary_key: "id" + path: "/users" + + + meetings_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "meetings" + primary_key: "id" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["meetings"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/users/{{ stream_slice.parent_id }}/meetings" + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.users_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + + + meeting_registrants_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "meeting_registrants" + primary_key: "id" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["registrants"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/meetings/{{ stream_slice.parent_id }}/registrants" + error_handler: + type: CompositeErrorHandler + # ignore 400 error; We get this error if registration is not enabled for the meeting + error_handlers: + - type: DefaultErrorHandler + response_filters: + # - http_codes: [400] + - predicate: "{{ response.code == 300 }}" + action: IGNORE + - type: DefaultErrorHandler + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.meetings_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["meeting_id"] + value: "{{ stream_slice.parent_id }}" + + + meeting_polls_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "meeting_polls" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["polls"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/meetings/{{ stream_slice.parent_id }}/polls" + error_handler: + type: CompositeErrorHandler + # ignore 400 error; We get this error if Meeting poll is not enabled for the meeting + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] # TODO: fix this error + action: IGNORE + - type: DefaultErrorHandler + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.meetings_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["meeting_id"] + value: "{{ stream_slice.parent_id }}" + + + meeting_poll_results_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "meeting_poll_results" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["questions"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/past_meetings/{{ stream_slice.parent_id }}/polls" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400, 404] # code 3001 gives HTTP 404 + action: IGNORE + - type: DefaultErrorHandler + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.meetings_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["meeting_id"] + value: "{{ stream_slice.parent_id }}" + + + meeting_registration_questions_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "meeting_registration_questions" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: [] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/meetings/{{ stream_slice.parent_id }}/registrants/questions" + error_handler: + type: CompositeErrorHandler + # ignore 400 error; We get this error if Meeting is more than created an year ago + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + - type: DefaultErrorHandler + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.meetings_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["meeting_id"] + value: "{{ stream_slice.parent_id }}" + + + +streams: + - "*ref(definitions.users_stream)" + - "*ref(definitions.meetings_stream)" + - "*ref(definitions.meeting_registrants_stream)" + - "*ref(definitions.meeting_polls_stream)" + - "*ref(definitions.meeting_poll_results_stream)" + - "*ref(definitions.meeting_registration_questions_stream)" + + +check: + stream_names: + - "users" From 52379fb3ee9a9eb4928688410a1904cbf99703d2 Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Tue, 18 Oct 2022 13:49:41 +0530 Subject: [PATCH 02/15] feat: add support fot all zoom GET APIs --- .gitignore | 2 +- .../resources/seed/source_definitions.yaml | 7 + .../source-zoom/acceptance-test-config.yml | 14 +- .../integration_tests/configured_catalog.json | 117 ++++ ...[check]_if_required_webinars_list_tmp.json | 16 + .../source_zoom/schemas/meetings.json | 3 - .../schemas/report_meeting_participants.json | 33 ++ .../source_zoom/schemas/report_meetings.json | 63 ++ .../schemas/report_webinar_participants.json | 36 ++ .../source_zoom/schemas/report_webinars.json | 63 ++ .../schemas/webinar_absentees.json | 85 +++ .../schemas/webinar_panelists.json | 22 + .../schemas/webinar_poll_results.json | 31 + .../source_zoom/schemas/webinar_polls.json | 40 ++ .../schemas/webinar_qna_results.json | 31 + .../schemas/webinar_registrants.json | 85 +++ .../webinar_registration_questions.json | 49 ++ .../schemas/webinar_tracking_sources.json | 25 + .../source_zoom/schemas/webinars.json | 203 +++++++ .../source-zoom/source_zoom/zoom.yaml | 557 +++++++++++++++++- 20 files changed, 1463 insertions(+), 19 deletions(-) create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json create mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json diff --git a/.gitignore b/.gitignore index cef56133163d..f8e7ba1032cc 100644 --- a/.gitignore +++ b/.gitignore @@ -72,4 +72,4 @@ docs/SUMMARY.md **/specs_secrets_mask.yaml # Helm charts .tgz dependencies -charts/**/charts \ No newline at end of file +charts/**/charts 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 65f274bb60d4..a47b9abae4f7 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -1257,3 +1257,10 @@ documentationUrl: https://docs.airbyte.com/integrations/sources/yandex-metrica sourceType: api releaseStage: alpha +- name: ZoomHello + sourceDefinitionId: cbfd9856-1322-44fb-bcf1-0b39b7a8e92e + dockerRepository: airbyte/source-zoom + dockerImageTag: 0.1.0 + documentationUrl: https://docs.airbyte.io/integrations/sources/yandex-metrica + sourceType: api + releaseStage: alpha diff --git a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml index fd211423cb68..3ca76e442e13 100644 --- a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml @@ -16,15 +16,11 @@ tests: configured_catalog_path: "integration_tests/configured_catalog.json" empty_streams: [] # TODO uncomment this block to specify that the tests should assert the connector outputs the records provided in the input file a file - # expect_records: - # path: "integration_tests/expected_records.txt" - # extra_fields: no - # exact_order: no - # extra_records: yes - # incremental: # TODO if your connector does not implement incremental sync, remove this block - # - config_path: "secrets/config.json" - # configured_catalog_path: "integration_tests/configured_catalog.json" - # future_state_path: "integration_tests/abnormal_state.json" + expect_records: + path: "integration_tests/expected_records.txt" + extra_fields: no + exact_order: no + extra_records: yes full_refresh: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json index 3f5b16bf8b14..8711b9a459fa 100644 --- a/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json @@ -53,6 +53,123 @@ }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_panelists", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_registrants", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinars", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_absentees", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_polls", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_poll_results", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_registration_questions", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_tracking_sources", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_qna_results", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_meetings", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_meeting_participants", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_webinars", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_webinar_participants", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" } ] } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json new file mode 100644 index 000000000000..5335d74e789f --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "uuid": { + "type": ["string"] + }, + "id": { + "type": ["string"] + }, + "host_id": { + "type": ["null", "string"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json index 405d9b0a966e..2ca050ef970b 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json @@ -8,9 +8,6 @@ "meeting_id": { "type": ["string"] }, - "uuid12":{ - "type": ["string"] - }, "uuid": { "type": ["string"] }, diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json new file mode 100644 index 000000000000..31f46691b77f --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "user_id": { + "type": ["string"] + }, + "meeting_id": { + "type": ["string"] + }, + "name": { + "type": ["null", "string"] + }, + "user_email": { + "type": ["null", "string"] + }, + "join_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "leave_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "string"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json new file mode 100644 index 000000000000..7a45f288ecb3 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json @@ -0,0 +1,63 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "meeting_id": { + "type": ["string"] + }, + "uuid": { + "type": ["string"] + }, + "id": { + "type": ["integer"] + }, + "type": { + "type": ["null", "integer"] + }, + "topic": { + "type": ["null", "string"] + }, + "user_name": { + "type": ["null", "string"] + }, + "user_email": { + "type": ["null", "string"] + }, + "start_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "end_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "integer"] + }, + "total_minutes": { + "type": ["null", "integer"] + }, + "participants_count": { + "type": ["null", "integer"] + }, + "tracking_fields": { + "items": { + "properties": { + "field": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "dept": { + "type": ["null", "integer"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json new file mode 100644 index 000000000000..0095fa5dfdef --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json @@ -0,0 +1,36 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "user_id": { + "type": ["string"] + }, + "webinar_id": { + "type": ["string"] + }, + "name": { + "type": ["null", "string"] + }, + "user_email": { + "type": ["null", "string"] + }, + "join_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "leave_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "string"] + }, + "attentiveness_score": { + "type": ["null", "string"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json new file mode 100644 index 000000000000..7ce718513ec0 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json @@ -0,0 +1,63 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": ["string"] + }, + "uuid": { + "type": ["string"] + }, + "id": { + "type": ["integer"] + }, + "type": { + "type": ["null", "integer"] + }, + "topic": { + "type": ["null", "string"] + }, + "user_name": { + "type": ["null", "string"] + }, + "user_email": { + "type": ["null", "string"] + }, + "start_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "end_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "integer"] + }, + "total_minutes": { + "type": ["null", "integer"] + }, + "participants_count": { + "type": ["null", "integer"] + }, + "tracking_fields": { + "items": { + "properties": { + "field": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "dept": { + "type": ["null", "integer"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json new file mode 100644 index 000000000000..52a013787def --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json @@ -0,0 +1,85 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "webinar_uuid": { + "type": ["string"] + }, + "email": { + "type": ["null", "string"] + }, + "first_name": { + "type": ["null", "string"] + }, + "last_name": { + "type": ["null", "string"] + }, + "address": { + "type": ["null", "string"] + }, + "city": { + "type": ["null", "string"] + }, + "county": { + "type": ["null", "string"] + }, + "zip": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + }, + "phone": { + "type": ["null", "string"] + }, + "industry": { + "type": ["null", "string"] + }, + "org": { + "type": ["null", "string"] + }, + "job_title": { + "type": ["null", "string"] + }, + "purchasing_time_frame": { + "type": ["null", "string"] + }, + "role_in_purchase_process": { + "type": ["null", "string"] + }, + "no_of_employees": { + "type": ["null", "string"] + }, + "comments": { + "type": ["null", "string"] + }, + "custom_questions": { + "items": { + "properties": { + "title": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "status": { + "type": ["null", "string"] + }, + "create_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "join_url": { + "type": ["null", "string"] + } + } + } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json new file mode 100644 index 000000000000..95f5e4999465 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "webinar_id": { + "type": ["string"] + }, + "name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "join_url": { + "type": ["null", "string"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json new file mode 100644 index 000000000000..86efbfaa31aa --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": ["string"] + }, + "email": { + "type": ["string"] + }, + "name": { + "type": ["null", "string"] + }, + "question_details": { + "items": { + "properties": { + "question": { + "type": ["null", "string"] + }, + "answer": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json new file mode 100644 index 000000000000..840773a4464f --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "webinar_id": { + "type": ["string"] + }, + "status": { + "type": ["null", "string"] + }, + "title": { + "type": ["null", "string"] + }, + "questions": { + "items": { + "properties": { + "name": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "string"] + }, + "answers": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json new file mode 100644 index 000000000000..86efbfaa31aa --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": ["string"] + }, + "email": { + "type": ["string"] + }, + "name": { + "type": ["null", "string"] + }, + "question_details": { + "items": { + "properties": { + "question": { + "type": ["null", "string"] + }, + "answer": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json new file mode 100644 index 000000000000..e452b9fa86fa --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json @@ -0,0 +1,85 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "webinar_id": { + "type": ["string"] + }, + "email": { + "type": ["null", "string"] + }, + "first_name": { + "type": ["null", "string"] + }, + "last_name": { + "type": ["null", "string"] + }, + "address": { + "type": ["null", "string"] + }, + "city": { + "type": ["null", "string"] + }, + "county": { + "type": ["null", "string"] + }, + "zip": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + }, + "phone": { + "type": ["null", "string"] + }, + "industry": { + "type": ["null", "string"] + }, + "org": { + "type": ["null", "string"] + }, + "job_title": { + "type": ["null", "string"] + }, + "purchasing_time_frame": { + "type": ["null", "string"] + }, + "role_in_purchase_process": { + "type": ["null", "string"] + }, + "no_of_employees": { + "type": ["null", "string"] + }, + "comments": { + "type": ["null", "string"] + }, + "custom_questions": { + "items": { + "properties": { + "title": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "status": { + "type": ["null", "string"] + }, + "create_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "join_url": { + "type": ["null", "string"] + } + } + } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json new file mode 100644 index 000000000000..0e1a41c9d178 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": ["string"] + }, + "questions": { + "items": { + "properties": { + "field_name": { + "type": ["null", "string"] + }, + "required": { + "type": ["null", "boolean"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "custom_questions": { + "items": { + "properties": { + "title": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "string"] + }, + "required": { + "type": ["null", "boolean"] + }, + "answers": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json new file mode 100644 index 000000000000..69cbfab0cca5 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["string"] + }, + "webinar_id": { + "type": ["string"] + }, + "source_name": { + "type": ["null", "string"] + }, + "tracking_url": { + "type": ["null", "string"] + }, + "registration_count": { + "type": ["null", "integer"] + }, + "visitor_count": { + "type": ["null", "integer"] + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json new file mode 100644 index 000000000000..e7da2e3af730 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json @@ -0,0 +1,203 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "uuid": { + "type": ["string"] + }, + "id": { + "type": ["string"] + }, + "host_id": { + "type": ["null", "string"] + }, + "topic": { + "type": ["null", "string"] + }, + "type": { + "type": ["null", "integer"] + }, + "start_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "integer"] + }, + "timezone": { + "type": ["null", "string"] + }, + "agenda": { + "type": ["null", "string"] + }, + "created_at": { + "format": "date-time", + "type": ["null", "string"] + }, + "start_url": { + "type": ["null", "string"] + }, + "join_url": { + "type": ["null", "string"] + }, + "tracking_fields": { + "items": { + "properties": { + "field": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "occurences": { + "items": { + "properties": { + "occurence_id": { + "type": ["null", "string"] + }, + "start_time": { + "format": "date-time", + "type": ["null", "string"] + }, + "duration": { + "type": ["null", "integer"] + }, + "status": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] + }, + "settings": { + "properties": { + "host_video": { + "type": ["null", "boolean"] + }, + "panelists_video": { + "type": ["null", "boolean"] + }, + "practice_session": { + "type": ["null", "boolean"] + }, + "hd_video": { + "type": ["null", "boolean"] + }, + "approval_type": { + "type": ["null", "integer"] + }, + "registration_type": { + "type": ["null", "integer"] + }, + "audio": { + "type": ["null", "string"] + }, + "auto_recording": { + "type": ["null", "string"] + }, + "enforce_login": { + "type": ["null", "boolean"] + }, + "enforce_login_domains": { + "type": ["null", "string"] + }, + "alternative_hosts": { + "type": ["null", "string"] + }, + "close_registration": { + "type": ["null", "boolean"] + }, + "show_share_button": { + "type": ["null", "boolean"] + }, + "allow_multiple_devices": { + "type": ["null", "boolean"] + }, + "on_demand": { + "type": ["null", "boolean"] + }, + "global_dial_in_countries": { + "items": { + "type": ["string"] + }, + "type": ["null", "array"] + }, + "contact_name": { + "type": ["null", "boolean"] + }, + "contact_email": { + "type": ["null", "boolean"] + }, + "registrants_confirmation_email": { + "type": ["null", "boolean"] + }, + "registrants_restrict_number": { + "type": ["null", "integer"] + }, + "notify_registrants": { + "type": ["null", "boolean"] + }, + "post_webinar_survey": { + "type": ["null", "boolean"] + }, + "survey_url": { + "type": ["null", "string"] + }, + "registrants_email_notification": { + "type": ["null", "boolean"] + }, + "meeting_authentication": { + "type": ["null", "boolean"] + }, + "authentication_option": { + "type": ["null", "string"] + }, + "authentication_domains": { + "type": ["null", "string"] + } + }, + "type": ["null", "object"], + "additionalProperties": false + }, + "recurrence": { + "properties": { + "type": { + "type": ["null", "integer"] + }, + "repeat_interval": { + "type": ["null", "integer"] + }, + "weekly_days": { + "type": ["null", "integer"] + }, + "monthly_day": { + "type": ["null", "integer"] + }, + "monthly_week": { + "type": ["null", "integer"] + }, + "monthly_week_day": { + "type": ["null", "integer"] + }, + "end_times": { + "type": ["null", "integer"] + }, + "end_date_time": { + "format": "date-time", + "type": ["null", "string"] + } + }, + "type": ["null", "object"], + "additionalProperties": false + } + } + } + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml index 0b73074fa7ac..6d72ff1c9929 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml @@ -14,7 +14,7 @@ definitions: type: "CursorPagination" cursor_value: "{{ response.next_page_token }}" stop_condition: "{{ response.next_page_token == '' }}" - page_size: 10 # TODO: make it 30 + page_size: 30 page_size_option: field_name: "page_size" inject_into: "request_parameter" @@ -101,7 +101,6 @@ definitions: # - http_codes: [400] - predicate: "{{ response.code == 300 }}" action: IGNORE - - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -140,7 +139,6 @@ definitions: response_filters: - http_codes: [400] # TODO: fix this error action: IGNORE - - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -178,7 +176,6 @@ definitions: response_filters: - http_codes: [400, 404] # code 3001 gives HTTP 404 action: IGNORE - - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -217,7 +214,6 @@ definitions: response_filters: - http_codes: [400] action: IGNORE - - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -230,7 +226,535 @@ definitions: - path: ["meeting_id"] value: "{{ stream_slice.parent_id }}" - + + webinars_list_tmp_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinars_list_tmp" + primary_key: "id" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["webinars"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/users/{{ stream_slice.parent_id }}/webinars" + error_handler: + type: CompositeErrorHandler + # ignore 400 error; We get this error if Meeting is more than created an year ago + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.users_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + + webinars_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinars" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: [] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/webinars/{{ stream_slice.parent_id }}" + error_handler: + type: CompositeErrorHandler + # ignore 400 error + error_handlers: + - type: DefaultErrorHandler + response_filters: + # TODO: WHen parent stream throws error; then ideally we should have an empty array, and no /webinars/{id} should be called. But somehow we're calling it right now with None. :( + - http_codes: [400,404] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_list_tmp_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + + webinar_panelists_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_panelists" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["panelists"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/webinars/{{ stream_slice.parent_id }}/panelists" + error_handler: + type: CompositeErrorHandler + # ignore 400 error + error_handlers: + - type: DefaultErrorHandler + response_filters: + # TODO: Same problem as webinars_stream for 404! 400 is okay. :) + - http_codes: [400,404] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + webinar_registrants_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_registrants" + primary_key: "id" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["registrants"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/webinars/{{ stream_slice.parent_id }}/registrants" + error_handler: + type: CompositeErrorHandler + # ignore 400 error + error_handlers: + - type: DefaultErrorHandler + response_filters: + # TODO: Same problem as webinars_stream for 404! 400 is okay. :) + - http_codes: [400,404] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + webinar_absentees_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_absentees" + primary_key: "id" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["registrants"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/past_webinars/{{ stream_slice.parent_uuid }}/absentees" + error_handler: + type: CompositeErrorHandler + # ignore 400 error + error_handlers: + - type: DefaultErrorHandler + response_filters: + # TODO: Same problem as webinars_stream for 404! 400 is okay. :) + - http_codes: [400,404] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "uuid" + stream_slice_field: "parent_uuid" + transformations: + - type: AddFields + fields: + - path: ["webinar_uuid"] + value: "{{ stream_slice.parent_uuid }}" + + + webinar_polls_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_polls" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["polls"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/webinars/{{ stream_slice.parent_id }}/polls" + error_handler: + type: CompositeErrorHandler + # ignore 400 error; We get this error if Meeting poll is not enabled for the meeting + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] # TODO: fix this error + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + + webinar_poll_results_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_poll_results" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["questions"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/past_webinars/{{ stream_slice.parent_id }}/polls" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400, 404] # code 3001 gives HTTP 404 + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + webinar_registration_questions_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_registration_questions" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: [] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/webinars/{{ stream_slice.parent_id }}/registrants/questions" + error_handler: + type: CompositeErrorHandler + # ignore 400 error; We get this error if Meeting is more than created an year ago + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + + webinar_tracking_sources_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_tracking_sources" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["tracking_sources"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/webinars/{{ stream_slice.parent_id }}/tracking_sources" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + webinar_qna_results_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "webinar_qna_results" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["questions"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/past_webinars/{{ stream_slice.parent_id }}/qa" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400,404] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + + + report_meetings_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "report_meetings" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["tracking_sources"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/report/meetings/{{ stream_slice.parent_id }}" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.meetings_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["meeting_id"] + value: "{{ stream_slice.parent_id }}" + + + + + report_meeting_participants_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "report_meeting_participants" + primary_key: "id" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["participants"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/report/meetings/{{ stream_slice.parent_id }}/participants" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.meetings_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["meeting_id"] + value: "{{ stream_slice.parent_id }}" + + + + + + report_webinars_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "report_webinars" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: [] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/report/webinars/{{ stream_slice.parent_id }}" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + + report_webinar_participants_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "report_webinar_participants" + primary_key: "id" + retriever: + paginator: + $ref: "*ref(definitions.zoom_paginator)" + record_selector: + extractor: + type: DpathExtractor + field_pointer: ["participants"] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/report/webinars/{{ stream_slice.parent_id }}/participants" + error_handler: + type: CompositeErrorHandler + error_handlers: + - type: DefaultErrorHandler + response_filters: + - http_codes: [400] + action: IGNORE + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.webinars_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + transformations: + - type: AddFields + fields: + - path: ["webinar_id"] + value: "{{ stream_slice.parent_id }}" + + + streams: - "*ref(definitions.users_stream)" @@ -239,6 +763,27 @@ streams: - "*ref(definitions.meeting_polls_stream)" - "*ref(definitions.meeting_poll_results_stream)" - "*ref(definitions.meeting_registration_questions_stream)" + - "*ref(definitions.webinars_stream)" + - "*ref(definitions.webinar_panelists_stream)" + - "*ref(definitions.webinar_registrants_stream)" + - "*ref(definitions.webinar_absentees_stream)" + - "*ref(definitions.webinar_polls_stream)" + - "*ref(definitions.webinar_poll_results_stream)" + - "*ref(definitions.webinar_registration_questions_stream)" + - "*ref(definitions.webinar_tracking_sources_stream)" + - "*ref(definitions.webinar_qna_results_stream)" + - "*ref(definitions.report_meetings_stream)" + - "*ref(definitions.report_meeting_participants_stream)" + - "*ref(definitions.report_webinars_stream)" + - "*ref(definitions.report_webinar_participants_stream)" + + + + + + + + check: From 0f8842a2026ca8f5a33ff39ad55a162aae4416d1 Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Tue, 18 Oct 2022 22:23:56 +0530 Subject: [PATCH 03/15] fix: unhandled error cases by adding default handler and minor refactor --- .../connectors/source-zoom/Dockerfile | 3 - .../source-zoom/acceptance-test-config.yml | 11 +- .../integration_tests/configured_catalog.json | 144 ---- .../source_zoom/schemas/meetings.json | 690 ++++++++++++------ .../source_zoom/schemas/users.json | 27 + .../source-zoom/source_zoom/zoom.yaml | 68 +- 6 files changed, 557 insertions(+), 386 deletions(-) diff --git a/airbyte-integrations/connectors/source-zoom/Dockerfile b/airbyte-integrations/connectors/source-zoom/Dockerfile index ad322088d161..9ad7060d0685 100644 --- a/airbyte-integrations/connectors/source-zoom/Dockerfile +++ b/airbyte-integrations/connectors/source-zoom/Dockerfile @@ -33,9 +33,6 @@ COPY source_zoom ./source_zoom ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" -RUN ls -al - -# ENTRYPOINT ["sleep", "infinity"] ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] diff --git a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml index 3ca76e442e13..aa3d42993cd3 100644 --- a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml @@ -15,12 +15,11 @@ tests: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" empty_streams: [] - # TODO uncomment this block to specify that the tests should assert the connector outputs the records provided in the input file a file - expect_records: - path: "integration_tests/expected_records.txt" - extra_fields: no - exact_order: no - extra_records: yes + # expect_records: + # path: "integration_tests/expected_records.txt" + # extra_fields: no + # exact_order: no + # extra_records: yes full_refresh: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json index 8711b9a459fa..3086138cee27 100644 --- a/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json @@ -26,150 +26,6 @@ }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meeting_polls", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meeting_poll_results", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meeting_registration_questions", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_panelists", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_registrants", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinars", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_absentees", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_polls", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_poll_results", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_registration_questions", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_tracking_sources", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_qna_results", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_meetings", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_meeting_participants", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_webinars", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_webinar_participants", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" } ] } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json index 2ca050ef970b..e41e78a37ec5 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json @@ -1,239 +1,485 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["integer"] - }, - "meeting_id": { - "type": ["string"] - }, - "uuid": { - "type": ["string"] - }, - "host_id": { - "type": ["null", "string"] - }, - "topic": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "integer"] - }, - "status": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "timezone": { - "type": ["null", "string"] - }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "agenda": { - "type": ["null", "string"] - }, - "start_url": { - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - }, - "password": { - "type": ["null", "string"] - }, - "h323_password": { - "type": ["null", "string"] - }, - "encrypted_Password": { - "type": ["null", "string"] - }, - "pmi": { - "type": ["null", "integer"] - }, - "tracking_fields": { - "items": { - "properties": { - "field": { - "type": ["null", "string"] + "$schema": "http://json-schema.org/draft-06/schema#", + "$ref": "#/definitions/Stream", + "definitions": { + "Stream": { + "type": "object", + "additionalProperties": false, + "properties": { + "assistant_id": { + "type": "string" }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "occurences": { - "items": { - "properties": { - "occurence_id": { - "type": ["null", "string"] + "host_email": { + "type": "string" + }, + "host_id": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "uuid": { + "type": "string" + }, + "agenda": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "duration": { + "type": "integer" + }, + "encrypted_password": { + "type": "string" + }, + "h323_password": { + "type": "string", + "format": "integer" + }, + "join_url": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ] + }, + "occurrences": { + "type": "array", + "items": { + "$ref": "#/definitions/Occurrence" + } + }, + "password": { + "type": "string", + "format": "integer" + }, + "pmi": { + "type": "string" + }, + "pre_schedule": { + "type": "boolean" + }, + "recurrence": { + "$ref": "#/definitions/Recurrence" + }, + "settings": { + "$ref": "#/definitions/Settings" }, "start_time": { - "format": "date-time", - "type": ["null", "string"] + "type": "string", + "format": "date-time" + }, + "start_url": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ] + }, + "status": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "topic": { + "type": "string" }, + "tracking_fields": { + "type": "array", + "items": { + "$ref": "#/definitions/TrackingField" + } + }, + "type": { + "type": "integer" + } + }, + "required": [], + "title": "Stream" + }, + "Occurrence": { + "type": "object", + "additionalProperties": false, + "properties": { "duration": { - "type": ["null", "integer"] + "type": "integer" + }, + "occurrence_id": { + "type": "string" + }, + "start_time": { + "type": "string", + "format": "date-time" }, "status": { - "type": ["null", "string"] + "type": "string" + } + }, + "required": [], + "title": "Occurrence" + }, + "Recurrence": { + "type": "object", + "additionalProperties": false, + "properties": { + "end_date_time": { + "type": "string", + "format": "date-time" + }, + "end_times": { + "type": "integer" + }, + "monthly_day": { + "type": "integer" + }, + "monthly_week": { + "type": "integer" + }, + "monthly_week_day": { + "type": "integer" + }, + "repeat_interval": { + "type": "integer" + }, + "type": { + "type": "integer" + }, + "weekly_days": { + "type": "string", + "format": "integer" } - }, - "type": ["object"], - "additionalProperties": false }, - "type": ["null", "array"] - }, - "settings": { + "required": [], + "title": "Recurrence" + }, + "Settings": { + "type": "object", + "additionalProperties": false, "properties": { - "host_video": { - "type": ["null", "boolean"] - }, - "participant_video": { - "type": ["null", "boolean"] - }, - "cn_meeting": { - "type": ["null", "boolean"] - }, - "in_meeting": { - "type": ["null", "boolean"] - }, - "join_before_host": { - "type": ["null", "boolean"] - }, - "mute_upon_entry": { - "type": ["null", "boolean"] - }, - "watermark": { - "type": ["null", "boolean"] - }, - "use_pmi": { - "type": ["null", "boolean"] - }, - "approval_type": { - "type": ["null", "integer"] - }, - "registration_type": { - "type": ["null", "integer"] - }, - "audio": { - "type": ["null", "string"] - }, - "auto_recording": { - "type": ["null", "string"] - }, - "enforce_login": { - "type": ["null", "boolean"] - }, - "enforce_login_domains": { - "type": ["null", "string"] - }, - "alternative_hosts": { - "type": ["null", "string"] - }, - "close_registration": { - "type": ["null", "boolean"] - }, - "waiting_room": { - "type": ["null", "boolean"] - }, - "global_dial_in_countries": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - }, - "global_dial_in_numbers": { - "items": { - "properties": { - "country": { - "type": ["null", "string"] - }, - "country_name": { - "type": ["null", "string"] - }, - "city": { - "type": ["null", "string"] - }, - "number": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] + "allow_multiple_devices": { + "type": "boolean" + }, + "alternative_hosts": { + "type": "string" + }, + "alternative_hosts_email_notification": { + "type": "boolean" + }, + "alternative_host_update_polls": { + "type": "boolean" + }, + "approval_type": { + "type": "integer" + }, + "approved_or_denied_countries_or_regions": { + "$ref": "#/definitions/ApprovedOrDeniedCountriesOrRegions" + }, + "audio": { + "type": "string" + }, + "authentication_domains": { + "type": "string" + }, + "authentication_exception": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthenticationException" + } + }, + "authentication_name": { + "type": "string" + }, + "authentication_option": { + "type": "string" + }, + "auto_recording": { + "type": "string" + }, + "breakout_room": { + "$ref": "#/definitions/BreakoutRoom" + }, + "calendar_type": { + "type": "integer" + }, + "close_registration": { + "type": "boolean" + }, + "contact_email": { + "type": "string" + }, + "contact_name": { + "type": "string" + }, + "custom_keys": { + "type": "array", + "items": { + "$ref": "#/definitions/CustomKey" } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "contact_name": { - "type": ["null", "boolean"] - }, - "contact_email": { - "type": ["null", "boolean"] - }, - "registrants_confirmation_email": { - "type": ["null", "boolean"] - }, - "registrants_email_notification": { - "type": ["null", "boolean"] - }, - "meeting_authentication": { - "type": ["null", "boolean"] - }, - "authentication_option": { - "type": ["null", "string"] - }, - "authentication_domains": { - "type": ["null", "string"] - } + }, + "email_notification": { + "type": "boolean" + }, + "encryption_type": { + "type": "string" + }, + "focus_mode": { + "type": "boolean" + }, + "global_dial_in_countries": { + "type": "array", + "items": { + "type": "string" + } + }, + "global_dial_in_numbers": { + "type": "array", + "items": { + "$ref": "#/definitions/GlobalDialInNumber" + } + }, + "host_video": { + "type": "boolean" + }, + "jbh_time": { + "type": "integer" + }, + "join_before_host": { + "type": "boolean" + }, + "language_interpretation": { + "$ref": "#/definitions/LanguageInterpretation" + }, + "meeting_authentication": { + "type": "boolean" + }, + "mute_upon_entry": { + "type": "boolean" + }, + "participant_video": { + "type": "boolean" + }, + "private_meeting": { + "type": "boolean" + }, + "registrants_confirmation_email": { + "type": "boolean" + }, + "registrants_email_notification": { + "type": "boolean" + }, + "registration_type": { + "type": "integer" + }, + "show_share_button": { + "type": "boolean" + }, + "use_pmi": { + "type": "boolean" + }, + "waiting_room": { + "type": "boolean" + }, + "waiting_room_options": { + "$ref": "#/definitions/WaitingRoomOptions" + }, + "watermark": { + "type": "boolean" + }, + "host_save_video_order": { + "type": "boolean" + } + }, + "required": [], + "title": "Settings" + }, + "ApprovedOrDeniedCountriesOrRegions": { + "type": "object", + "additionalProperties": false, + "properties": { + "approved_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "denied_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "enable": { + "type": "boolean" + }, + "method": { + "type": "string" + } + }, + "required": [], + "title": "ApprovedOrDeniedCountriesOrRegions" + }, + "AuthenticationException": { + "type": "object", + "additionalProperties": false, + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "join_url": { + "type": "string", + "format": "uri", + "qt-uri-protocols": [ + "https" + ] + } }, - "type": ["null", "object"], - "additionalProperties": false - }, - "recurrence": { + "required": [], + "title": "AuthenticationException" + }, + "BreakoutRoom": { + "type": "object", + "additionalProperties": false, "properties": { - "type": { - "type": ["null", "integer"] - }, - "repeat_interval": { - "type": ["null", "integer"] - }, - "weekly_days": { - "type": ["null", "integer"] - }, - "monthly_day": { - "type": ["null", "integer"] - }, - "monthly_week": { - "type": ["null", "integer"] - }, - "monthly_week_day": { - "type": ["null", "integer"] - }, - "end_times": { - "type": ["null", "integer"] - }, - "end_date_time": { - "format": "date-time", - "type": ["null", "string"] - } + "enable": { + "type": "boolean" + }, + "rooms": { + "type": "array", + "items": { + "$ref": "#/definitions/Room" + } + } + }, + "required": [], + "title": "BreakoutRoom" + }, + "Room": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "participants": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [], + "title": "Room" + }, + "CustomKey": { + "type": "object", + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [], + "title": "CustomKey" + }, + "GlobalDialInNumber": { + "type": "object", + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "country_name": { + "type": "string" + }, + "number": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [], + "title": "GlobalDialInNumber" + }, + "LanguageInterpretation": { + "type": "object", + "additionalProperties": false, + "properties": { + "enable": { + "type": "boolean" + }, + "interpreters": { + "type": "array", + "items": { + "$ref": "#/definitions/Interpreter" + } + } + }, + "required": [], + "title": "LanguageInterpretation" + }, + "Interpreter": { + "type": "object", + "additionalProperties": false, + "properties": { + "email": { + "type": "string" + }, + "languages": { + "type": "string" + } + }, + "required": [], + "title": "Interpreter" + }, + "WaitingRoomOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "enable": { + "type": "boolean" + }, + "admit_type": { + "type": "integer" + }, + "auto_admit": { + "type": "integer" + }, + "internal_user_auto_admit": { + "type": "integer" + } + }, + "required": [], + "title": "WaitingRoomOptions" + }, + "TrackingField": { + "type": "object", + "additionalProperties": false, + "properties": { + "field": { + "type": "string" + }, + "value": { + "type": "string" + }, + "visible": { + "type": "boolean" + } }, - "type": ["null", "object"], - "additionalProperties": false - } + "required": [], + "title": "TrackingField" } } - \ No newline at end of file +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json index b558a457dcf1..b37c88bc69bc 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json @@ -14,12 +14,21 @@ "email": { "type": ["null", "string"] }, + "employee_unique_id": { + "type": ["null", "string"] + }, "type": { "type": ["null", "integer"] }, + "plan_united_type": { + "type": ["null", "integer"] + }, "status": { "type": ["null", "string"] }, + "role_id": { + "type": ["null", "string"] + }, "pmi": { "type": ["null", "integer"] }, @@ -54,6 +63,24 @@ }, "verified": { "type": ["null", "integer"] + }, + "custom_attributes": { + "items": { + "properties": { + "key": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + }, + "type": ["object"], + "additionalProperties": false + }, + "type": ["null", "array"] } } } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml index 6d72ff1c9929..f66f85a2c9a8 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml @@ -33,6 +33,7 @@ definitions: file_path: "./source_zoom/schemas/{{ options['name'] }}.json" + # https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/users users_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" @@ -50,11 +51,11 @@ definitions: path: "/users" - meetings_stream: + meetings_list_tmp_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" $options: - name: "meetings" + name: "meetings_list_tmp" primary_key: "id" retriever: paginator: @@ -75,6 +76,32 @@ definitions: stream_slice_field: "parent_id" + + meetings_stream: + schema_loader: + $ref: "*ref(definitions.schema_loader)" + $options: + name: "meetings" + primary_key: "id" + retriever: + paginator: + type: NoPagination + record_selector: + extractor: + type: DpathExtractor + field_pointer: [] + $ref: "*ref(definitions.retriever)" + requester: + $ref: "*ref(definitions.requester)" + path: "/meetings/{{ stream_slice.parent_id }}" + stream_slicer: + type: SubstreamSlicer + parent_stream_configs: + - stream: "*ref(definitions.meetings_list_tmp_stream)" + parent_key: "id" + stream_slice_field: "parent_id" + + meeting_registrants_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" @@ -101,10 +128,11 @@ definitions: # - http_codes: [400] - predicate: "{{ response.code == 300 }}" action: IGNORE + - type: DefaultErrorHandler # we're adding this DefaultErrorHandler for 429, 5XX errors etc; stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.meetings_stream)" + - stream: "*ref(definitions.meetings_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -139,10 +167,11 @@ definitions: response_filters: - http_codes: [400] # TODO: fix this error action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.meetings_stream)" + - stream: "*ref(definitions.meetings_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -157,7 +186,7 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "meeting_poll_results" - primary_key: "id" + primary_key: "meeting_id" retriever: paginator: type: NoPagination @@ -176,10 +205,11 @@ definitions: response_filters: - http_codes: [400, 404] # code 3001 gives HTTP 404 action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.meetings_stream)" + - stream: "*ref(definitions.meetings_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -214,10 +244,11 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.meetings_stream)" + - stream: "*ref(definitions.meetings_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -252,6 +283,7 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -285,6 +317,7 @@ definitions: # TODO: WHen parent stream throws error; then ideally we should have an empty array, and no /webinars/{id} should be called. But somehow we're calling it right now with None. :( - http_codes: [400,404] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -318,6 +351,7 @@ definitions: # TODO: Same problem as webinars_stream for 404! 400 is okay. :) - http_codes: [400,404] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -357,6 +391,7 @@ definitions: # TODO: Same problem as webinars_stream for 404! 400 is okay. :) - http_codes: [400,404] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -396,6 +431,7 @@ definitions: # TODO: Same problem as webinars_stream for 404! 400 is okay. :) - http_codes: [400,404] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -434,6 +470,7 @@ definitions: response_filters: - http_codes: [400] # TODO: fix this error action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -472,6 +509,7 @@ definitions: response_filters: - http_codes: [400, 404] # code 3001 gives HTTP 404 action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -510,6 +548,7 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -548,6 +587,7 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -585,6 +625,7 @@ definitions: response_filters: - http_codes: [400,404] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -600,7 +641,7 @@ definitions: - report_meetings_stream: + report_meetings_list_tmp_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" $options: @@ -624,10 +665,11 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.meetings_stream)" + - stream: "*ref(definitions.meetings_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -663,10 +705,11 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.meetings_stream)" + - stream: "*ref(definitions.meetings_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -703,6 +746,7 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -741,6 +785,7 @@ definitions: response_filters: - http_codes: [400] action: IGNORE + - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: @@ -758,6 +803,7 @@ definitions: streams: - "*ref(definitions.users_stream)" + # - "*ref(definitions.meetings_list_tmp_stream)" - "*ref(definitions.meetings_stream)" - "*ref(definitions.meeting_registrants_stream)" - "*ref(definitions.meeting_polls_stream)" @@ -772,7 +818,7 @@ streams: - "*ref(definitions.webinar_registration_questions_stream)" - "*ref(definitions.webinar_tracking_sources_stream)" - "*ref(definitions.webinar_qna_results_stream)" - - "*ref(definitions.report_meetings_stream)" + - "*ref(definitions.report_meetings_list_tmp_stream)" - "*ref(definitions.report_meeting_participants_stream)" - "*ref(definitions.report_webinars_stream)" - "*ref(definitions.report_webinar_participants_stream)" From f170931a4781c6e99042d04268da4af908ae05c6 Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Thu, 20 Oct 2022 00:14:21 +0530 Subject: [PATCH 04/15] feat: sync the catalog with the latest zoom API responses --- .../connectors/source-zoom/README.md | 79 -- .../source-zoom/acceptance-test-config.yml | 31 +- .../source-zoom/acceptance-test-docker.sh | 0 .../integration_tests/configured_catalog.json | 188 ++++- ...[check]_if_required_webinars_list_tmp.json | 16 - .../schemas/meeting_poll_results.json | 57 +- .../source_zoom/schemas/meeting_polls.json | 103 ++- .../schemas/meeting_registrants.json | 111 +-- .../meeting_registration_questions.json | 80 +- .../source_zoom/schemas/meetings.json | 793 ++++++++---------- .../schemas/report_meeting_participants.json | 75 +- .../source_zoom/schemas/report_meetings.json | 129 +-- .../schemas/report_webinar_participants.json | 87 +- .../source_zoom/schemas/report_webinars.json | 129 +-- .../source_zoom/schemas/users.json | 124 +-- .../schemas/webinar_absentees.json | 160 ++-- .../schemas/webinar_panelists.json | 55 +- .../schemas/webinar_poll_results.json | 58 +- .../source_zoom/schemas/webinar_polls.json | 123 ++- .../schemas/webinar_qna_results.json | 52 +- .../schemas/webinar_registrants.json | 160 ++-- .../webinar_registration_questions.json | 82 +- .../schemas/webinar_tracking_sources.json | 46 +- .../source_zoom/schemas/webinars.json | 477 +++++++---- .../source-zoom/source_zoom/zoom.yaml | 112 +-- 25 files changed, 1828 insertions(+), 1499 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-zoom/README.md mode change 100644 => 100755 airbyte-integrations/connectors/source-zoom/acceptance-test-docker.sh delete mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json diff --git a/airbyte-integrations/connectors/source-zoom/README.md b/airbyte-integrations/connectors/source-zoom/README.md deleted file mode 100644 index d99d216cf198..000000000000 --- a/airbyte-integrations/connectors/source-zoom/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# Zoom Source - -This is the repository for the Zoom configuration based source connector. -For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.io/integrations/sources/zoom). - -## Local development - -#### Building via Gradle -You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. - -To build using Gradle, from the Airbyte repository root, run: -``` -./gradlew :airbyte-integrations:connectors:source-zoom:build -``` - -#### Create credentials -**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/zoom) -to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_zoom/spec.yaml` file. -Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. -See `integration_tests/sample_config.json` for a sample config file. - -**If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source zoom test creds` -and place them into `secrets/config.json`. - -### Locally running the connector docker image - -#### Build -First, make sure you build the latest Docker image: -``` -docker build . -t airbyte/source-zoom:dev -``` - -You can also build the connector image via Gradle: -``` -./gradlew :airbyte-integrations:connectors:source-zoom:airbyteDocker -``` -When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in -the Dockerfile. - -#### Run -Then run any of the connector commands as follows: -``` -docker run --rm airbyte/source-zoom:dev spec -docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-zoom:dev check --config /secrets/config.json -docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-zoom:dev discover --config /secrets/config.json -docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-zoom:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json -``` -## Testing - -#### Acceptance Tests -Customize `acceptance-test-config.yml` file to configure tests. See [Source Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/source-acceptance-tests-reference) for more information. -If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. - -To run your integration tests with docker - -### Using gradle to run tests -All commands should be run from airbyte project root. -To run unit tests: -``` -./gradlew :airbyte-integrations:connectors:source-zoom:unitTest -``` -To run acceptance and custom integration tests: -``` -./gradlew :airbyte-integrations:connectors:source-zoom:integrationTest -``` - -## Dependency Management -All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. -We split dependencies between two groups, dependencies that are: -* required for your connector to work need to go to `MAIN_REQUIREMENTS` list. -* required for the testing need to go to `TEST_REQUIREMENTS` list - -### Publishing a new version of the connector -You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? -1. Make sure your changes are passing unit and integration tests. -1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). -1. Create a Pull Request. -1. Pat yourself on the back for being an awesome contributor. -1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. diff --git a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml index aa3d42993cd3..4b4aa8c6f734 100644 --- a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml @@ -14,12 +14,31 @@ tests: basic_read: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: [] - # expect_records: - # path: "integration_tests/expected_records.txt" - # extra_fields: no - # exact_order: no - # extra_records: yes + empty_streams: + - "users" + - "meetings" + - "meeting_registrants" + - "meeting_polls" + - "meeting_poll_results" + - "meeting_registration_questions" + - "webinars" + - "webinar_panelists" + - "webinar_registrants" + - "webinar_absentees" + - "webinar_polls" + - "webinar_poll_results" + - "webinar_registration_questions" + - "webinar_tracking_sources" + - "webinar_qna_results" + - "report_meetings" + - "report_meeting_participants" + - "report_webinars" + - "report_webinar_participants" full_refresh: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" + ignored_fields: + "meetings": + - "start_url" + "webinars": + - "start_url" diff --git a/airbyte-integrations/connectors/source-zoom/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-zoom/acceptance-test-docker.sh old mode 100644 new mode 100755 diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json index 3086138cee27..4be548978f15 100644 --- a/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-zoom/integration_tests/configured_catalog.json @@ -4,7 +4,9 @@ "stream": { "name": "users", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": [ + "full_refresh" + ] }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" @@ -13,7 +15,9 @@ "stream": { "name": "meetings", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": [ + "full_refresh" + ] }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" @@ -22,7 +26,185 @@ "stream": { "name": "meeting_registrants", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meeting_polls", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meeting_poll_results", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "meeting_registration_questions", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinars", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_panelists", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_registrants", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_absentees", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_polls", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_poll_results", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_registration_questions", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_tracking_sources", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webinar_qna_results", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_meetings", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_meeting_participants", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_webinars", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "report_webinar_participants", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json deleted file mode 100644 index 5335d74e789f..000000000000 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/[check]_if_required_webinars_list_tmp.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "uuid": { - "type": ["string"] - }, - "id": { - "type": ["string"] - }, - "host_id": { - "type": ["null", "string"] - } - } - } - \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json index 91808fd367e1..0f4b97875223 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_poll_results.json @@ -1,30 +1,37 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "meeting_id": { - "type": ["string"] - }, - "email": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "question_details": { - "items": { - "properties": { - "question": { - "type": ["null", "string"] - }, - "answer": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "meeting_uuid": { + "type": "string" + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "question_details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "answer": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "date_time": { + "type": "string" + }, + "polling_id": { + "type": "string" + }, + "question": { + "type": "string" + } }, - "type": ["null", "array"] + "required": [] } } - } + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json index 542c0b86dec8..989fddd5626f 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_polls.json @@ -3,37 +3,94 @@ "type": "object", "properties": { "id": { - "type": ["string"] + "type": "string" }, "meeting_id": { - "type": ["string"] + "type": "number" }, "status": { - "type": ["null", "string"] + "type": "string" }, - "title": { - "type": ["null", "string"] + "anonymous": { + "type": "boolean" + }, + "poll_type": { + "type": "number" }, "questions": { + "type": "array", "items": { - "properties": { - "name": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] + "type": "object", + "properties": { + "answer_max_character": { + "type": "number" + }, + "answer_min_character": { + "type": "number" + }, + "answer_required": { + "type": "boolean" + }, + "answers": { + "type": "array", + "items": { + "type": "string" + } + }, + "case_sensitive": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "prompts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "prompt_question": { + "type": "string" + }, + "prompt_right_answers": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [] + } + }, + "rating_max_label": { + "type": "string" + }, + "rating_max_value": { + "type": "number" + }, + "rating_min_label": { + "type": "string" + }, + "rating_min_value": { + "type": "number" + }, + "right_answers": { + "type": "array", + "items": { + "type": "string" + } + }, + "show_as_dropdown": { + "type": "boolean" + }, + "type": { + "type": "string" + } }, - "answers": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] + "required": [] + } + }, + "title": { + "type": "string" } } - } \ No newline at end of file +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json index f30a6e09fd3b..c5dc946fb693 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registrants.json @@ -1,85 +1,86 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", + "$schema":"http://json-schema.org/draft-07/schema#", "properties": { - "id": { - "type": ["string"] - }, "meeting_id": { - "type": ["string"] - }, - "email": { - "type": ["null", "string"] - }, - "first_name": { - "type": ["null", "string"] + "type": "number" }, - "last_name": { - "type": ["null", "string"] + "id": { + "type": "string" }, "address": { - "type": ["null", "string"] + "type": "string" }, "city": { - "type": ["null", "string"] + "type": "string" }, - "county": { - "type": ["null", "string"] + "comments": { + "type": "string" }, - "zip": { - "type": ["null", "string"] + "country": { + "type": "string" }, - "state": { - "type": ["null", "string"] + "custom_questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + ] + } }, - "phone": { - "type": ["null", "string"] + "email": { + "type": "string" + }, + "first_name": { + "type": "string" }, "industry": { - "type": ["null", "string"] + "type": "string" + }, + "job_title": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "no_of_employees": { + "type": "string" }, "org": { - "type": ["null", "string"] + "type": "string" }, - "job_title": { - "type": ["null", "string"] + "phone": { + "type": "string" }, "purchasing_time_frame": { - "type": ["null", "string"] + "type": "string" }, "role_in_purchase_process": { - "type": ["null", "string"] - }, - "no_of_employees": { - "type": ["null", "string"] - }, - "comments": { - "type": ["null", "string"] + "type": "string" }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] + "state": { + "type": "string" }, "status": { - "type": ["null", "string"] + "type": "string" + }, + "zip": { + "type": "string" }, "create_time": { - "format": "date-time", - "type": ["null", "string"] + "type": "string" }, "join_url": { - "type": ["null", "string"] + "type": "string" } - } + }, + "required": [ + ] } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json index 8c3fa0847e12..aa396bf02ef2 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meeting_registration_questions.json @@ -1,48 +1,50 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "meeting_id": { - "type": ["string"] - }, - "questions": { - "items": { - "properties": { - "field_name": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "meeting_id": { + "type": [ + "string" + ] + }, + "custom_questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "answers": { + "type": "array", + "items": { + "type": "string" } }, - "type": ["object"], - "additionalProperties": false + "required": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } }, - "type": ["null", "array"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] - }, - "answers": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - } + "required": [] + } + }, + "questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field_name": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "required": { + "type": "boolean" + } }, - "type": ["null", "array"] + "required": [] } } } +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json index e41e78a37ec5..06c7d95dc1f1 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/meetings.json @@ -1,485 +1,408 @@ { "$schema": "http://json-schema.org/draft-06/schema#", - "$ref": "#/definitions/Stream", - "definitions": { - "Stream": { - "type": "object", - "additionalProperties": false, - "properties": { - "assistant_id": { - "type": "string" - }, - "host_email": { - "type": "string" - }, - "host_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "uuid": { - "type": "string" - }, - "agenda": { - "type": "string" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "duration": { - "type": "integer" - }, - "encrypted_password": { - "type": "string" - }, - "h323_password": { - "type": "string", - "format": "integer" - }, - "join_url": { - "type": "string", - "format": "uri", - "qt-uri-protocols": [ - "https" - ] - }, - "occurrences": { - "type": "array", - "items": { - "$ref": "#/definitions/Occurrence" - } - }, - "password": { - "type": "string", - "format": "integer" - }, - "pmi": { - "type": "string" - }, - "pre_schedule": { - "type": "boolean" - }, - "recurrence": { - "$ref": "#/definitions/Recurrence" - }, - "settings": { - "$ref": "#/definitions/Settings" - }, - "start_time": { - "type": "string", - "format": "date-time" - }, - "start_url": { - "type": "string", - "format": "uri", - "qt-uri-protocols": [ - "https" - ] - }, - "status": { - "type": "string" - }, - "timezone": { - "type": "string" - }, - "topic": { - "type": "string" - }, - "tracking_fields": { - "type": "array", - "items": { - "$ref": "#/definitions/TrackingField" - } - }, - "type": { - "type": "integer" - } + "properties": { + "assistant_id": { + "type": "string" + }, + "host_email": { + "type": "string" + }, + "host_id": { + "type": "string" + }, + "id": { + "type": "number" + }, + "uuid": { + "type": "string" + }, + "agenda": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "duration": { + "type": "number" + }, + "encrypted_password": { + "type": "string" + }, + "h323_password": { + "type": "string" + }, + "join_url": { + "type": "string" + }, + "occurrences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "duration": { + "type": "number" }, - "required": [], - "title": "Stream" - }, - "Occurrence": { - "type": "object", - "additionalProperties": false, - "properties": { - "duration": { - "type": "integer" - }, - "occurrence_id": { - "type": "string" - }, - "start_time": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string" - } + "occurrence_id": { + "type": "string" }, - "required": [], - "title": "Occurrence" - }, - "Recurrence": { - "type": "object", - "additionalProperties": false, - "properties": { - "end_date_time": { - "type": "string", - "format": "date-time" - }, - "end_times": { - "type": "integer" - }, - "monthly_day": { - "type": "integer" - }, - "monthly_week": { - "type": "integer" - }, - "monthly_week_day": { - "type": "integer" - }, - "repeat_interval": { - "type": "integer" - }, - "type": { - "type": "integer" - }, - "weekly_days": { - "type": "string", - "format": "integer" - } + "start_time": { + "type": "string" }, - "required": [], - "title": "Recurrence" + "status": { + "type": "string" + } + }, + "required": [ + ] + } + }, + "password": { + "type": "string" + }, + "pmi": { + "type": "string" + }, + "pre_schedule": { + "type": "boolean" + }, + "recurrence": { + "type": "object", + "properties": { + "end_date_time": { + "type": "string" + }, + "end_times": { + "type": "number" + }, + "monthly_day": { + "type": "number" + }, + "monthly_week": { + "type": "number" + }, + "monthly_week_day": { + "type": "number" + }, + "repeat_interval": { + "type": "number" + }, + "type": { + "type": "number" + }, + "weekly_days": { + "type": "string" + } }, - "Settings": { + "required": [ + ] + }, + "settings": { + "type": "object", + "properties": { + "allow_multiple_devices": { + "type": "boolean" + }, + "alternative_hosts": { + "type": "string" + }, + "alternative_hosts_email_notification": { + "type": "boolean" + }, + "alternative_host_update_polls": { + "type": "boolean" + }, + "approval_type": { + "type": "number" + }, + "approved_or_denied_countries_or_regions": { "type": "object", - "additionalProperties": false, "properties": { - "allow_multiple_devices": { - "type": "boolean" - }, - "alternative_hosts": { - "type": "string" - }, - "alternative_hosts_email_notification": { - "type": "boolean" - }, - "alternative_host_update_polls": { - "type": "boolean" - }, - "approval_type": { - "type": "integer" - }, - "approved_or_denied_countries_or_regions": { - "$ref": "#/definitions/ApprovedOrDeniedCountriesOrRegions" - }, - "audio": { - "type": "string" - }, - "authentication_domains": { - "type": "string" - }, - "authentication_exception": { - "type": "array", - "items": { - "$ref": "#/definitions/AuthenticationException" - } - }, - "authentication_name": { - "type": "string" - }, - "authentication_option": { - "type": "string" - }, - "auto_recording": { - "type": "string" - }, - "breakout_room": { - "$ref": "#/definitions/BreakoutRoom" - }, - "calendar_type": { - "type": "integer" - }, - "close_registration": { - "type": "boolean" - }, - "contact_email": { - "type": "string" - }, - "contact_name": { - "type": "string" - }, - "custom_keys": { - "type": "array", - "items": { - "$ref": "#/definitions/CustomKey" - } - }, - "email_notification": { - "type": "boolean" - }, - "encryption_type": { - "type": "string" - }, - "focus_mode": { - "type": "boolean" - }, - "global_dial_in_countries": { - "type": "array", - "items": { - "type": "string" - } - }, - "global_dial_in_numbers": { - "type": "array", - "items": { - "$ref": "#/definitions/GlobalDialInNumber" - } - }, - "host_video": { - "type": "boolean" - }, - "jbh_time": { - "type": "integer" - }, - "join_before_host": { - "type": "boolean" - }, - "language_interpretation": { - "$ref": "#/definitions/LanguageInterpretation" - }, - "meeting_authentication": { - "type": "boolean" - }, - "mute_upon_entry": { - "type": "boolean" - }, - "participant_video": { - "type": "boolean" - }, - "private_meeting": { - "type": "boolean" - }, - "registrants_confirmation_email": { - "type": "boolean" - }, - "registrants_email_notification": { - "type": "boolean" - }, - "registration_type": { - "type": "integer" - }, - "show_share_button": { - "type": "boolean" - }, - "use_pmi": { - "type": "boolean" - }, - "waiting_room": { - "type": "boolean" - }, - "waiting_room_options": { - "$ref": "#/definitions/WaitingRoomOptions" - }, - "watermark": { - "type": "boolean" - }, - "host_save_video_order": { - "type": "boolean" + "approved_list": { + "type": "array", + "items": { + "type": "string" } - }, - "required": [], - "title": "Settings" - }, - "ApprovedOrDeniedCountriesOrRegions": { - "type": "object", - "additionalProperties": false, - "properties": { - "approved_list": { - "type": "array", - "items": { - "type": "string" - } - }, - "denied_list": { - "type": "array", - "items": { - "type": "string" - } - }, - "enable": { - "type": "boolean" - }, - "method": { - "type": "string" + }, + "denied_list": { + "type": "array", + "items": { + "type": "string" } + }, + "enable": { + "type": "boolean" + }, + "method": { + "type": "string" + } }, - "required": [], - "title": "ApprovedOrDeniedCountriesOrRegions" - }, - "AuthenticationException": { - "type": "object", - "additionalProperties": false, - "properties": { + "required": [ + ] + }, + "audio": { + "type": "string" + }, + "authentication_domains": { + "type": "string" + }, + "authentication_exception": { + "type": "array", + "items": { + "type": "object", + "properties": { "email": { - "type": "string" + "type": "string" }, "name": { - "type": "string" + "type": "string" }, "join_url": { - "type": "string", - "format": "uri", - "qt-uri-protocols": [ - "https" - ] + "type": "string" } - }, - "required": [], - "title": "AuthenticationException" - }, - "BreakoutRoom": { + }, + "required": [ + ] + } + }, + "authentication_name": { + "type": "string" + }, + "authentication_option": { + "type": "string" + }, + "auto_recording": { + "type": "string" + }, + "breakout_room": { "type": "object", - "additionalProperties": false, "properties": { - "enable": { - "type": "boolean" - }, - "rooms": { - "type": "array", - "items": { - "$ref": "#/definitions/Room" - } - } - }, - "required": [], - "title": "BreakoutRoom" - }, - "Room": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "participants": { - "type": "array", - "items": { + "enable": { + "type": "boolean" + }, + "rooms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "participants": { + "type": "array", + "items": { "type": "string" + } } + }, + "required": [ + ] } + } }, - "required": [], - "title": "Room" - }, - "CustomKey": { - "type": "object", - "additionalProperties": false, - "properties": { + "required": [ + ] + }, + "calendar_type": { + "type": "number" + }, + "close_registration": { + "type": "boolean" + }, + "contact_email": { + "type": "string" + }, + "contact_name": { + "type": "string" + }, + "custom_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { "key": { - "type": "string" + "type": "string" }, "value": { - "type": "string" + "type": "string" } - }, - "required": [], - "title": "CustomKey" - }, - "GlobalDialInNumber": { - "type": "object", - "additionalProperties": false, - "properties": { + }, + "required": [ + ] + } + }, + "email_notification": { + "type": "boolean" + }, + "encryption_type": { + "type": "string" + }, + "focus_mode": { + "type": "boolean" + }, + "global_dial_in_countries": { + "type": "array", + "items": { + "type": "string" + } + }, + "global_dial_in_numbers": { + "type": "array", + "items": { + "type": "object", + "properties": { "city": { - "type": "string" + "type": "string" }, "country": { - "type": "string" + "type": "string" }, "country_name": { - "type": "string" + "type": "string" }, "number": { - "type": "string" + "type": "string" }, "type": { - "type": "string" + "type": "string" } - }, - "required": [], - "title": "GlobalDialInNumber" - }, - "LanguageInterpretation": { + }, + "required": [ + ] + } + }, + "host_video": { + "type": "boolean" + }, + "jbh_time": { + "type": "number" + }, + "join_before_host": { + "type": "boolean" + }, + "language_interpretation": { "type": "object", - "additionalProperties": false, "properties": { - "enable": { - "type": "boolean" - }, - "interpreters": { - "type": "array", - "items": { - "$ref": "#/definitions/Interpreter" + "enable": { + "type": "boolean" + }, + "interpreters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "languages": { + "type": "string" } + }, + "required": [ + ] } + } }, - "required": [], - "title": "LanguageInterpretation" - }, - "Interpreter": { + "required": [ + ] + }, + "meeting_authentication": { + "type": "boolean" + }, + "mute_upon_entry": { + "type": "boolean" + }, + "participant_video": { + "type": "boolean" + }, + "private_meeting": { + "type": "boolean" + }, + "registrants_confirmation_email": { + "type": "boolean" + }, + "registrants_email_notification": { + "type": "boolean" + }, + "registration_type": { + "type": "number" + }, + "show_share_button": { + "type": "boolean" + }, + "use_pmi": { + "type": "boolean" + }, + "waiting_room": { + "type": "boolean" + }, + "waiting_room_options": { "type": "object", - "additionalProperties": false, "properties": { - "email": { - "type": "string" - }, - "languages": { - "type": "string" - } + "enable": { + "type": "boolean" + }, + "admit_type": { + "type": "number" + }, + "auto_admit": { + "type": "number" + }, + "internal_user_auto_admit": { + "type": "number" + } }, - "required": [], - "title": "Interpreter" + "required": [ + ] + }, + "watermark": { + "type": "boolean" + }, + "host_save_video_order": { + "type": "boolean" + } }, - "WaitingRoomOptions": { - "type": "object", - "additionalProperties": false, - "properties": { - "enable": { - "type": "boolean" - }, - "admit_type": { - "type": "integer" - }, - "auto_admit": { - "type": "integer" - }, - "internal_user_auto_admit": { - "type": "integer" - } + "required": [ + ] + }, + "start_time": { + "type": "string" + }, + "start_url": { + "type": "string" + }, + "status": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "tracking_fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string" }, - "required": [], - "title": "WaitingRoomOptions" - }, - "TrackingField": { - "type": "object", - "additionalProperties": false, - "properties": { - "field": { - "type": "string" - }, - "value": { - "type": "string" - }, - "visible": { - "type": "boolean" - } + "value": { + "type": "string" }, - "required": [], - "title": "TrackingField" + "visible": { + "type": "boolean" + } + }, + "required": [ + ] } - } + }, + "type": { + "type": "number" + } + }, + "required": [ + ] + } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json index 31f46691b77f..763392427fc4 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meeting_participants.json @@ -1,33 +1,46 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["string"] - }, - "user_id": { - "type": ["string"] - }, - "meeting_id": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "join_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "leave_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "meeting_uuid": { + "type": "string" + }, + "customer_key": { + "type": "string" + }, + "duration": { + "type": "number" + }, + "failover": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "join_time": { + "type": "string" + }, + "leave_time": { + "type": "string" + }, + "name": { + "type": "string" + }, + "registrant_id": { + "type": "string" + }, + "user_email": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "status": { + "type": "string" + }, + "bo_mtg_id": { + "type": "string" } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json index 7a45f288ecb3..e7b31f338a72 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_meetings.json @@ -1,63 +1,76 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "meeting_id": { - "type": ["string"] - }, - "uuid": { - "type": ["string"] - }, - "id": { - "type": ["integer"] - }, - "type": { - "type": ["null", "integer"] - }, - "topic": { - "type": ["null", "string"] - }, - "user_name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "end_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "total_minutes": { - "type": ["null", "integer"] - }, - "participants_count": { - "type": ["null", "integer"] - }, - "tracking_fields": { - "items": { - "properties": { - "field": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "meeting_uuid": { + "type": "string" + }, + "custom_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "value": { + "type": "string" + } }, - "type": ["null", "array"] - }, - "dept": { - "type": ["null", "integer"] + "required": [] } + }, + "dept": { + "type": "string" + }, + "duration": { + "type": "number" + }, + "end_time": { + "type": "string" + }, + "id": { + "type": "number" + }, + "participants_count": { + "type": "number" + }, + "start_time": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "total_minutes": { + "type": "number" + }, + "tracking_fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [] + } + }, + "type": { + "type": "number" + }, + "user_email": { + "type": "string" + }, + "user_name": { + "type": "string" + }, + "uuid": { + "type": "string" } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json index 0095fa5dfdef..bfba6ff87d93 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinar_participants.json @@ -1,36 +1,55 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["string"] - }, - "user_id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "join_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "leave_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "string"] - }, - "attentiveness_score": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_uuid": { + "type": "string" + }, + "customer_key": { + "type": "string" + }, + "duration": { + "type": "number" + }, + "failover": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "join_time": { + "type": "string" + }, + "leave_time": { + "type": "string" + }, + "name": { + "type": "string" + }, + "registrant_id": { + "type": "string" + }, + "status": { + "type": "string" + }, + "user_email": { + "type": "string" + }, + "user_id": { + "type": "string" } - } - \ No newline at end of file + }, + "required": [ + "customer_key", + "duration", + "failover", + "id", + "join_time", + "leave_time", + "name", + "registrant_id", + "status", + "user_email", + "user_id" + ] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json index 7ce718513ec0..b8ae1ed0ceac 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/report_webinars.json @@ -1,63 +1,76 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "webinar_id": { - "type": ["string"] - }, - "uuid": { - "type": ["string"] - }, - "id": { - "type": ["integer"] - }, - "type": { - "type": ["null", "integer"] - }, - "topic": { - "type": ["null", "string"] - }, - "user_name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "end_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "total_minutes": { - "type": ["null", "integer"] - }, - "participants_count": { - "type": ["null", "integer"] - }, - "tracking_fields": { - "items": { - "properties": { - "field": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_uuid": { + "type": "string" + }, + "custom_keys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "value": { + "type": "string" + } }, - "type": ["null", "array"] - }, - "dept": { - "type": ["null", "integer"] + "required": [] } + }, + "dept": { + "type": "string" + }, + "duration": { + "type": "number" + }, + "end_time": { + "type": "string" + }, + "id": { + "type": "number" + }, + "participants_count": { + "type": "number" + }, + "start_time": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "total_minutes": { + "type": "number" + }, + "tracking_fields": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [] + } + }, + "type": { + "type": "number" + }, + "user_email": { + "type": "string" + }, + "user_name": { + "type": "string" + }, + "uuid": { + "type": "string" } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json index b37c88bc69bc..8e2bdef40615 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/users.json @@ -1,86 +1,86 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", + "$schema": "http://json-schema.org/draft-06/schema#", "properties": { - "id": { - "type": ["string"] + "created_at": { + "type": "string" }, - "first_name": { - "type": ["null", "string"] + "custom_attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + ] + } }, - "last_name": { - "type": ["null", "string"] + "dept": { + "type": "string" }, "email": { - "type": ["null", "string"] + "type": "string" }, "employee_unique_id": { - "type": ["null", "string"] + "type": "string" }, - "type": { - "type": ["null", "integer"] + "first_name": { + "type": "string" }, - "plan_united_type": { - "type": ["null", "integer"] + "group_ids": { + "type": "array", + "items": { + "type": "string" + } }, - "status": { - "type": ["null", "string"] + "id": { + "type": "string" }, - "role_id": { - "type": ["null", "string"] + "im_group_ids": { + "type": "array", + "items": { + "type": "string" + } }, - "pmi": { - "type": ["null", "integer"] + "last_client_version": { + "type": "string" }, - "timezone": { - "type": ["null", "string"] + "last_login_time": { + "type": "string" }, - "dept": { - "type": ["null", "string"] + "last_name": { + "type": "string" }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] + "plan_united_type": { + "type": "string" }, - "last_login_time": { - "format": "date-time", - "type": ["null", "string"] + "pmi": { + "type": "number" }, - "last_client_version": { - "type": ["null", "string"] + "role_id": { + "type": "string" }, - "group_ids": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] + "status": { + "type": "string" }, - "im_group_ids": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] + "timezone": { + "type": "string" }, - "verified": { - "type": ["null", "integer"] + "type": { + "type": "number" }, - "custom_attributes": { - "items": { - "properties": { - "key": { - "type": ["null", "string"] - }, - "name": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] + "verified": { + "type": "number" } - } + }, + "required": [ + ] } diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json index 52a013787def..ced32756af1a 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_absentees.json @@ -1,85 +1,85 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["string"] - }, - "webinar_uuid": { - "type": ["string"] - }, - "email": { - "type": ["null", "string"] - }, - "first_name": { - "type": ["null", "string"] - }, - "last_name": { - "type": ["null", "string"] - }, - "address": { - "type": ["null", "string"] - }, - "city": { - "type": ["null", "string"] - }, - "county": { - "type": ["null", "string"] - }, - "zip": { - "type": ["null", "string"] - }, - "state": { - "type": ["null", "string"] - }, - "phone": { - "type": ["null", "string"] - }, - "industry": { - "type": ["null", "string"] - }, - "org": { - "type": ["null", "string"] - }, - "job_title": { - "type": ["null", "string"] - }, - "purchasing_time_frame": { - "type": ["null", "string"] - }, - "role_in_purchase_process": { - "type": ["null", "string"] - }, - "no_of_employees": { - "type": ["null", "string"] - }, - "comments": { - "type": ["null", "string"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_uuid": { + "type": "string" + }, + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "comments": { + "type": "string" + }, + "country": { + "type": "string" + }, + "custom_questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "value": { + "type": "string" + } }, - "type": ["null", "array"] - }, - "status": { - "type": ["null", "string"] - }, - "create_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] + "required": [] } + }, + "email": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "industry": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "no_of_employees": { + "type": "string" + }, + "org": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "purchasing_time_frame": { + "type": "string" + }, + "role_in_purchase_process": { + "type": "string" + }, + "state": { + "type": "string" + }, + "status": { + "type": "string" + }, + "zip": { + "type": "string" + }, + "create_time": { + "type": "string" + }, + "join_url": { + "type": "string" } - } + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json index 95f5e4999465..53801958fa0e 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_panelists.json @@ -1,22 +1,37 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "email": { - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": "number" + }, + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "join_url": { + "type": "string" + }, + "virtual_background_id": { + "type": "string" + }, + "name_tag_id": { + "type": "string" + }, + "name_tag_name": { + "type": "string" + }, + "name_tag_pronouns": { + "type": "string" + }, + "name_tag_description": { + "type": "string" } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json index 86efbfaa31aa..dbb102491ec1 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_poll_results.json @@ -1,31 +1,37 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "webinar_id": { - "type": ["string"] - }, - "email": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "question_details": { - "items": { - "properties": { - "question": { - "type": ["null", "string"] - }, - "answer": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_uuid": { + "type": "string" + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "question_details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "answer": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "date_time": { + "type": "string" + }, + "polling_id": { + "type": "string" + }, + "question": { + "type": "string" + } }, - "type": ["null", "array"] + "required": [] } } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json index 840773a4464f..35ed3e392162 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_polls.json @@ -1,40 +1,97 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "status": { - "type": ["null", "string"] - }, - "title": { - "type": ["null", "string"] - }, - "questions": { - "items": { - "properties": { - "name": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - }, - "answers": { - "items": { - "type": ["string"] + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "status": { + "type": "string" + }, + "anonymous": { + "type": "boolean" + }, + "poll_type": { + "type": "number" + }, + "questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "answer_max_character": { + "type": "number" + }, + "answer_min_character": { + "type": "number" + }, + "answer_required": { + "type": "boolean" + }, + "answers": { + "type": "array", + "items": { + "type": "string" + } + }, + "case_sensitive": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "prompts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "prompt_question": { + "type": "string" + }, + "prompt_right_answers": { + "type": "array", + "items": { + "type": "string" + } + } }, - "type": ["null", "array"] + "required": [] } }, - "type": ["object"], - "additionalProperties": false + "rating_max_label": { + "type": "string" + }, + "rating_max_value": { + "type": "number" + }, + "rating_min_label": { + "type": "string" + }, + "rating_min_value": { + "type": "number" + }, + "right_answers": { + "type": "array", + "items": { + "type": "string" + } + }, + "show_as_dropdown": { + "type": "boolean" + }, + "type": { + "type": "string" + } }, - "type": ["null", "array"] + "required": [] } + }, + "title": { + "type": "string" } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json index 86efbfaa31aa..361b24a5fc56 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_qna_results.json @@ -1,31 +1,31 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "webinar_id": { - "type": ["string"] - }, - "email": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "question_details": { - "items": { - "properties": { - "question": { - "type": ["null", "string"] - }, - "answer": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_uuid": { + "type": "string" + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "question_details": { + "type": "array", + "items": { + "type": "object", + "properties": { + "answer": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "question": { + "type": "string" + } }, - "type": ["null", "array"] + "required": [] } } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json index e452b9fa86fa..0b5a7cdaf6c2 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registrants.json @@ -1,85 +1,85 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "email": { - "type": ["null", "string"] - }, - "first_name": { - "type": ["null", "string"] - }, - "last_name": { - "type": ["null", "string"] - }, - "address": { - "type": ["null", "string"] - }, - "city": { - "type": ["null", "string"] - }, - "county": { - "type": ["null", "string"] - }, - "zip": { - "type": ["null", "string"] - }, - "state": { - "type": ["null", "string"] - }, - "phone": { - "type": ["null", "string"] - }, - "industry": { - "type": ["null", "string"] - }, - "org": { - "type": ["null", "string"] - }, - "job_title": { - "type": ["null", "string"] - }, - "purchasing_time_frame": { - "type": ["null", "string"] - }, - "role_in_purchase_process": { - "type": ["null", "string"] - }, - "no_of_employees": { - "type": ["null", "string"] - }, - "comments": { - "type": ["null", "string"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "comments": { + "type": "string" + }, + "country": { + "type": "string" + }, + "custom_questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "value": { + "type": "string" + } }, - "type": ["null", "array"] - }, - "status": { - "type": ["null", "string"] - }, - "create_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] + "required": [] } + }, + "email": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "industry": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "no_of_employees": { + "type": "string" + }, + "org": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "purchasing_time_frame": { + "type": "string" + }, + "role_in_purchase_process": { + "type": "string" + }, + "state": { + "type": "string" + }, + "status": { + "type": "string" + }, + "zip": { + "type": "string" + }, + "create_time": { + "type": "string" + }, + "join_url": { + "type": "string" } - } + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json index 0e1a41c9d178..46f0dad22ea0 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_registration_questions.json @@ -1,49 +1,49 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "webinar_id": { - "type": ["string"] - }, - "questions": { - "items": { - "properties": { - "field_name": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": "string" + }, + "custom_questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "answers": { + "type": "array", + "items": { + "type": "string" } }, - "type": ["object"], - "additionalProperties": false + "required": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + } }, - "type": ["null", "array"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] - }, - "answers": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - } + "required": [] + } + }, + "questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field_name": { + "type": "string" }, - "type": ["object"], - "additionalProperties": false + "required": { + "type": "boolean" + } }, - "type": ["null", "array"] + "required": [] } } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json index 69cbfab0cca5..b7cab1839c57 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinar_tracking_sources.json @@ -1,25 +1,25 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "source_name": { - "type": ["null", "string"] - }, - "tracking_url": { - "type": ["null", "string"] - }, - "registration_count": { - "type": ["null", "integer"] - }, - "visitor_count": { - "type": ["null", "integer"] - } + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "webinar_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "registration_count": { + "type": "number" + }, + "source_name": { + "type": "string" + }, + "tracking_url": { + "type": "string" + }, + "visitor_count": { + "type": "number" } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json index e7da2e3af730..850b0c16c0c9 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/webinars.json @@ -1,203 +1,322 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "uuid": { - "type": ["string"] - }, - "id": { - "type": ["string"] - }, - "host_id": { - "type": ["null", "string"] - }, - "topic": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "integer"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "timezone": { - "type": ["null", "string"] - }, - "agenda": { - "type": ["null", "string"] - }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "start_url": { - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "host_email": { + "type": "string" + }, + "host_id": { + "type": "string" + }, + "id": { + "type": "number" + }, + "uuid": { + "type": "string" + }, + "agenda": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "duration": { + "type": "number" + }, + "join_url": { + "type": "string" + }, + "occurrences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "duration": { + "type": "number" + }, + "occurrence_id": { + "type": "string" + }, + "start_time": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [] + } + }, + "password": { + "type": "string" + }, + "recurrence": { + "type": "object", + "properties": { + "end_date_time": { + "type": "string" + }, + "end_times": { + "type": "number" + }, + "monthly_day": { + "type": "number" + }, + "monthly_week": { + "type": "number" + }, + "monthly_week_day": { + "type": "number" + }, + "repeat_interval": { + "type": "number" + }, + "type": { + "type": "number" + }, + "weekly_days": { + "type": "string" + } }, - "tracking_fields": { - "items": { + "required": [] + }, + "settings": { + "type": "object", + "properties": { + "allow_multiple_devices": { + "type": "boolean" + }, + "alternative_hosts": { + "type": "string" + }, + "alternative_host_update_polls": { + "type": "boolean" + }, + "approval_type": { + "type": "number" + }, + "attendees_and_panelists_reminder_email_notification": { + "type": "object", "properties": { - "field": { - "type": ["null", "string"] + "enable": { + "type": "boolean" }, - "value": { - "type": ["null", "string"] + "type": { + "type": "number" } }, - "type": ["object"], - "additionalProperties": false + "required": [] }, - "type": ["null", "array"] - }, - "occurences": { - "items": { + "audio": { + "type": "string" + }, + "authentication_domains": { + "type": "string" + }, + "authentication_name": { + "type": "string" + }, + "authentication_option": { + "type": "string" + }, + "auto_recording": { + "type": "string" + }, + "close_registration": { + "type": "boolean" + }, + "contact_email": { + "type": "string" + }, + "contact_name": { + "type": "string" + }, + "email_language": { + "type": "string" + }, + "follow_up_absentees_email_notification": { + "type": "object", "properties": { - "occurence_id": { - "type": ["null", "string"] + "enable": { + "type": "boolean" }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "status": { - "type": ["null", "string"] + "type": { + "type": "number" } }, - "type": ["object"], - "additionalProperties": false + "required": [] }, - "type": ["null", "array"] - }, - "settings": { - "properties": { - "host_video": { - "type": ["null", "boolean"] - }, - "panelists_video": { - "type": ["null", "boolean"] - }, - "practice_session": { - "type": ["null", "boolean"] - }, - "hd_video": { - "type": ["null", "boolean"] - }, - "approval_type": { - "type": ["null", "integer"] - }, - "registration_type": { - "type": ["null", "integer"] - }, - "audio": { - "type": ["null", "string"] - }, - "auto_recording": { - "type": ["null", "string"] - }, - "enforce_login": { - "type": ["null", "boolean"] - }, - "enforce_login_domains": { - "type": ["null", "string"] - }, - "alternative_hosts": { - "type": ["null", "string"] - }, - "close_registration": { - "type": ["null", "boolean"] - }, - "show_share_button": { - "type": ["null", "boolean"] - }, - "allow_multiple_devices": { - "type": ["null", "boolean"] - }, - "on_demand": { - "type": ["null", "boolean"] - }, - "global_dial_in_countries": { - "items": { - "type": ["string"] + "follow_up_attendees_email_notification": { + "type": "object", + "properties": { + "enable": { + "type": "boolean" }, - "type": ["null", "array"] - }, - "contact_name": { - "type": ["null", "boolean"] - }, - "contact_email": { - "type": ["null", "boolean"] - }, - "registrants_confirmation_email": { - "type": ["null", "boolean"] - }, - "registrants_restrict_number": { - "type": ["null", "integer"] - }, - "notify_registrants": { - "type": ["null", "boolean"] - }, - "post_webinar_survey": { - "type": ["null", "boolean"] - }, - "survey_url": { - "type": ["null", "string"] - }, - "registrants_email_notification": { - "type": ["null", "boolean"] + "type": { + "type": "number" + } }, - "meeting_authentication": { - "type": ["null", "boolean"] + "required": [] + }, + "global_dial_in_countries": { + "type": "array", + "items": { + "type": "string" + } + }, + "hd_video": { + "type": "boolean" + }, + "hd_video_for_attendees": { + "type": "boolean" + }, + "host_video": { + "type": "boolean" + }, + "language_interpretation": { + "type": "object", + "properties": { + "enable": { + "type": "boolean" + }, + "interpreters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "languages": { + "type": "string" + } + }, + "required": [] + } + } }, - "authentication_option": { - "type": ["null", "string"] + "required": [] + }, + "panelist_authentication": { + "type": "boolean" + }, + "meeting_authentication": { + "type": "boolean" + }, + "add_watermark": { + "type": "boolean" + }, + "add_audio_watermark": { + "type": "boolean" + }, + "notify_registrants": { + "type": "boolean" + }, + "on_demand": { + "type": "boolean" + }, + "panelists_invitation_email_notification": { + "type": "boolean" + }, + "panelists_video": { + "type": "boolean" + }, + "post_webinar_survey": { + "type": "boolean" + }, + "practice_session": { + "type": "boolean" + }, + "question_and_answer": { + "type": "object", + "properties": { + "allow_anonymous_questions": { + "type": "boolean" + }, + "answer_questions": { + "type": "string" + }, + "attendees_can_comment": { + "type": "boolean" + }, + "attendees_can_upvote": { + "type": "boolean" + }, + "allow_auto_reply": { + "type": "boolean" + }, + "auto_reply_text": { + "type": "string" + }, + "enable": { + "type": "boolean" + } }, - "authentication_domains": { - "type": ["null", "string"] - } + "required": [] }, - "type": ["null", "object"], - "additionalProperties": false + "registrants_confirmation_email": { + "type": "boolean" + }, + "registrants_email_notification": { + "type": "boolean" + }, + "registrants_restrict_number": { + "type": "number" + }, + "registration_type": { + "type": "number" + }, + "send_1080p_video_to_attendees": { + "type": "boolean" + }, + "show_share_button": { + "type": "boolean" + }, + "survey_url": { + "type": "string" + }, + "enable_session_branding": { + "type": "boolean" + } }, - "recurrence": { + "required": [] + }, + "start_time": { + "type": "string" + }, + "start_url": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "tracking_fields": { + "type": "array", + "items": { + "type": "object", "properties": { - "type": { - "type": ["null", "integer"] - }, - "repeat_interval": { - "type": ["null", "integer"] - }, - "weekly_days": { - "type": ["null", "integer"] - }, - "monthly_day": { - "type": ["null", "integer"] - }, - "monthly_week": { - "type": ["null", "integer"] - }, - "monthly_week_day": { - "type": ["null", "integer"] - }, - "end_times": { - "type": ["null", "integer"] + "field": { + "type": "string" }, - "end_date_time": { - "format": "date-time", - "type": ["null", "string"] + "value": { + "type": "string" } }, - "type": ["null", "object"], - "additionalProperties": false + "required": [] } + }, + "type": { + "type": "number" + }, + "is_simulive": { + "type": "boolean" + }, + "record_file_id": { + "type": "string" } - } - \ No newline at end of file + }, + "required": [] +} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml index f66f85a2c9a8..77fae4e527d3 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml @@ -33,7 +33,6 @@ definitions: file_path: "./source_zoom/schemas/{{ options['name'] }}.json" - # https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/users users_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" @@ -121,11 +120,10 @@ definitions: path: "/meetings/{{ stream_slice.parent_id }}/registrants" error_handler: type: CompositeErrorHandler - # ignore 400 error; We get this error if registration is not enabled for the meeting error_handlers: - type: DefaultErrorHandler response_filters: - # - http_codes: [400] + # Meeting {meetingId} is not found or has expired. This meeting has not set registration as required: {meetingId}. - predicate: "{{ response.code == 300 }}" action: IGNORE - type: DefaultErrorHandler # we're adding this DefaultErrorHandler for 429, 5XX errors etc; @@ -161,11 +159,11 @@ definitions: path: "/meetings/{{ stream_slice.parent_id }}/polls" error_handler: type: CompositeErrorHandler - # ignore 400 error; We get this error if Meeting poll is not enabled for the meeting + # ignore 400 error; We get this error if Meeting poll is not enabled for the meeting, or scheduling capabilities aren't in the account error_handlers: - type: DefaultErrorHandler response_filters: - - http_codes: [400] # TODO: fix this error + - http_codes: [400] action: IGNORE - type: DefaultErrorHandler stream_slicer: @@ -186,7 +184,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "meeting_poll_results" - primary_key: "meeting_id" retriever: paginator: type: NoPagination @@ -203,19 +200,21 @@ definitions: error_handlers: - type: DefaultErrorHandler response_filters: - - http_codes: [400, 404] # code 3001 gives HTTP 404 + # 400 error is thrown for meetings created an year ago + # 404 error is thrown if the meeting has not enabled polls (from observation, not written in docs) + - http_codes: [400,404] action: IGNORE - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - stream: "*ref(definitions.meetings_list_tmp_stream)" - parent_key: "id" + parent_key: "uuid" stream_slice_field: "parent_id" transformations: - type: AddFields fields: - - path: ["meeting_id"] + - path: ["meeting_uuid"] value: "{{ stream_slice.parent_id }}" @@ -224,7 +223,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "meeting_registration_questions" - primary_key: "id" retriever: paginator: type: NoPagination @@ -238,10 +236,10 @@ definitions: path: "/meetings/{{ stream_slice.parent_id }}/registrants/questions" error_handler: type: CompositeErrorHandler - # ignore 400 error; We get this error if Meeting is more than created an year ago error_handlers: - type: DefaultErrorHandler response_filters: + # ignore 400 error; We get this error if Bad Request or Meeting hosting and scheduling capabilities are not allowed for your user account. - http_codes: [400] action: IGNORE - type: DefaultErrorHandler @@ -314,7 +312,8 @@ definitions: error_handlers: - type: DefaultErrorHandler response_filters: - # TODO: WHen parent stream throws error; then ideally we should have an empty array, and no /webinars/{id} should be called. But somehow we're calling it right now with None. :( + # When parent stream throws error; then ideally we should have an empty array, and no /webinars/{id} should be called. But somehow we're calling it right now with None. :( + # More context: https://github.com/airbytehq/airbyte/issues/18046 - http_codes: [400,404] action: IGNORE - type: DefaultErrorHandler @@ -330,7 +329,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "webinar_panelists" - primary_key: "id" retriever: paginator: type: NoPagination @@ -348,14 +346,14 @@ definitions: error_handlers: - type: DefaultErrorHandler response_filters: - # TODO: Same problem as webinars_stream for 404! 400 is okay. :) + # Same problem as "webinars_stream" for 404! and we get 400 error if the account isn't PRO. - http_codes: [400,404] action: IGNORE - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" + - stream: "*ref(definitions.webinars_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -370,7 +368,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "webinar_registrants" - primary_key: "id" retriever: paginator: $ref: "*ref(definitions.zoom_paginator)" @@ -388,14 +385,14 @@ definitions: error_handlers: - type: DefaultErrorHandler response_filters: - # TODO: Same problem as webinars_stream for 404! 400 is okay. :) + # Same problem as "webinars_stream" for 404! 400 is for non PRO accounts. - http_codes: [400,404] action: IGNORE - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" + - stream: "*ref(definitions.webinars_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -428,14 +425,14 @@ definitions: error_handlers: - type: DefaultErrorHandler response_filters: - # TODO: Same problem as webinars_stream for 404! 400 is okay. :) + # Same problem as "webinars_stream" for 404! 400 is for non PRO accounts. - http_codes: [400,404] action: IGNORE - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" + - stream: "*ref(definitions.webinars_list_tmp_stream)" parent_key: "uuid" stream_slice_field: "parent_uuid" transformations: @@ -450,7 +447,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "webinar_polls" - primary_key: "id" retriever: paginator: type: NoPagination @@ -464,17 +460,18 @@ definitions: path: "/webinars/{{ stream_slice.parent_id }}/polls" error_handler: type: CompositeErrorHandler - # ignore 400 error; We get this error if Meeting poll is not enabled for the meeting + # ignore 400 error; We get this error if Webinar poll is disabled error_handlers: - type: DefaultErrorHandler response_filters: - - http_codes: [400] # TODO: fix this error + # Same problem as "webinars_stream" for 404! 400 is for non PRO accounts. + - http_codes: [400,404] action: IGNORE - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" + - stream: "*ref(definitions.webinars_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -490,7 +487,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "webinar_poll_results" - primary_key: "id" retriever: paginator: type: NoPagination @@ -507,19 +503,19 @@ definitions: error_handlers: - type: DefaultErrorHandler response_filters: - - http_codes: [400, 404] # code 3001 gives HTTP 404 + - http_codes: [404] action: IGNORE - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" - parent_key: "id" + - stream: "*ref(definitions.webinars_list_tmp_stream)" + parent_key: "uuid" stream_slice_field: "parent_id" transformations: - type: AddFields fields: - - path: ["webinar_id"] + - path: ["webinar_uuid"] value: "{{ stream_slice.parent_id }}" @@ -528,7 +524,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "webinar_registration_questions" - primary_key: "id" retriever: paginator: type: NoPagination @@ -542,17 +537,17 @@ definitions: path: "/webinars/{{ stream_slice.parent_id }}/registrants/questions" error_handler: type: CompositeErrorHandler - # ignore 400 error; We get this error if Meeting is more than created an year ago error_handlers: - type: DefaultErrorHandler response_filters: - - http_codes: [400] + # the docs says 404 code, but that's incorrect (from observation); + - http_codes: [400] action: IGNORE - type: DefaultErrorHandler stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" + - stream: "*ref(definitions.webinars_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -591,7 +586,7 @@ definitions: stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" + - stream: "*ref(definitions.webinars_list_tmp_stream)" parent_key: "id" stream_slice_field: "parent_id" transformations: @@ -606,7 +601,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "webinar_qna_results" - primary_key: "id" retriever: paginator: type: NoPagination @@ -629,19 +623,18 @@ definitions: stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" - parent_key: "id" + - stream: "*ref(definitions.webinars_list_tmp_stream)" + parent_key: "uuid" stream_slice_field: "parent_id" transformations: - type: AddFields fields: - - path: ["webinar_id"] + - path: ["webinar_uuid"] value: "{{ stream_slice.parent_id }}" - - report_meetings_list_tmp_stream: + report_meetings_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" $options: @@ -670,17 +663,18 @@ definitions: type: SubstreamSlicer parent_stream_configs: - stream: "*ref(definitions.meetings_list_tmp_stream)" - parent_key: "id" + parent_key: "uuid" stream_slice_field: "parent_id" transformations: - type: AddFields fields: - - path: ["meeting_id"] + - path: ["meeting_uuid"] value: "{{ stream_slice.parent_id }}" + report_meeting_participants_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" @@ -710,24 +704,20 @@ definitions: type: SubstreamSlicer parent_stream_configs: - stream: "*ref(definitions.meetings_list_tmp_stream)" - parent_key: "id" + parent_key: "uuid" stream_slice_field: "parent_id" transformations: - type: AddFields fields: - - path: ["meeting_id"] + - path: ["meeting_uuid"] value: "{{ stream_slice.parent_id }}" - - - report_webinars_stream: schema_loader: $ref: "*ref(definitions.schema_loader)" $options: name: "report_webinars" - primary_key: "id" retriever: paginator: type: NoPagination @@ -750,13 +740,13 @@ definitions: stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" - parent_key: "id" + - stream: "*ref(definitions.webinars_list_tmp_stream)" + parent_key: "uuid" stream_slice_field: "parent_id" transformations: - type: AddFields fields: - - path: ["webinar_id"] + - path: ["webinar_uuid"] value: "{{ stream_slice.parent_id }}" @@ -766,7 +756,6 @@ definitions: $ref: "*ref(definitions.schema_loader)" $options: name: "report_webinar_participants" - primary_key: "id" retriever: paginator: $ref: "*ref(definitions.zoom_paginator)" @@ -789,21 +778,18 @@ definitions: stream_slicer: type: SubstreamSlicer parent_stream_configs: - - stream: "*ref(definitions.webinars_stream)" - parent_key: "id" + - stream: "*ref(definitions.webinars_list_tmp_stream)" + parent_key: "uuid" stream_slice_field: "parent_id" transformations: - type: AddFields fields: - - path: ["webinar_id"] + - path: ["webinar_uuid"] value: "{{ stream_slice.parent_id }}" - - streams: - "*ref(definitions.users_stream)" - # - "*ref(definitions.meetings_list_tmp_stream)" - "*ref(definitions.meetings_stream)" - "*ref(definitions.meeting_registrants_stream)" - "*ref(definitions.meeting_polls_stream)" @@ -818,20 +804,12 @@ streams: - "*ref(definitions.webinar_registration_questions_stream)" - "*ref(definitions.webinar_tracking_sources_stream)" - "*ref(definitions.webinar_qna_results_stream)" - - "*ref(definitions.report_meetings_list_tmp_stream)" + - "*ref(definitions.report_meetings_stream)" - "*ref(definitions.report_meeting_participants_stream)" - "*ref(definitions.report_webinars_stream)" - "*ref(definitions.report_webinar_participants_stream)" - - - - - - - - check: stream_names: - "users" From 290996cc2e8f923b07bd7c96f4b6321b59e54058 Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Thu, 20 Oct 2022 00:18:10 +0530 Subject: [PATCH 05/15] docs: add the new zoom connector built with low-code CDK --- docs/integrations/README.md | 1 + docs/integrations/sources/zoom-lc-cdk.md | 61 ++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 docs/integrations/sources/zoom-lc-cdk.md diff --git a/docs/integrations/README.md b/docs/integrations/README.md index a331bcce19aa..c15d3b94314d 100644 --- a/docs/integrations/README.md +++ b/docs/integrations/README.md @@ -179,6 +179,7 @@ For more information about the grading system, see [Product Release Stages](http | [Zenloop](sources/zenloop.md) | Alpha | Yes | | [Zoho CRM](sources/zoho-crm.md) | Alpha | No | | [Zoom](sources/zoom.md) | Alpha | No | +| [Zoom low-code CDK](sources/zoom-lc-cdk.md) | Alpha | No | | [Zuora](sources/zuora.md) | Alpha | Yes | ## Destinations diff --git a/docs/integrations/sources/zoom-lc-cdk.md b/docs/integrations/sources/zoom-lc-cdk.md new file mode 100644 index 000000000000..861dc20ade09 --- /dev/null +++ b/docs/integrations/sources/zoom-lc-cdk.md @@ -0,0 +1,61 @@ +# Zoom + +## Overview + + +The following connector allows airbyte users to fetch various meetings & webinar data points from the [Zoom](https://zoom.us) source. This connector is built entirely using the [low-code CDK](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview/). + +Please note that currently, it only supports Full Refresh syncs. That is, every time a sync is run, Airbyte will copy all rows in the tables and columns you set up for replication into the destination in a new table. + +### Output schema + +Currently this source supports the following output streams/endpoints from Zoom: + +* [Users](https://marketplace.zoom.us/docs/api-reference/zoom-api/users/users) +* [Meetings](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetings) + * [Meeting Registrants](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrants) + * [Meeting Polls](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingpolls) + * [Meeting Poll Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/listpastmeetingpolls) + * [Meeting Questions](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrantsquestionsget) +* [Webinars](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinars) + * [Webinar Panelists](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarpanelists) + * [Webinar Registrants](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrants) + * [Webinar Absentees](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarabsentees) + * [Webinar Polls](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarpolls) + * [Webinar Poll Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/listpastwebinarpollresults) + * [Webinar Questions](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrantsquestionsget) + * [Webinar Tracking Sources](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/gettrackingsources) + * [Webinar Q&A Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/listpastwebinarqa) +* [Report Meetings](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportmeetingdetails) +* [Report Meeting Participants](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportmeetingparticipants) +* [Report Webinars](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportwebinardetails) +* [Report Webinar Participants](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportwebinarparticipants) + +If there are more endpoints you'd like Airbyte to support, please [create an issue.](https://github.com/airbytehq/airbyte/issues/new/choose) + +### Features + +| Feature | Supported? | +| :--- | :--- | +| Full Refresh Sync | Yes | +| Incremental Sync | Coming soon | +| Replicate Incremental Deletes | Coming soon | +| SSL connection | Yes | +| Namespaces | No | + +### Performance considerations + +Most of the endpoints this connector access is restricted by standard Zoom [requests limitation](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limit-changes), with a few exceptions. For more info, please check zoom API documentation. We’ve added appropriate retries if we hit the rate-limiting threshold. + +Please [create an issue](https://github.com/airbytehq/airbyte/issues) if you see any rate limit issues that are not automatically retried successfully. + +## Getting started + +### Requirements + +* Zoom JWT Token + +### Setup guide + +Please read [How to generate your JWT Token](https://marketplace.zoom.us/docs/guides/build/jwt-app). + From a6b094aad4f22d8daacee6a898558804f566a282 Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Thu, 20 Oct 2022 05:56:29 +0000 Subject: [PATCH 06/15] chore: remove unnecessary files, and rename connector in definitions --- .../integration_tests/catalog.json | 39 ------------------- .../source-zoom/source_zoom/schemas/TODO.md | 16 -------- 2 files changed, 55 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json delete mode 100644 airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md diff --git a/airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json b/airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json deleted file mode 100644 index 6799946a6851..000000000000 --- a/airbyte-integrations/connectors/source-zoom/integration_tests/catalog.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "streams": [ - { - "name": "TODO fix this file", - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": "column1", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "column1": { - "type": "string" - }, - "column2": { - "type": "number" - } - } - } - }, - { - "name": "table1", - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": false, - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "column1": { - "type": "string" - }, - "column2": { - "type": "number" - } - } - } - } - ] -} diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md b/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md deleted file mode 100644 index b8e010c372e7..000000000000 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/schemas/TODO.md +++ /dev/null @@ -1,16 +0,0 @@ -# TODO: Define your stream schemas -Your connector must describe the schema of each stream it can output using [JSONSchema](https://json-schema.org). - -You can describe the schema of your streams using one `.json` file per stream. - -## Static schemas -From the `zoom.yaml` configuration file, you read the `.json` files in the `schemas/` directory. You can refer to a schema in your configuration file using the `schema_loader` component's `file_path` field. For example: -``` -schema_loader: - type: JsonSchema - file_path: "./source_zoom/schemas/customers.json" -``` -Every stream specified in the configuration file should have a corresponding `.json` schema file. - -Delete this file once you're done. Or don't. Up to you :) - From b0a45ffece1569a600cf4cf9c4f7c80cd068b38c Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Thu, 20 Oct 2022 05:58:21 +0000 Subject: [PATCH 07/15] =?UTF-8?q?fix:=20forgot=20to=20add=20source=5Fdefin?= =?UTF-8?q?itions.yaml=20earlier=20=F0=9F=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../init/src/main/resources/seed/source_definitions.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 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 a2f5c48c54e9..1aba20eeaa34 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -1264,10 +1264,10 @@ documentationUrl: https://docs.airbyte.com/integrations/sources/yandex-metrica sourceType: api releaseStage: alpha -- name: ZoomHello +- name: Zoom sourceDefinitionId: cbfd9856-1322-44fb-bcf1-0b39b7a8e92e dockerRepository: airbyte/source-zoom dockerImageTag: 0.1.0 - documentationUrl: https://docs.airbyte.io/integrations/sources/yandex-metrica + documentationUrl: https://docs.airbyte.io/integrations/sources/zoom-lc-cdk sourceType: api releaseStage: alpha From f266ae36403c724cb509a4c7b243600002d93099 Mon Sep 17 00:00:00 2001 From: marcosmarxm Date: Fri, 21 Oct 2022 17:20:24 -0300 Subject: [PATCH 08/15] remove some empty streams --- .../connectors/source-zoom/acceptance-test-config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml index 4b4aa8c6f734..23948f4f26d1 100644 --- a/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-zoom/acceptance-test-config.yml @@ -14,9 +14,8 @@ tests: basic_read: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" + timeout_seconds: 3600 empty_streams: - - "users" - - "meetings" - "meeting_registrants" - "meeting_polls" - "meeting_poll_results" @@ -42,3 +41,4 @@ tests: - "start_url" "webinars": - "start_url" + timeout_seconds: 3600 From 8b2580542b56a51111dcf6768ce098a35bc4d100 Mon Sep 17 00:00:00 2001 From: marcosmarxm Date: Fri, 21 Oct 2022 17:21:39 -0300 Subject: [PATCH 09/15] add eof --- airbyte-integrations/connectors/source-zoom/.dockerignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-zoom/.dockerignore b/airbyte-integrations/connectors/source-zoom/.dockerignore index 5837f55a1c80..0804d05bd68e 100644 --- a/airbyte-integrations/connectors/source-zoom/.dockerignore +++ b/airbyte-integrations/connectors/source-zoom/.dockerignore @@ -3,4 +3,4 @@ !main.py !source_zoom !setup.py -!secrets \ No newline at end of file +!secrets From 36d0d868ec498e9172068ac8dd402ca5f88138cd Mon Sep 17 00:00:00 2001 From: marcosmarxm Date: Fri, 21 Oct 2022 17:25:10 -0300 Subject: [PATCH 10/15] correct spec yaml --- .../connectors/source-zoom/source_zoom/spec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml b/airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml index a6919ababc94..a8170e08c3b7 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/spec.yaml @@ -1,4 +1,4 @@ -documentationUrl: https://docsurl.com +documentationUrl: https://docs.airbyte.com/integrations/sources/zoom connectionSpecification: $schema: http://json-schema.org/draft-07/schema# title: Zoom Spec @@ -10,4 +10,4 @@ connectionSpecification: jwt_token: type: string description: JWT Token - airbyte_secret: true \ No newline at end of file + airbyte_secret: true From 5e88d4d044a6b9961bae7ee982a52e0d3b6817a6 Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Sat, 22 Oct 2022 07:03:47 +0000 Subject: [PATCH 11/15] docs: update docs/integrations and replace zoom with low code CDK zoom --- docs/integrations/README.md | 1 - docs/integrations/sources/zoom-lc-cdk.md | 61 ------------------------ docs/integrations/sources/zoom.md | 17 +++---- 3 files changed, 6 insertions(+), 73 deletions(-) delete mode 100644 docs/integrations/sources/zoom-lc-cdk.md diff --git a/docs/integrations/README.md b/docs/integrations/README.md index 54230b540992..c8c1d3f21fe6 100644 --- a/docs/integrations/README.md +++ b/docs/integrations/README.md @@ -180,7 +180,6 @@ For more information about the grading system, see [Product Release Stages](http | [Zenloop](sources/zenloop.md) | Alpha | Yes | | [Zoho CRM](sources/zoho-crm.md) | Alpha | No | | [Zoom](sources/zoom.md) | Alpha | No | -| [Zoom low-code CDK](sources/zoom-lc-cdk.md) | Alpha | No | | [Zuora](sources/zuora.md) | Alpha | Yes | ## Destinations diff --git a/docs/integrations/sources/zoom-lc-cdk.md b/docs/integrations/sources/zoom-lc-cdk.md deleted file mode 100644 index 861dc20ade09..000000000000 --- a/docs/integrations/sources/zoom-lc-cdk.md +++ /dev/null @@ -1,61 +0,0 @@ -# Zoom - -## Overview - - -The following connector allows airbyte users to fetch various meetings & webinar data points from the [Zoom](https://zoom.us) source. This connector is built entirely using the [low-code CDK](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview/). - -Please note that currently, it only supports Full Refresh syncs. That is, every time a sync is run, Airbyte will copy all rows in the tables and columns you set up for replication into the destination in a new table. - -### Output schema - -Currently this source supports the following output streams/endpoints from Zoom: - -* [Users](https://marketplace.zoom.us/docs/api-reference/zoom-api/users/users) -* [Meetings](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetings) - * [Meeting Registrants](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrants) - * [Meeting Polls](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingpolls) - * [Meeting Poll Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/listpastmeetingpolls) - * [Meeting Questions](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrantsquestionsget) -* [Webinars](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinars) - * [Webinar Panelists](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarpanelists) - * [Webinar Registrants](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrants) - * [Webinar Absentees](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarabsentees) - * [Webinar Polls](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarpolls) - * [Webinar Poll Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/listpastwebinarpollresults) - * [Webinar Questions](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrantsquestionsget) - * [Webinar Tracking Sources](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/gettrackingsources) - * [Webinar Q&A Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/listpastwebinarqa) -* [Report Meetings](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportmeetingdetails) -* [Report Meeting Participants](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportmeetingparticipants) -* [Report Webinars](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportwebinardetails) -* [Report Webinar Participants](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportwebinarparticipants) - -If there are more endpoints you'd like Airbyte to support, please [create an issue.](https://github.com/airbytehq/airbyte/issues/new/choose) - -### Features - -| Feature | Supported? | -| :--- | :--- | -| Full Refresh Sync | Yes | -| Incremental Sync | Coming soon | -| Replicate Incremental Deletes | Coming soon | -| SSL connection | Yes | -| Namespaces | No | - -### Performance considerations - -Most of the endpoints this connector access is restricted by standard Zoom [requests limitation](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limit-changes), with a few exceptions. For more info, please check zoom API documentation. We’ve added appropriate retries if we hit the rate-limiting threshold. - -Please [create an issue](https://github.com/airbytehq/airbyte/issues) if you see any rate limit issues that are not automatically retried successfully. - -## Getting started - -### Requirements - -* Zoom JWT Token - -### Setup guide - -Please read [How to generate your JWT Token](https://marketplace.zoom.us/docs/guides/build/jwt-app). - diff --git a/docs/integrations/sources/zoom.md b/docs/integrations/sources/zoom.md index 59f8fbcc25dc..861dc20ade09 100644 --- a/docs/integrations/sources/zoom.md +++ b/docs/integrations/sources/zoom.md @@ -2,13 +2,14 @@ ## Overview -The Zoom source supports Full Refresh syncs. That is, every time a sync is run, Airbyte will copy all rows in the tables and columns you set up for replication into the destination in a new table. -This Zoom source wraps the [Singer Zoom Tap](https://github.com/singer-io/tap-zoom). +The following connector allows airbyte users to fetch various meetings & webinar data points from the [Zoom](https://zoom.us) source. This connector is built entirely using the [low-code CDK](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview/). + +Please note that currently, it only supports Full Refresh syncs. That is, every time a sync is run, Airbyte will copy all rows in the tables and columns you set up for replication into the destination in a new table. ### Output schema -Several output streams are available from this source: +Currently this source supports the following output streams/endpoints from Zoom: * [Users](https://marketplace.zoom.us/docs/api-reference/zoom-api/users/users) * [Meetings](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetings) @@ -16,7 +17,6 @@ Several output streams are available from this source: * [Meeting Polls](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingpolls) * [Meeting Poll Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/listpastmeetingpolls) * [Meeting Questions](https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingregistrantsquestionsget) - * [Meeting Files](https://marketplace.zoom.us/docs/api-reference/zoom-api/deprecated-api-endpoints/listpastmeetingfiles) * [Webinars](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinars) * [Webinar Panelists](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarpanelists) * [Webinar Registrants](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrants) @@ -26,7 +26,6 @@ Several output streams are available from this source: * [Webinar Questions](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrantsquestionsget) * [Webinar Tracking Sources](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/gettrackingsources) * [Webinar Q&A Results](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/listpastwebinarqa) - * [Webinar Files](https://marketplace.zoom.us/docs/api-reference/zoom-api/deprecated-api-endpoints/listpastwebinarfiles) * [Report Meetings](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportmeetingdetails) * [Report Meeting Participants](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportmeetingparticipants) * [Report Webinars](https://marketplace.zoom.us/docs/api-reference/zoom-api/reports/reportwebinardetails) @@ -46,9 +45,9 @@ If there are more endpoints you'd like Airbyte to support, please [create an iss ### Performance considerations -The connector is restricted by normal Zoom [requests limitation](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limit-changes). +Most of the endpoints this connector access is restricted by standard Zoom [requests limitation](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limit-changes), with a few exceptions. For more info, please check zoom API documentation. We’ve added appropriate retries if we hit the rate-limiting threshold. -The Zoom connector should not run into Zoom API limitations under normal usage. Please [create an issue](https://github.com/airbytehq/airbyte/issues) if you see any rate limit issues that are not automatically retried successfully. +Please [create an issue](https://github.com/airbytehq/airbyte/issues) if you see any rate limit issues that are not automatically retried successfully. ## Getting started @@ -60,7 +59,3 @@ The Zoom connector should not run into Zoom API limitations under normal usage. Please read [How to generate your JWT Token](https://marketplace.zoom.us/docs/guides/build/jwt-app). -| Version | Date | Pull Request | Subject | -| :--- | :--- | :--- | :--- | -| 0.2.4 | 2021-07-06 | [4539](https://github.com/airbytehq/airbyte/pull/4539) | Add `AIRBYTE_ENTRYPOINT` for Kubernetes support | - From 3ec2b6eecd470b8803e1de1734d914f2d6d0bc2c Mon Sep 17 00:00:00 2001 From: Subham Sahu Date: Mon, 24 Oct 2022 19:44:32 +0000 Subject: [PATCH 12/15] fix: definition generation err --- .../src/main/resources/seed/source_specs.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 180f109f593a..083e030f894a 100644 --- a/airbyte-config/init/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_specs.yaml @@ -12814,3 +12814,21 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] +- dockerImage: "airbyte/source-zoom:0.1.0" + spec: + documentationUrl: "https://docs.airbyte.com/integrations/sources/zoom" + connectionSpecification: + $schema: "http://json-schema.org/draft-07/schema#" + title: "Zoom Spec" + type: "object" + required: + - "jwt_token" + additionalProperties: true + properties: + jwt_token: + type: "string" + description: "JWT Token" + airbyte_secret: true + supportsNormalization: false + supportsDBT: false + supported_destination_sync_modes: [] From 1052662bdf2c7341da1ec457793280216e87b598 Mon Sep 17 00:00:00 2001 From: marcosmarxm Date: Tue, 25 Oct 2022 14:08:28 -0300 Subject: [PATCH 13/15] udpate seed file and remove zoom-singer --- .../resources/seed/source_definitions.yaml | 2 +- .../source-zoom-singer/.dockerignore | 3 - .../connectors/source-zoom-singer/.gitignore | 1 - .../connectors/source-zoom-singer/Dockerfile | 40 - .../connectors/source-zoom-singer/README.md | 113 -- .../source-zoom-singer/build.gradle | 21 - .../connectors/source-zoom-singer/main.py | 13 - .../source-zoom-singer/requirements.txt | 2 - .../sample_files/configured_catalog.json | 71 - .../sample_files/full_configured_catalog.json | 1462 ----------------- .../sample_files/sample_config.json | 3 - .../connectors/source-zoom-singer/setup.py | 16 - .../source_zoom_singer/__init__.py | 3 - .../source_zoom_singer/source.py | 24 - .../source_zoom_singer/spec.json | 18 - .../unit_tests/unit_test.py | 7 - 16 files changed, 1 insertion(+), 1798 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/.dockerignore delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/.gitignore delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/Dockerfile delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/README.md delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/build.gradle delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/main.py delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/requirements.txt delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/sample_files/configured_catalog.json delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/sample_files/full_configured_catalog.json delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/sample_files/sample_config.json delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/setup.py delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/__init__.py delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/source.py delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/spec.json delete mode 100644 airbyte-integrations/connectors/source-zoom-singer/unit_tests/unit_test.py 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 3d0e44fd61cf..0a84eba0ab25 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -1243,7 +1243,7 @@ releaseStage: generally_available - name: Zoom sourceDefinitionId: aea2fd0d-377d-465e-86c0-4fdc4f688e51 - dockerRepository: airbyte/source-zoom-singer + dockerRepository: airbyte/source-zoom dockerImageTag: 0.2.4 documentationUrl: https://docs.airbyte.com/integrations/sources/zoom icon: zoom.svg diff --git a/airbyte-integrations/connectors/source-zoom-singer/.dockerignore b/airbyte-integrations/connectors/source-zoom-singer/.dockerignore deleted file mode 100644 index 540fc080488d..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -build -.venv - diff --git a/airbyte-integrations/connectors/source-zoom-singer/.gitignore b/airbyte-integrations/connectors/source-zoom-singer/.gitignore deleted file mode 100644 index 29fffc6a50cc..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/.gitignore +++ /dev/null @@ -1 +0,0 @@ -NEW_SOURCE_CHECKLIST.md diff --git a/airbyte-integrations/connectors/source-zoom-singer/Dockerfile b/airbyte-integrations/connectors/source-zoom-singer/Dockerfile deleted file mode 100644 index 3b56601b682c..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/Dockerfile +++ /dev/null @@ -1,40 +0,0 @@ -FROM python:3.9.11-alpine3.15 as base - -# build and load all requirements -FROM base as builder -WORKDIR /airbyte/integration_code - -# upgrade pip to the latest version -RUN apk --no-cache upgrade \ - && pip install --upgrade pip \ - && apk --no-cache add tzdata \ - && apk --no-cache add git \ - && apk --no-cache add build-base - - -COPY setup.py ./ -# install necessary packages to a temporary folder -RUN pip install --prefix=/install . - -# build a clean environment -FROM base -WORKDIR /airbyte/integration_code - -# copy all loaded and built libraries to a pure basic image -COPY --from=builder /install /usr/local -# add default timezone settings -COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime -RUN echo "Etc/UTC" > /etc/timezone - -# bash is installed for more convenient debugging. -RUN apk --no-cache add bash - -# copy payload code only -COPY main.py ./ -COPY source_zoom_singer ./source_zoom_singer - -ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" -ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] - -LABEL io.airbyte.version=0.2.4 -LABEL io.airbyte.name=airbyte/source-zoom-singer diff --git a/airbyte-integrations/connectors/source-zoom-singer/README.md b/airbyte-integrations/connectors/source-zoom-singer/README.md deleted file mode 100644 index 0177fc2c5f6c..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/README.md +++ /dev/null @@ -1,113 +0,0 @@ -# Source Zoom Singer - -This is the repository for the Zoom source connector, based on a Singer tap. -For information about how to use this connector within Airbyte, see [the User Documentation](https://docs.airbyte.io/integrations/sources/zoom). - -## Local development - -### Prerequisites -**To iterate on this connector, make sure to complete this prerequisites section.** - -#### Minimum Python version required `= 3.7.0` - -#### Build & Activate Virtual Environment and install dependencies -From this connector directory, create a virtual environment: -``` -python -m venv .venv -``` - -This will generate a virtualenv for this module in `.venv/`. Make sure this venv is active in your -development environment of choice. To activate it from the terminal, run: -``` -source .venv/bin/activate -pip install -r requirements.txt -``` -If you are in an IDE, follow your IDE's instructions to activate the virtualenv. - -Note that while we are installing dependencies from `requirements.txt`, you should only edit `setup.py` for your dependencies. `requirements.txt` is -used for editable installs (`pip install -e`) to pull in Python dependencies from the monorepo and will call `setup.py`. -If this is mumbo jumbo to you, don't worry about it, just put your deps in `setup.py` but install using `pip install -r requirements.txt` and everything -should work as you expect. - -#### Building via Gradle -From the Airbyte repository root, run: -``` -./gradlew :airbyte-integrations:connectors:source-zoom:build -``` - -#### Create credentials -**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/zoom) -to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_zoom_singer/spec.json` file. -Note that the `secrets` directory is gitignored by default, so there is no danger of accidentally checking in sensitive information. -See `sample_files/sample_config.json` for a sample config file. - -**If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source zoom test creds` -and place them into `secrets/config.json`. - -### Locally running the connector -``` -python main_dev.py spec -python main_dev.py check --config secrets/config.json -python main_dev.py discover --config secrets/config.json -python main_dev.py read --config secrets/config.json --catalog sample_files/configured_catalog.json -``` - -### Unit Tests -To run unit tests locally, from the connector root run: -``` -pytest unit_tests -``` - -### Locally running the connector -``` -python main_dev.py spec -python main_dev.py check --config secrets/config.json -python main_dev.py discover --config secrets/config.json -python main_dev.py read --config secrets/config.json --catalog sample_files/configured_catalog.json -``` - -### Unit Tests -To run unit tests locally, from the connector directory run: -``` -python -m pytest unit_tests -``` - -### Locally running the connector docker image - -#### Build -First, make sure you build the latest Docker image: -``` -docker build . -t airbyte/source-zoom-singer:dev -``` - -You can also build the connector image via Gradle: -``` -./gradlew :airbyte-integrations:connectors:source-zoom:airbyteDocker -``` -When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in -the Dockerfile. - -#### Run -Then run any of the connector commands as follows: -``` -docker run --rm airbyte/source-zoom-singer:dev spec -docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-zoom-singer:dev check --config /secrets/config.json -docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-zoom-singer:dev discover --config /secrets/config.json -docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/sample_files:/sample_files airbyte/source-zoom-singer:dev read --config /secrets/config.json --catalog /sample_files/configured_catalog.json -``` - -### Integration Tests -1. From the airbyte project root, run `./gradlew :airbyte-integrations:connectors:source-zoom-singer:integrationTest` to run the standard integration test suite. -1. To run additional integration tests, create a directory `integration_tests` which contain your tests and run them with `pytest integration_tests`. - Make sure to familiarize yourself with [pytest test discovery](https://docs.pytest.org/en/latest/goodpractices.html#test-discovery) to know how your test files and methods should be named. - -## Dependency Management -All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. - -### Publishing a new version of the connector -You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? -1. Make sure your changes are passing unit and integration tests -1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use SemVer). -1. Create a Pull Request -1. Pat yourself on the back for being an awesome contributor -1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master diff --git a/airbyte-integrations/connectors/source-zoom-singer/build.gradle b/airbyte-integrations/connectors/source-zoom-singer/build.gradle deleted file mode 100644 index 408979685851..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -plugins { - id 'airbyte-python' - id 'airbyte-docker' - id 'airbyte-standard-source-test-file' -} - -airbytePython { - moduleDirectory 'source_zoom_singer' -} - -airbyteStandardSourceTestFile { - specPath = "source_zoom_singer/spec.json" - configPath = "secrets/config.json" - configuredCatalogPath = "sample_files/configured_catalog.json" -} - - - -dependencies { - implementation files(project(':airbyte-integrations:bases:base-standard-source-test-file').airbyteDocker.outputs) -} diff --git a/airbyte-integrations/connectors/source-zoom-singer/main.py b/airbyte-integrations/connectors/source-zoom-singer/main.py deleted file mode 100644 index 135a9790d88f..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/main.py +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) 2022 Airbyte, Inc., all rights reserved. -# - - -import sys - -from airbyte_cdk.entrypoint import launch -from source_zoom_singer import SourceZoomSinger - -if __name__ == "__main__": - source = SourceZoomSinger() - launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-zoom-singer/requirements.txt b/airbyte-integrations/connectors/source-zoom-singer/requirements.txt deleted file mode 100644 index 7b9114ed5867..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -# This file is autogenerated -- only edit if you know what you are doing. Use setup.py for declaring dependencies. --e . diff --git a/airbyte-integrations/connectors/source-zoom-singer/sample_files/configured_catalog.json b/airbyte-integrations/connectors/source-zoom-singer/sample_files/configured_catalog.json deleted file mode 100644 index 0d10357b06a4..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/sample_files/configured_catalog.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "users", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "first_name": { - "type": ["null", "string"] - }, - "last_name": { - "type": ["null", "string"] - }, - "email": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "integer"] - }, - "status": { - "type": ["null", "string"] - }, - "pmi": { - "type": ["null", "integer"] - }, - "timezone": { - "type": ["null", "string"] - }, - "dept": { - "type": ["null", "string"] - }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "last_login_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "last_client_version": { - "type": ["null", "string"] - }, - "group_ids": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - }, - "im_group_ids": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - }, - "verified": { - "type": ["null", "integer"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} diff --git a/airbyte-integrations/connectors/source-zoom-singer/sample_files/full_configured_catalog.json b/airbyte-integrations/connectors/source-zoom-singer/sample_files/full_configured_catalog.json deleted file mode 100644 index 6859a4e1e9e0..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/sample_files/full_configured_catalog.json +++ /dev/null @@ -1,1462 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "meeting_polls", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "meeting_id": { - "type": ["string"] - }, - "status": { - "type": ["null", "string"] - }, - "title": { - "type": ["null", "string"] - }, - "questions": { - "items": { - "properties": { - "name": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - }, - "answers": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_webinar_participants", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "user_id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "join_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "leave_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "string"] - }, - "attentiveness_score": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meeting_files", - "json_schema": { - "properties": { - "meeting_uuid": { - "type": ["string"] - }, - "file_name": { - "type": ["null", "string"] - }, - "download_url": { - "type": ["null", "string"] - }, - "file_size": { - "type": ["null", "integer"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meeting_registrants", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "meeting_id": { - "type": ["string"] - }, - "email": { - "type": ["null", "string"] - }, - "first_name": { - "type": ["null", "string"] - }, - "last_name": { - "type": ["null", "string"] - }, - "address": { - "type": ["null", "string"] - }, - "city": { - "type": ["null", "string"] - }, - "county": { - "type": ["null", "string"] - }, - "zip": { - "type": ["null", "string"] - }, - "state": { - "type": ["null", "string"] - }, - "phone": { - "type": ["null", "string"] - }, - "industry": { - "type": ["null", "string"] - }, - "org": { - "type": ["null", "string"] - }, - "job_title": { - "type": ["null", "string"] - }, - "purchasing_time_frame": { - "type": ["null", "string"] - }, - "role_in_purchase_process": { - "type": ["null", "string"] - }, - "no_of_employees": { - "type": ["null", "string"] - }, - "comments": { - "type": ["null", "string"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "status": { - "type": ["null", "string"] - }, - "create_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "users", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "first_name": { - "type": ["null", "string"] - }, - "last_name": { - "type": ["null", "string"] - }, - "email": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "integer"] - }, - "status": { - "type": ["null", "string"] - }, - "pmi": { - "type": ["null", "integer"] - }, - "timezone": { - "type": ["null", "string"] - }, - "dept": { - "type": ["null", "string"] - }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "last_login_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "last_client_version": { - "type": ["null", "string"] - }, - "group_ids": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - }, - "im_group_ids": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - }, - "verified": { - "type": ["null", "integer"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_poll_results", - "json_schema": { - "properties": { - "webinar_uuid": { - "type": ["string"] - }, - "email": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "question_details": { - "items": { - "properties": { - "question": { - "type": ["null", "string"] - }, - "answer": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_files", - "json_schema": { - "properties": { - "webinar_uuid": { - "type": ["string"] - }, - "file_name": { - "type": ["null", "string"] - }, - "download_url": { - "type": ["null", "string"] - }, - "file_size": { - "type": ["null", "integer"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_polls", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "status": { - "type": ["null", "string"] - }, - "title": { - "type": ["null", "string"] - }, - "questions": { - "items": { - "properties": { - "name": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - }, - "answers": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meetings", - "json_schema": { - "properties": { - "id": { - "type": ["integer"] - }, - "meeting_id": { - "type": ["string"] - }, - "uuid": { - "type": ["string"] - }, - "host_id": { - "type": ["null", "string"] - }, - "topic": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "integer"] - }, - "status": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "timezone": { - "type": ["null", "string"] - }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "agenda": { - "type": ["null", "string"] - }, - "start_url": { - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - }, - "password": { - "type": ["null", "string"] - }, - "h323_password": { - "type": ["null", "string"] - }, - "encrypted_Password": { - "type": ["null", "string"] - }, - "pmi": { - "type": ["null", "integer"] - }, - "tracking_fields": { - "items": { - "properties": { - "field": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "occurences": { - "items": { - "properties": { - "occurence_id": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "status": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "settings": { - "properties": { - "host_video": { - "type": ["null", "boolean"] - }, - "participant_video": { - "type": ["null", "boolean"] - }, - "cn_meeting": { - "type": ["null", "boolean"] - }, - "in_meeting": { - "type": ["null", "boolean"] - }, - "join_before_host": { - "type": ["null", "boolean"] - }, - "mute_upon_entry": { - "type": ["null", "boolean"] - }, - "watermark": { - "type": ["null", "boolean"] - }, - "use_pmi": { - "type": ["null", "boolean"] - }, - "approval_type": { - "type": ["null", "integer"] - }, - "registration_type": { - "type": ["null", "integer"] - }, - "audio": { - "type": ["null", "string"] - }, - "auto_recording": { - "type": ["null", "string"] - }, - "enforce_login": { - "type": ["null", "boolean"] - }, - "enforce_login_domains": { - "type": ["null", "string"] - }, - "alternative_hosts": { - "type": ["null", "string"] - }, - "close_registration": { - "type": ["null", "boolean"] - }, - "waiting_room": { - "type": ["null", "boolean"] - }, - "global_dial_in_countries": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - }, - "global_dial_in_numbers": { - "items": { - "properties": { - "country": { - "type": ["null", "string"] - }, - "country_name": { - "type": ["null", "string"] - }, - "city": { - "type": ["null", "string"] - }, - "number": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "contact_name": { - "type": ["null", "boolean"] - }, - "contact_email": { - "type": ["null", "boolean"] - }, - "registrants_confirmation_email": { - "type": ["null", "boolean"] - }, - "registrants_email_notification": { - "type": ["null", "boolean"] - }, - "meeting_authentication": { - "type": ["null", "boolean"] - }, - "authentication_option": { - "type": ["null", "string"] - }, - "authentication_domains": { - "type": ["null", "string"] - } - }, - "type": ["null", "object"], - "additionalProperties": false - }, - "recurrence": { - "properties": { - "type": { - "type": ["null", "integer"] - }, - "repeat_interval": { - "type": ["null", "integer"] - }, - "weekly_days": { - "type": ["null", "integer"] - }, - "monthly_day": { - "type": ["null", "integer"] - }, - "monthly_week": { - "type": ["null", "integer"] - }, - "monthly_week_day": { - "type": ["null", "integer"] - }, - "end_times": { - "type": ["null", "integer"] - }, - "end_date_time": { - "format": "date-time", - "type": ["null", "string"] - } - }, - "type": ["null", "object"], - "additionalProperties": false - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meeting_questions", - "json_schema": { - "properties": { - "meeting_id": { - "type": ["string"] - }, - "questions": { - "items": { - "properties": { - "field_name": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] - }, - "answers": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_registrants", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "email": { - "type": ["null", "string"] - }, - "first_name": { - "type": ["null", "string"] - }, - "last_name": { - "type": ["null", "string"] - }, - "address": { - "type": ["null", "string"] - }, - "city": { - "type": ["null", "string"] - }, - "county": { - "type": ["null", "string"] - }, - "zip": { - "type": ["null", "string"] - }, - "state": { - "type": ["null", "string"] - }, - "phone": { - "type": ["null", "string"] - }, - "industry": { - "type": ["null", "string"] - }, - "org": { - "type": ["null", "string"] - }, - "job_title": { - "type": ["null", "string"] - }, - "purchasing_time_frame": { - "type": ["null", "string"] - }, - "role_in_purchase_process": { - "type": ["null", "string"] - }, - "no_of_employees": { - "type": ["null", "string"] - }, - "comments": { - "type": ["null", "string"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "status": { - "type": ["null", "string"] - }, - "create_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_panelists", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "email": { - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "meeting_poll_results", - "json_schema": { - "properties": { - "meeting_uuid": { - "type": ["string"] - }, - "email": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "question_details": { - "items": { - "properties": { - "question": { - "type": ["null", "string"] - }, - "answer": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_questions", - "json_schema": { - "properties": { - "webinar_id": { - "type": ["string"] - }, - "questions": { - "items": { - "properties": { - "field_name": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - }, - "required": { - "type": ["null", "boolean"] - }, - "answers": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_meeting_participants", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "user_id": { - "type": ["string"] - }, - "meeting_id": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "join_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "leave_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinars", - "json_schema": { - "properties": { - "uuid": { - "type": ["string"] - }, - "id": { - "type": ["string"] - }, - "host_id": { - "type": ["null", "string"] - }, - "topic": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "integer"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "timezone": { - "type": ["null", "string"] - }, - "agenda": { - "type": ["null", "string"] - }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "start_url": { - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - }, - "tracking_fields": { - "items": { - "properties": { - "field": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "occurences": { - "items": { - "properties": { - "occurence_id": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "status": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "settings": { - "properties": { - "host_video": { - "type": ["null", "boolean"] - }, - "panelists_video": { - "type": ["null", "boolean"] - }, - "practice_session": { - "type": ["null", "boolean"] - }, - "hd_video": { - "type": ["null", "boolean"] - }, - "approval_type": { - "type": ["null", "integer"] - }, - "registration_type": { - "type": ["null", "integer"] - }, - "audio": { - "type": ["null", "string"] - }, - "auto_recording": { - "type": ["null", "string"] - }, - "enforce_login": { - "type": ["null", "boolean"] - }, - "enforce_login_domains": { - "type": ["null", "string"] - }, - "alternative_hosts": { - "type": ["null", "string"] - }, - "close_registration": { - "type": ["null", "boolean"] - }, - "show_share_button": { - "type": ["null", "boolean"] - }, - "allow_multiple_devices": { - "type": ["null", "boolean"] - }, - "on_demand": { - "type": ["null", "boolean"] - }, - "global_dial_in_countries": { - "items": { - "type": ["string"] - }, - "type": ["null", "array"] - }, - "contact_name": { - "type": ["null", "boolean"] - }, - "contact_email": { - "type": ["null", "boolean"] - }, - "registrants_confirmation_email": { - "type": ["null", "boolean"] - }, - "registrants_restrict_number": { - "type": ["null", "integer"] - }, - "notify_registrants": { - "type": ["null", "boolean"] - }, - "post_webinar_survey": { - "type": ["null", "boolean"] - }, - "survey_url": { - "type": ["null", "string"] - }, - "registrants_email_notification": { - "type": ["null", "boolean"] - }, - "meeting_authentication": { - "type": ["null", "boolean"] - }, - "authentication_option": { - "type": ["null", "string"] - }, - "authentication_domains": { - "type": ["null", "string"] - } - }, - "type": ["null", "object"], - "additionalProperties": false - }, - "recurrence": { - "properties": { - "type": { - "type": ["null", "integer"] - }, - "repeat_interval": { - "type": ["null", "integer"] - }, - "weekly_days": { - "type": ["null", "integer"] - }, - "monthly_day": { - "type": ["null", "integer"] - }, - "monthly_week": { - "type": ["null", "integer"] - }, - "monthly_week_day": { - "type": ["null", "integer"] - }, - "end_times": { - "type": ["null", "integer"] - }, - "end_date_time": { - "format": "date-time", - "type": ["null", "string"] - } - }, - "type": ["null", "object"], - "additionalProperties": false - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_qna_results", - "json_schema": { - "properties": { - "webinar_uuid": { - "type": ["string"] - }, - "email": { - "type": ["string"] - }, - "name": { - "type": ["null", "string"] - }, - "question_details": { - "items": { - "properties": { - "question": { - "type": ["null", "string"] - }, - "answer": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_absentees", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "webinar_uuid": { - "type": ["string"] - }, - "email": { - "type": ["null", "string"] - }, - "first_name": { - "type": ["null", "string"] - }, - "last_name": { - "type": ["null", "string"] - }, - "address": { - "type": ["null", "string"] - }, - "city": { - "type": ["null", "string"] - }, - "county": { - "type": ["null", "string"] - }, - "zip": { - "type": ["null", "string"] - }, - "state": { - "type": ["null", "string"] - }, - "phone": { - "type": ["null", "string"] - }, - "industry": { - "type": ["null", "string"] - }, - "org": { - "type": ["null", "string"] - }, - "job_title": { - "type": ["null", "string"] - }, - "purchasing_time_frame": { - "type": ["null", "string"] - }, - "role_in_purchase_process": { - "type": ["null", "string"] - }, - "no_of_employees": { - "type": ["null", "string"] - }, - "comments": { - "type": ["null", "string"] - }, - "custom_questions": { - "items": { - "properties": { - "title": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "status": { - "type": ["null", "string"] - }, - "create_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "join_url": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "webinar_tracking_sources", - "json_schema": { - "properties": { - "id": { - "type": ["string"] - }, - "webinar_id": { - "type": ["string"] - }, - "source_name": { - "type": ["null", "string"] - }, - "tracking_url": { - "type": ["null", "string"] - }, - "registration_count": { - "type": ["null", "integer"] - }, - "visitor_count": { - "type": ["null", "integer"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_meetings", - "json_schema": { - "properties": { - "meeting_id": { - "type": ["string"] - }, - "uuid": { - "type": ["string"] - }, - "id": { - "type": ["integer"] - }, - "type": { - "type": ["null", "integer"] - }, - "topic": { - "type": ["null", "string"] - }, - "user_name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "end_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "total_minutes": { - "type": ["null", "integer"] - }, - "participants_count": { - "type": ["null", "integer"] - }, - "tracking_fields": { - "items": { - "properties": { - "field": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "dept": { - "type": ["null", "integer"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "report_webinars", - "json_schema": { - "properties": { - "webinar_id": { - "type": ["string"] - }, - "uuid": { - "type": ["string"] - }, - "id": { - "type": ["integer"] - }, - "type": { - "type": ["null", "integer"] - }, - "topic": { - "type": ["null", "string"] - }, - "user_name": { - "type": ["null", "string"] - }, - "user_email": { - "type": ["null", "string"] - }, - "start_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "end_time": { - "format": "date-time", - "type": ["null", "string"] - }, - "duration": { - "type": ["null", "integer"] - }, - "total_minutes": { - "type": ["null", "integer"] - }, - "participants_count": { - "type": ["null", "integer"] - }, - "tracking_fields": { - "items": { - "properties": { - "field": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["object"], - "additionalProperties": false - }, - "type": ["null", "array"] - }, - "dept": { - "type": ["null", "integer"] - } - }, - "type": "object", - "additionalProperties": false - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} diff --git a/airbyte-integrations/connectors/source-zoom-singer/sample_files/sample_config.json b/airbyte-integrations/connectors/source-zoom-singer/sample_files/sample_config.json deleted file mode 100644 index 2975582744b1..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/sample_files/sample_config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "jwt": "" -} diff --git a/airbyte-integrations/connectors/source-zoom-singer/setup.py b/airbyte-integrations/connectors/source-zoom-singer/setup.py deleted file mode 100644 index 6387b921e852..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/setup.py +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (c) 2022 Airbyte, Inc., all rights reserved. -# - - -from setuptools import find_packages, setup - -setup( - name="source_zoom_singer", - description="Source implementation for Zoom, built on the Singer tap implementation.", - author="Airbyte", - author_email="contact@airbyte.io", - packages=find_packages(), - install_requires=["airbyte-cdk", "tap-zoom==1.0.0", "pytest==6.1.2"], - package_data={"": ["*.json"]}, -) diff --git a/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/__init__.py b/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/__init__.py deleted file mode 100644 index dee834d0c068..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .source import SourceZoomSinger - -__all__ = ["SourceZoomSinger"] diff --git a/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/source.py b/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/source.py deleted file mode 100644 index 3dac31a63e8f..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/source.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (c) 2022 Airbyte, Inc., all rights reserved. -# - - -from airbyte_cdk import AirbyteLogger -from airbyte_cdk.sources.singer.source import BaseSingerSource -from requests import HTTPError -from tap_zoom.client import ZoomClient - - -class SourceZoomSinger(BaseSingerSource): - """ - Zoom API Reference: https://marketplace.zoom.us/docs/api-reference/zoom-api - """ - - tap_cmd = "tap-zoom" - tap_name = "Zoom API" - api_error = HTTPError - force_full_refresh = True - - def try_connect(self, logger: AirbyteLogger, config: dict): - client = ZoomClient(config=config, config_path="") - client.get(path="users") diff --git a/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/spec.json b/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/spec.json deleted file mode 100644 index ccd2b3111b35..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/source_zoom_singer/spec.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoom", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Zoom Singer Spec", - "type": "object", - "required": ["jwt"], - "additionalProperties": false, - "properties": { - "jwt": { - "title": "JWT Token", - "type": "string", - "description": "Zoom JWT Token. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - } - } - } -} diff --git a/airbyte-integrations/connectors/source-zoom-singer/unit_tests/unit_test.py b/airbyte-integrations/connectors/source-zoom-singer/unit_tests/unit_test.py deleted file mode 100644 index dddaea0060fa..000000000000 --- a/airbyte-integrations/connectors/source-zoom-singer/unit_tests/unit_test.py +++ /dev/null @@ -1,7 +0,0 @@ -# -# Copyright (c) 2022 Airbyte, Inc., all rights reserved. -# - - -def test_example_method(): - assert True From e200b7ad112ea2bb57314da2576fd8d753af1f39 Mon Sep 17 00:00:00 2001 From: marcosmarxm Date: Tue, 25 Oct 2022 14:10:01 -0300 Subject: [PATCH 14/15] remove zoom singer spec --- .../resources/seed/source_definitions.yaml | 10 +--------- .../src/main/resources/seed/source_specs.yaml | 20 ------------------- 2 files changed, 1 insertion(+), 29 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 0a84eba0ab25..31e487ca6669 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -1241,14 +1241,6 @@ icon: sentry.svg sourceType: api releaseStage: generally_available -- name: Zoom - sourceDefinitionId: aea2fd0d-377d-465e-86c0-4fdc4f688e51 - dockerRepository: airbyte/source-zoom - dockerImageTag: 0.2.4 - documentationUrl: https://docs.airbyte.com/integrations/sources/zoom - icon: zoom.svg - sourceType: api - releaseStage: alpha - name: Zuora sourceDefinitionId: 3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5 dockerRepository: airbyte/source-zuora @@ -1303,6 +1295,6 @@ sourceDefinitionId: cbfd9856-1322-44fb-bcf1-0b39b7a8e92e dockerRepository: airbyte/source-zoom dockerImageTag: 0.1.0 - documentationUrl: https://docs.airbyte.io/integrations/sources/zoom-lc-cdk + documentationUrl: https://docs.airbyte.io/integrations/sources/zoom sourceType: api releaseStage: alpha 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 ac5789852f44..52c84ba1c9ad 100644 --- a/airbyte-config/init/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_specs.yaml @@ -12545,26 +12545,6 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-zoom-singer:0.2.4" - spec: - documentationUrl: "https://docs.airbyte.com/integrations/sources/zoom" - connectionSpecification: - $schema: "http://json-schema.org/draft-07/schema#" - title: "Source Zoom Singer Spec" - type: "object" - required: - - "jwt" - additionalProperties: false - properties: - jwt: - title: "JWT Token" - type: "string" - description: "Zoom JWT Token. See the docs for more information on how to obtain this key." - airbyte_secret: true - supportsNormalization: false - supportsDBT: false - supported_destination_sync_modes: [] - dockerImage: "airbyte/source-zuora:0.1.3" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/zuora" From c72e1dc7eee9b6128ccb36013c3ecdffc3a57854 Mon Sep 17 00:00:00 2001 From: marcosmarxm Date: Tue, 25 Oct 2022 14:11:26 -0300 Subject: [PATCH 15/15] add icon --- .../init/src/main/resources/seed/source_definitions.yaml | 1 + 1 file changed, 1 insertion(+) 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 31e487ca6669..be0b47b42202 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -1297,4 +1297,5 @@ dockerImageTag: 0.1.0 documentationUrl: https://docs.airbyte.io/integrations/sources/zoom sourceType: api + icon: zoom.svg releaseStage: alpha