diff --git a/airbyte-integrations/connectors/source-shortcut/.dockerignore b/airbyte-integrations/connectors/source-shortcut/.dockerignore deleted file mode 100644 index 6049ba4385bb..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -* -!Dockerfile -!main.py -!source_shortcut -!setup.py -!secrets diff --git a/airbyte-integrations/connectors/source-shortcut/Dockerfile b/airbyte-integrations/connectors/source-shortcut/Dockerfile deleted file mode 100644 index 9e8f12166133..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -FROM python:3.7.11-alpine3.14 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_shortcut ./source_shortcut - -ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" -ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] - -LABEL io.airbyte.version=0.1.0 -LABEL io.airbyte.name=airbyte/source-shortcut diff --git a/airbyte-integrations/connectors/source-shortcut/README.md b/airbyte-integrations/connectors/source-shortcut/README.md deleted file mode 100644 index 44d17d2bc3d7..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/README.md +++ /dev/null @@ -1,132 +0,0 @@ -# Shortcut Source - -This is the repository for the Shortcut source connector, written in Python. -For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.io/integrations/sources/shortcut). - -## 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 -pip install '.[tests]' -``` -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 -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-shortcut:build -``` - -#### Create credentials -**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/shortcut) -to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_shortcut/spec.json` 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 shortcut test creds` -and place them into `secrets/config.json`. - -### Locally running the connector -``` -python main.py spec -python main.py check --config secrets/config.json -python main.py discover --config secrets/config.json -python main.py read --config secrets/config.json --catalog integration_tests/configured_catalog.json -``` - -### Locally running the connector docker image - -#### Build -First, make sure you build the latest Docker image: -``` -docker build . -t airbyte/source-shortcut:dev -``` - -You can also build the connector image via Gradle: -``` -./gradlew :airbyte-integrations:connectors:source-shortcut: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-shortcut:dev spec -docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-shortcut:dev check --config /secrets/config.json -docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-shortcut:dev discover --config /secrets/config.json -docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-shortcut:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json -``` -## Testing -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. -First install test dependencies into your virtual environment: -``` -pip install .[tests] -``` -### Unit Tests -To run unit tests locally, from the connector directory run: -``` -python -m pytest unit_tests -``` - -### Integration Tests -There are two types of integration tests: Acceptance Tests (Airbyte's test suite for all source connectors) and custom integration tests (which are specific to this connector). -#### Custom Integration tests -Place custom tests inside `integration_tests/` folder, then, from the connector root, run -``` -python -m pytest integration_tests -``` -#### 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 acceptance tests, from the connector root, run -``` -python -m pytest integration_tests -p integration_tests.acceptance -``` -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-shortcut:unitTest -``` -To run acceptance and custom integration tests: -``` -./gradlew :airbyte-integrations:connectors:source-shortcut: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-shortcut/acceptance-test-config.yml b/airbyte-integrations/connectors/source-shortcut/acceptance-test-config.yml deleted file mode 100644 index 3a2e2b5e8493..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/acceptance-test-config.yml +++ /dev/null @@ -1,30 +0,0 @@ -# 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-shortcut:dev -tests: - spec: - - spec_path: "source_shortcut/spec.json" - 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-shortcut/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-shortcut/acceptance-test-docker.sh deleted file mode 100644 index c51577d10690..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/acceptance-test-docker.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/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-shortcut/build.gradle b/airbyte-integrations/connectors/source-shortcut/build.gradle deleted file mode 100644 index 7dc52f3a1ac3..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -plugins { - id 'airbyte-python' - id 'airbyte-docker' - id 'airbyte-source-acceptance-test' -} - -airbytePython { - moduleDirectory 'source_shortcut' -} diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/__init__.py b/airbyte-integrations/connectors/source-shortcut/integration_tests/__init__.py deleted file mode 100644 index 46b7376756ec..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/abnormal_state.json deleted file mode 100644 index 52b0f2c2118f..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/abnormal_state.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "todo-stream-name": { - "todo-field-name": "todo-abnormal-value" - } -} diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-shortcut/integration_tests/acceptance.py deleted file mode 100644 index 056971f95450..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/acceptance.py +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (c) 2021 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.""" - # TODO: setup test dependencies if needed. otherwise remove the TODO comments - yield - # TODO: clean up test dependencies diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/catalog.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/catalog.json deleted file mode 100644 index 6799946a6851..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/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-shortcut/integration_tests/config_catalog_main.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/config_catalog_main.json deleted file mode 100644 index 45fe3234309c..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/config_catalog_main.json +++ /dev/null @@ -1,204 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "categories", - "json_schema": { - "type": "object", - "properties": { - "archived": { - "description": "A true/false boolean indicating if the Category has been archived.", - "type": "boolean" - }, - "entity_type": { - "description": "A string description of this resource.", - "type": "string" - }, - "color": { - "description": "The hex color to be displayed with the Category (for example, \"#ff0000\").", - "pattern": "^#[a-fA-F0-9]{6}$", - "format": "css-color", - "minLength": 1, - "type": "string", - "x-nullable": true - }, - "name": { - "description": "The name of the Category.", - "type": "string" - }, - "type": { - "description": "The type of entity this Category is associated with; currently Milestone is the only type of Category.", - "type": "string" - }, - "updated_at": { - "description": "The time/date that the Category was updated.", - "type": "string", - "format": "date-time" - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Category has been imported from another tool, the ID in the other tool can be indicated here.", - "type": "string", - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Category.", - "type": "integer", - "format": "int64" - }, - "created_at": { - "description": "The time/date that the Category was created.", - "type": "string", - "format": "date-time" - } - } - }, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "groups", - "json_schema": { - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Group.", - "type": "string" - }, - "description": { - "description": "The description of the Group.", - "type": "string" - }, - "archived": { - "description": "Whether or not the Group is archived.", - "type": "boolean" - }, - "entity_type": { - "description": "A string description of this resource.", - "type": "string" - }, - "color": { - "description": "The hex color to be displayed with the Group (for example, \"#ff0000\").", - "pattern": "^#[a-fA-F0-9]{6}$", - "format": "css-color", - "minLength": 1, - "type": "string", - "x-nullable": true - }, - "num_stories_started": { - "description": "The number of stories assigned to the group which are in a started workflow state.", - "type": "integer", - "format": "int64" - }, - "mention_name": { - "pattern": "^[a-z0-9\\-\\_\\.]+$", - "minLength": 1, - "description": "The mention name of the Group.", - "type": "string" - }, - "name": { - "description": "The name of the Group.", - "type": "string" - }, - "color_key": { - "description": "The color key to be displayed with the Group.", - "type": "string", - "enum": [ - "blue", - "purple", - "midnight-blue", - "orange", - "yellow-green", - "brass", - "gray", - "fuchsia", - "yellow", - "pink", - "sky-blue", - "green", - "red", - "black", - "slate", - "turquoise" - ], - "x-nullable": true - }, - "num_stories": { - "description": "The total number of stories assigned ot the group.", - "type": "integer", - "format": "int64" - }, - "num_epics_started": { - "description": "The number of epics assigned to the group which are in the started workflow state.", - "type": "integer", - "format": "int64" - }, - "id": { - "description": "The id of the Group.", - "type": "string", - "format": "uuid" - }, - "display_icon": { - "$ref": "#/definitions/Icon", - "x-nullable": true - }, - "member_ids": { - "description": "The Member IDs contain within the Group.", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "story_workflow_ids": { - "description": "The Workflow IDs which have stories assigned to the group.", - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - }, - "workflow_ids": { - "description": "The Workflow IDs contained within the Group.", - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - } - }, - "additionalProperties": false, - "required": [ - "app_url", - "description", - "archived", - "entity_type", - "color", - "num_stories_started", - "mention_name", - "name", - "color_key", - "num_stories", - "num_epics_started", - "id", - "display_icon", - "member_ids", - "story_workflow_ids", - "workflow_ids" - ] - }, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - } - ] - } \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog.json deleted file mode 100644 index 121709c8d5d5..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog.json +++ /dev/null @@ -1,379 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "categories", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "entity_templates", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "epic_workflows", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "epics", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "files", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "groups", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "iterations", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "labels", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "linked_files", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "member", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "members", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "milestones", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "projects", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "repositories", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "workflows", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories2", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories3", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories4", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories5", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories6", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories7", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories8", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories9", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "stories10", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - } - ] -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog_labels.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog_labels.json deleted file mode 100644 index 03040d633129..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog_labels.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "labels", - "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "default_cursor_field": ["updated_at"] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - } - ] - } \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog_repositories.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog_repositories.json deleted file mode 100644 index 7a5748dc16b1..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/configured_catalog_repositories.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "repositories", - "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "default_cursor_field": ["updated_at"] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "entity_templates", - "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "default_cursor_field": ["updated_at"] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append" - } - ] -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/invalid_config.json deleted file mode 100644 index f3732995784f..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/invalid_config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "todo-wrong-field": "this should be an incomplete config file, used in standard tests" -} diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_config.json deleted file mode 100644 index ecc4913b84c7..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "fix-me": "TODO" -} diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_config_catalog.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_config_catalog.json deleted file mode 100644 index 36fff3fa5f85..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_config_catalog.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "stories", - "json_schema": {}, - "supported_sync_modes": [ - "full_refresh", - "incremental" - ], - "default_cursor_field": [ - "updated_at" - ] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "append" - } - ] - } \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_state.json deleted file mode 100644 index 3587e579822d..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/integration_tests/sample_state.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "todo-stream-name": { - "todo-field-name": "value" - } -} diff --git a/airbyte-integrations/connectors/source-shortcut/main.py b/airbyte-integrations/connectors/source-shortcut/main.py deleted file mode 100644 index 9b72f3096123..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/main.py +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# - - -import sys - -from airbyte_cdk.entrypoint import launch -from source_shortcut import SourceShortcut - -if __name__ == "__main__": - source = SourceShortcut() - launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-shortcut/requirements.txt b/airbyte-integrations/connectors/source-shortcut/requirements.txt deleted file mode 100644 index 0411042aa091..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ --e ../../bases/source-acceptance-test --e . diff --git a/airbyte-integrations/connectors/source-shortcut/setup.py b/airbyte-integrations/connectors/source-shortcut/setup.py deleted file mode 100644 index 00d008a99f4c..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/setup.py +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright (c) 2021 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_shortcut", - description="Source implementation for Shortcut.", - author="Airbyte", - author_email="contact@airbyte.io", - packages=find_packages(), - install_requires=MAIN_REQUIREMENTS, - package_data={"": ["*.json", "schemas/*.json", "schemas/shared/*.json"]}, - extras_require={ - "tests": TEST_REQUIREMENTS, - }, -) diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/__init__.py b/airbyte-integrations/connectors/source-shortcut/source_shortcut/__init__.py deleted file mode 100644 index 672819e51307..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# - - -from .source import SourceShortcut - -__all__ = ["SourceShortcut"] diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/TODO.md b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/TODO.md deleted file mode 100644 index cf1efadb3c9c..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/TODO.md +++ /dev/null @@ -1,25 +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). - -The simplest way to do this is to describe the schema of your streams using one `.json` file per stream. You can also dynamically generate the schema of your stream in code, or you can combine both approaches: start with a `.json` file and dynamically add properties to it. - -The schema of a stream is the return value of `Stream.get_json_schema`. - -## Static schemas -By default, `Stream.get_json_schema` reads a `.json` file in the `schemas/` directory whose name is equal to the value of the `Stream.name` property. In turn `Stream.name` by default returns the name of the class in snake case. Therefore, if you have a class `class EmployeeBenefits(HttpStream)` the default behavior will look for a file called `schemas/employee_benefits.json`. You can override any of these behaviors as you need. - -Important note: any objects referenced via `$ref` should be placed in the `shared/` directory in their own `.json` files. - -## Dynamic schemas -If you'd rather define your schema in code, override `Stream.get_json_schema` in your stream class to return a `dict` describing the schema using [JSONSchema](https://json-schema.org). - -## Dynamically modifying static schemas -Override `Stream.get_json_schema` to run the default behavior, edit the returned value, then return the edited value: -``` -def get_json_schema(self): - schema = super().get_json_schema() - schema['dynamically_determined_property'] = "property" - return schema -``` - -Delete this file once you're done. Or don't. Up to you :) diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/categories.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/categories.json deleted file mode 100644 index ed51f0861566..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/categories.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "archived": { - "description": "A true/false boolean indicating if the Category has been archived.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The hex color to be displayed with the Category (for example, \"#ff0000\").", - "pattern": "^#[a-fA-F0-9]{6}$", - "format": "css-color", - "minLength": 1, - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "name": { - "description": "The name of the Category.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "The type of entity this Category is associated with; currently Milestone is the only type of Category.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The time/date that the Category was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Category has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Category.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date that the Category was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/entity_templates.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/entity_templates.json deleted file mode 100644 index 493db22b3516..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/entity_templates.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The unique identifier for the entity template.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "created_at": { - "description": "The time/date when the entity template was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "updated_at": { - "description": "The time/date when the entity template was last updated.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "name": { - "description": "The template's name.", - "type": [ - "null", - "string" - ] - }, - "author_id": { - "description": "The unique ID of the member who created the template.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "last_used_at": { - "description": "The last time that someone created an entity using this template.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "story_contents": { - "type": [ - "null", - "object" - ], - "properties": { - "description": { - "type": [ - "null", - "string" - ] - }, - "entity_type": { - "type": [ - "null", - "string" - ] - }, - "labels": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "type": [ - "null", - "string" - ] - }, - "linked_files": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "name": { - "type": [ - "null", - "string" - ] - }, - "label_ids": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_id": { - "type": [ - "null", - "string" - ] - }, - "work_state_id": { - "type": [ - "null", - "integer" - ] - }, - "files": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "project_id": { - "type": [ - "null", - "integer" - ] - } - } - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/epic_workflows.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/epic_workflows.json deleted file mode 100644 index 627b9378bdae..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/epic_workflows.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The unique ID of the Epic Workflow.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The date the Epic Workflow was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "updated_at": { - "description": "The date the Epic Workflow was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "default_epic_state_id": { - "description": "The unique ID of the default Epic State that new Epics are assigned by default.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "epic_states": { - "description": "A map of the Epic States in this Epic Workflow.", - "type": [ - "null", - "object" - ], - "properties": { - "description": { - "type": [ - "null", - "string" - ] - }, - "entity_type": { - "type": [ - "null", - "string" - ] - }, - "name": { - "type": [ - "null", - "string" - ] - }, - "global_id": { - "type": [ - "null", - "string" - ] - }, - "type": { - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "type": [ - "null", - "integer" - ] - }, - "position": { - "type": [ - "null", - "string" - ] - }, - "created_at": { - "type": [ - "null", - "string" - ], - "format": "date-time" - } - } - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/epics.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/epics.json deleted file mode 100644 index f83c2d5a0f35..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/epics.json +++ /dev/null @@ -1,381 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "An Epic is a collection of stories that together might make up a release, a milestone, or some other large initiative that you are working on.", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Epic.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The Epic's description.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True/false boolean that indicates whether the Epic is archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Epic has been started.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "description": "An array of Labels attached to the Epic.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Epic description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "project_ids": { - "description": "The IDs of Projects related to this Epic.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "stories_without_projects": { - "description": "The number of stories in this epic which are not associated with a project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Epic was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "productboard_plugin_id": { - "description": "The ID of the associated productboard integration.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Epic was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Epic was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the Epic.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "x-doc-skip": true, - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Epic has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "productboard_url": { - "description": "The URL of the associated productboard feature.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "planned_start_date": { - "description": "The Epic's planned start date.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "state": { - "description": "`Deprecated` The workflow state that the Epic is in.", - "type": [ - "null", - "string" - ] - }, - "milestone_id": { - "description": "The ID of the Milestone this Epic is related to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "requested_by_id": { - "description": "The ID of the Member that requested the epic.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "epic_state_id": { - "description": "The ID of the Epic State.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "label_ids": { - "description": "An array of Label ids attached to the Epic.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Epic was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "updated_at": { - "description": "The time/date the Epic was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Epic description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "productboard_id": { - "description": "The ID of the associated productboard feature.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "follower_ids": { - "description": "An array of UUIDs for any Members you want to add as Followers on this Epic.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs for any members you want to add as Owners on this new Epic.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Epic has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Epic.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "position": { - "description": "The Epic's relative position in the Epic workflow state.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "productboard_name": { - "description": "The name of the associated productboard feature.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "deadline": { - "description": "The Epic's deadline.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": { - "num_points_done": { - "type": [ - "null", - "integer" - ] - }, - "num_related_documents": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_unstarted": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_total": { - "type": [ - "null", - "integer" - ] - }, - "last_story_update": { - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "num_points_started": { - "type": [ - "null", - "integer" - ], - "format": "date-time" - }, - "num_points_unstarted": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_started": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_unestimated": { - "type": [ - "null", - "integer" - ] - }, - "num_points": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_done": { - "type": [ - "null", - "integer" - ] - } - } - }, - "created_at": { - "description": "The time/date the Epic was created.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/files.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/files.json deleted file mode 100644 index 82990255560b..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/files.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "description": { - "type": [ - "null", - "string" - ] - }, - "entity_type": { - "type": [ - "null", - "string" - ] - }, - "story_ids": { - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "mention_ids": { - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "member_mention_ids": { - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "name": { - "type": [ - "null", - "string" - ] - }, - "thumbnail_url": { - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "size": { - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "uploader_id": { - "type": [ - "null", - "string" - ] - }, - "content_type": { - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "filename": { - "type": [ - "null", - "string" - ] - }, - "group_mention_ids": { - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "external_id": { - "type": [ - "null", - "integer" - ] - }, - "id": { - "type": [ - "null", - "integer" - ] - }, - "url": { - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "The time/date that the File was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/groups.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/groups.json deleted file mode 100644 index e9ca8d27664b..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/groups.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Group.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the Group.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "Whether or not the Group is archived.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The hex color to be displayed with the Group (for example, \"#ff0000\").", - "pattern": "^#[a-fA-F0-9]{6}$", - "format": "css-color", - "minLength": 1, - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "num_stories_started": { - "description": "The number of stories assigned to the group which are in a started workflow state.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "mention_name": { - "pattern": "^[a-z0-9\\-\\_\\.]+$", - "minLength": 1, - "description": "The mention name of the Group.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "The name of the Group.", - "type": [ - "null", - "string" - ] - }, - "color_key": { - "description": "The color key to be displayed with the Group.", - "type": [ - "null", - "string" - ], - "enum": [ - "blue", - "purple", - "midnight-blue", - "orange", - "yellow-green", - "brass", - "gray", - "fuchsia", - "yellow", - "pink", - "sky-blue", - "green", - "red", - "black", - "slate", - "turquoise" - ], - "x-nullable": true - }, - "num_stories": { - "description": "The total number of stories assigned ot the group.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "num_epics_started": { - "description": "The number of epics assigned to the group which are in the started workflow state.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "id": { - "description": "The id of the Group.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "display_icon": { - "type": [ - "null", - "string" - ] - }, - "member_ids": { - "description": "The Member IDs contain within the Group.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_workflow_ids": { - "description": "The Workflow IDs which have stories assigned to the group.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_ids": { - "description": "The Workflow IDs contained within the Group.", - "type": [ - "null", - "object" - ], - "properties": {} - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/iterations.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/iterations.json deleted file mode 100644 index 2b242de7fb71..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/iterations.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "An Epic is a collection of stories that together might make up a release, a milestone, or some other large initiative that you are working on.", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Epic.", - "type": [ - "null", - "string" - ] - }, - "entity_type": { - "description": "The Epic's description.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "description": "True/false boolean that indicates whether the Epic is archived or not.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Epic description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "name": { - "description": "An array of Labels attached to the Epic.", - "type": [ - "null", - "string" - ] - }, - "label_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "updated_at": { - "description": "The time/date the Epic was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Epic description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "end_date": { - "description": "The time/date the Epic was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "follower_ids": { - "description": "An array of Group IDs that have been mentioned in the Epic description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_ids": { - "description": "An array of Group IDs that have been mentioned in the Epic description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "start_date": { - "description": "The time/date the Epic was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "status": { - "description": "The time/date the Epic was completed.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The name of the Epic.", - "type": [ - "null", - "integer" - ] - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": { - "num_points_done": { - "type": [ - "null", - "integer" - ] - }, - "num_related_documents": { - "type": [ - "null", - "integer" - ] - }, - "average_cycle_time": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_unstarted": { - "type": [ - "null", - "integer" - ] - }, - "num_points_started": { - "type": [ - "null", - "integer" - ], - "format": "date-time" - }, - "num_points_unstarted": { - "type": [ - "null", - "integer" - ], - "format": "date-time" - }, - "num_stories_started": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_unestimated": { - "type": [ - "null", - "integer" - ] - }, - "average_lead_time": { - "type": [ - "null", - "integer" - ] - }, - "num_points": { - "type": [ - "null", - "integer" - ] - }, - "num_stories_done": { - "type": [ - "null", - "integer" - ] - } - } - }, - "created_at": { - "description": "The time/date the Epic was created.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/labels.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/labels.json deleted file mode 100644 index 389af8d43c81..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/labels.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Label.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the Label.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "archived": { - "description": "A true/false boolean indicating if the Label has been archived.", - "type": "boolean" - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The hex color to be displayed with the Label (for example, \"#ff0000\").", - "pattern": "^#[a-fA-F0-9]{6}$", - "format": "css-color", - "minLength": 1, - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "name": { - "description": "The name of the Label.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "x-doc-skip": true, - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The time/date that the Label was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Label has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Label.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "created_at": { - "description": "The time/date that the Label was created.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/linked_files.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/linked_files.json deleted file mode 100644 index 6ab3fe8c3498..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/linked_files.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "description": { - "description": "The description of the file.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "story_ids": { - "description": "The IDs of the stories this file is attached to.", - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "member_mention_ids": { - "description": "The members that are mentioned in the description of the file.", - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "name": { - "description": "The name of the linked file.", - "type": [ - "null", - "string" - ] - }, - "thumbnail_url": { - "description": "The URL of the file thumbnail, if the integration provided it.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "type": { - "description": "The integration type (e.g. google, dropbox, box).", - "type": [ - "null", - "string" - ] - }, - "size": { - "description": "The filesize, if the integration provided it.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "uploader_id": { - "description": "The UUID of the member that uploaded the file.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "content_type": { - "description": "The content type of the image (e.g. txt/plain).", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "updated_at": { - "description": "The time/date the LinkedFile was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "group_mention_ids": { - "description": "The groups that are mentioned in the description of the file.", - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "id": { - "description": "The unique identifier for the file.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "url": { - "description": "The URL of the file.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "The time/date the LinkedFile was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/member.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/member.json deleted file mode 100644 index a85fbbf378d2..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/member.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "description": "The Member's role in the Workspace.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "mention_name": { - "description": "True/false boolean indicating whether the Member has been disabled within the Workspace.", - "type": [ - "null", - "string" - ] - }, - "workspace2": { - "x-doc-skip": true, - "type": [ - "null", - "object" - ], - "parameters": {} - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/members.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/members.json deleted file mode 100644 index 00676cd8d823..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/members.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "role": { - "description": "The Member's role in the Workspace.", - "type": [ - "null", - "string" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "disabled": { - "description": "True/false boolean indicating whether the Member has been disabled within the Workspace.", - "type": [ - "null", - "boolean" - ] - }, - "global_id": { - "x-doc-skip": true, - "type": [ - "null", - "string" - ] - }, - "state": { - "description": "The user state, one of partial, full, disabled, or imported. A partial user is disabled, has no means to log in, and is not an import user. A full user is enabled and has a means to log in. A disabled user is disabled and has a means to log in. An import user is disabled, has no means to log in, and is marked as an import user.", - "type": [ - "null", - "string" - ], - "enum": [ - "partial", - "full", - "disabled", - "imported" - ] - }, - "updated_at": { - "description": "The time/date the Member was last updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "created_without_invite": { - "description": "Whether this member was created as a placeholder entity.", - "x-doc-skip": true, - "type": [ - "null", - "boolean" - ] - }, - "group_ids": { - "description": "The Member's group ids", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "id": { - "description": "The Member's ID in Shortcut.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "profile": { - "items": { - "properties": { - "entity_type": { - "type": [ - "null", - "string" - ] - }, - "deactivated": { - "type": [ - "null", - "boolean" - ] - }, - "two_factor_auth_activated": { - "type": [ - "null", - "boolean" - ] - }, - "mention_name": { - "type": [ - "null", - "string" - ] - }, - "name": { - "type": [ - "null", - "string" - ] - }, - "gravatar_hash": { - "type": [ - "null", - "string" - ] - }, - "id": { - "type": [ - "null", - "string" - ] - }, - "display_icon": { - "items": { - "properties": { - "entity_type": { - "type": [ - "null", - "string" - ] - }, - "id": { - "type": [ - "null", - "string" - ] - }, - "created_at": { - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "updated_at": { - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "url": { - "type": [ - "null", - "string" - ] - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "object" - ] - }, - "email_address": { - "type": [ - "null", - "string" - ] - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "object" - ] - }, - "created_at": { - "description": "The time/date the Member was created.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/milestones.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/milestones.json deleted file mode 100644 index 92493dc12b4e..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/milestones.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Milestone.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The Milestone's description.", - "type": [ - "null", - "string" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Milestone has been started.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "completed_at_override": { - "description": "A manual override for the time/date the Milestone was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Milestone was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Milestone was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the Milestone.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "x-doc-skip": true, - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Milestone has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "state": { - "description": "The workflow state that the Milestone is in.", - "type": [ - "null", - "string" - ] - }, - "started_at_override": { - "description": "A manual override for the time/date the Milestone was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "updated_at": { - "description": "The time/date the Milestone was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "categories": { - "description": "An array of Categories attached to the Milestone.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "id": { - "description": "The unique ID of the Milestone.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "position": { - "description": "A number representing the position of the Milestone in relation to every other Milestone within the Workspace.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "created_at": { - "description": "The time/date the Milestone was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/projects.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/projects.json deleted file mode 100644 index 3753cc308672..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/projects.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Project.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the Project.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "archived": { - "description": "True/false boolean indicating whether the Project is in an Archived state.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "days_to_thermometer": { - "description": "The number of days before the thermometer appears in the Story summary.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "color": { - "description": "The color associated with the Project in the Shortcut member interface.", - "pattern": "^#[a-fA-F0-9]{6}$", - "format": "css-color", - "minLength": 1, - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "workflow_id": { - "description": "The ID of the workflow the project belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "name": { - "description": "The name of the Project", - "type": [ - "null", - "string" - ] - }, - "start_time": { - "description": "The date at which the Project was started.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "updated_at": { - "description": "The time/date that the Project was last updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "parameters": {} - } - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Project has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "show_thermometer": { - "description": "Configuration to enable or disable thermometers in the Story summary.", - "type": [ - "null", - "boolean" - ] - }, - "team_id": { - "description": "The ID of the team the project belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "iteration_length": { - "description": "The number of weeks per iteration in this Project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "abbreviation": { - "description": "The Project abbreviation used in Story summaries. Should be kept to 3 characters at most.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "parameters": {} - }, - "created_at": { - "description": "The time/date that the Project was created.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/repositories.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/repositories.json deleted file mode 100644 index 9a5c6d4dc997..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/repositories.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "The shorthand name of the VCS repository.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "type": { - "description": "The type of Repository. Currently this can only be \"github\".", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The time/date the Repository was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "external_id": { - "description": "The VCS unique identifier for the Repository.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The ID associated to the VCS repository in Shortcut.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "url": { - "description": "The URL of the Repository.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "full_name": { - "description": "The full name of the VCS repository.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "created_at": { - "description": "The time/date the Repository was created.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories.json deleted file mode 100644 index feb8c455cde1..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories.json +++ /dev/null @@ -1,580 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "properties": { - "external_links": { - "type": [ - "null", - "object" - ] - } - }, - "type": [ - "null", - "object" - ] - - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories10.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories10.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories10.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories2.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories2.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories2.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories3.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories3.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories3.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories4.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories4.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories4.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories5.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories5.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories5.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories6.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories6.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories6.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories7.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories7.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories7.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories8.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories8.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories8.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories9.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories9.json deleted file mode 100644 index 47162570a0ed..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/stories9.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "started": { - "description": "A true/false boolean indicating if the Story has been started.", - "type": [ - "null", - "boolean" - ] - }, - "story_links": { - "items": { - "properties": { - "entity_type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "object_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "verb": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "type": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "subject_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "subject_workflow_state_id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "labels": { - "items": { - "properties": { - "app_url": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "description": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "archived": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "boolean" - ] - }, - "entity_type": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "color": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "name": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "global_id": { - "description": "The Shortcut application url for the Story.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "external_id": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ] - }, - "id": { - "description": "The description of the story.", - "type": [ - "null", - "string" - ] - }, - "created_at": { - "description": "True if the story has been archived or not.", - "type": [ - "null", - "string" - ], - "format": "date-time" - } - }, - "type": [ - "null", - "object" - ] - }, - "type": [ - "null", - "array" - ] - }, - "mention_ids": { - "description": "Deprecated: use member_mention_ids.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "member_mention_ids": { - "description": "An array of Member IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "story_type": { - "description": "The type of story (feature, bug, chore).", - "type": [ - "null", - "string" - ] - }, - "custom_fields": { - "description": "An array of CustomField value assertions for the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "linked_files": { - "description": "An array of linked files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "workflow_id": { - "description": "The ID of the workflow the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "completed_at_override": { - "description": "A manual override for the time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "started_at": { - "description": "The time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "completed_at": { - "description": "The time/date the Story was completed.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "name": { - "description": "The name of the story.", - "type": [ - "null", - "string" - ] - }, - "completed": { - "description": "A true/false boolean indicating if the Story has been completed.", - "type": [ - "null", - "boolean" - ] - }, - "comments": { - "description": "An array of comments attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "blocker": { - "description": "A true/false boolean indicating if the Story is currently a blocker of another story.", - "type": [ - "null", - "boolean" - ] - }, - "branches": { - "description": "An array of Git branches attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "epic_id": { - "description": "The ID of the epic the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "story_template_id": { - "description": "The ID of the story template used to create this story, or null if not created using a template.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "external_links": { - "description": "An array of external links (strings) associated with a Story", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "previous_iteration_ids": { - "description": "The IDs of the iteration the story belongs to.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "requested_by_id": { - "description": "The ID of the Member that requested the story.", - "type": [ - "null", - "string" - ], - "format": "uuid" - }, - "iteration_id": { - "description": "The ID of the iteration the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "tasks": { - "description": "An array of tasks connected to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "label_ids": { - "description": "An array of label ids attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "started_at_override": { - "description": "A manual override for the time/date the Story was started.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "group_id": { - "description": "The ID of the group associated with the story.", - "type": [ - "null", - "string" - ], - "format": "uuid", - "x-nullable": true - }, - "workflow_state_id": { - "description": "The ID of the workflow state the story is currently in.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "updated_at": { - "description": "The time/date the Story was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "pull_requests": { - "description": "An array of Pull/Merge Requests attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "group_mention_ids": { - "description": "An array of Group IDs that have been mentioned in the Story description.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "follower_ids": { - "description": "An array of UUIDs for any Members listed as Followers.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "owner_ids": { - "description": "An array of UUIDs of the owners of this story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "external_id": { - "description": "This field can be set to another unique ID. In the case that the Story has been imported from another tool, the ID in the other tool can be indicated here.", - "type": [ - "null", - "string" - ], - "x-nullable": true - }, - "id": { - "description": "The unique ID of the Story.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "lead_time": { - "description": "The lead time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "estimate": { - "description": "The numeric point estimate of the story. Can also be null, which means unestimated.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "commits": { - "description": "An array of commits attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "files": { - "description": "An array of files attached to the story.", - "type": [ - "null", - "object" - ], - "properties": {} - }, - "position": { - "description": "A number representing the position of the story in relation to every other story in the current project.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "blocked": { - "description": "A true/false boolean indicating if the Story is currently blocked.", - "type": [ - "null", - "boolean" - ] - }, - "project_id": { - "description": "The ID of the project the story belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64", - "x-nullable": true - }, - "deadline": { - "description": "The due date of the story.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - }, - "stats": { - "type": [ - "null", - "object" - ], - "properties": {} - }, - "cycle_time": { - "description": "The cycle time (in seconds) of this story when complete.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The time/date the Story was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "moved_at": { - "description": "The time/date the Story was last changed workflow-state.", - "type": [ - "null", - "string" - ], - "format": "date-time", - "x-nullable": true - } - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/workflows.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/workflows.json deleted file mode 100644 index 03b2c6dd1385..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/schemas/workflows.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "description": { - "description": "A description of the workflow.", - "type": [ - "null", - "string" - ] - }, - "entity_type": { - "description": "A string description of this resource.", - "type": [ - "null", - "string" - ] - }, - "project_ids": { - "description": "An array of IDs of projects within the Workflow.", - "type": [ - "null", - "object" - ], - "parameters": {} - } - }, - "states": { - "description": "A map of the states in this Workflow.", - "type": [ - "null", - "object" - ], - "parameters": { - "description": { - "type": [ - "null", - "string" - ] - }, - "entity_type": { - "type": [ - "null", - "string" - ] - }, - "verb": { - "type": [ - "null", - "string" - ] - }, - "name": { - "type": [ - "null", - "string" - ] - }, - "global_id": { - "type": [ - "null", - "string" - ] - }, - "num_stories": { - "type": [ - "null", - "integer" - ] - }, - "type": { - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "id": { - "type": [ - "null", - "number" - ] - }, - "num_story_templates": { - "type": [ - "null", - "integer" - ] - }, - "position": { - "type": [ - "null", - "integer" - ] - }, - "created_at": { - "type": [ - "null", - "string" - ], - "format": "date-time" - } - } - }, - "name": { - "description": "The name of the workflow.", - "type": [ - "null", - "string" - ] - }, - "updated_at": { - "description": "The date the Workflow was updated.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "auto_assign_owner": { - "description": "Indicates if an owner is automatically assigned when an unowned story is started.", - "type": [ - "null", - "boolean" - ] - }, - "id": { - "description": "The unique ID of the Workflow.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "team_id": { - "description": "The ID of the team the workflow belongs to.", - "type": [ - "null", - "integer" - ], - "format": "int64" - }, - "created_at": { - "description": "The date the Workflow was created.", - "type": [ - "null", - "string" - ], - "format": "date-time" - }, - "default_state_id": { - "description": "The unique ID of the default state that new Stories are entered into.", - "type": [ - "null", - "integer" - ], - "format": "int64" - } -} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/source.py b/airbyte-integrations/connectors/source-shortcut/source_shortcut/source.py deleted file mode 100644 index d2e03dd22175..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/source.py +++ /dev/null @@ -1,1724 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# - - -from abc import ABC -from asyncio import streams -from distutils.command.config import config -from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Tuple -from urllib import response -from urllib.parse import urlparse - -import requests -import json -from airbyte_cdk.sources import AbstractSource -from airbyte_cdk.sources.streams import Stream -from airbyte_cdk.sources.streams.http import HttpStream -from airbyte_cdk.sources.streams.http.auth import TokenAuthenticator -from datetime import datetime, timedelta - - - -# Source -class SourceShortcut(AbstractSource): - def check_connection(self, logger, config) -> Tuple[bool, any]: - base_url = "https://api.app.shortcut.com/" - try: - response = requests.request( - "GET", - url=base_url, - headers={ - "Content-Type": "application/json", - "Shortcut-Token": config["api_token"], - }, - ) - - if response.status_code != 200: - message = response.json() - error_message = message.get("error") - if error_message: - return False, error_message - response.raise_for_status() - except Exception as e: - return False, e - - return True, None - - - - def streams(self, config: Mapping[str, Any]) -> List[Stream]: - authenticator = TokenAuthenticator(config["api_token"]) - """ - TODO: Replace the streams below with your own streams. - - :param config: A Mapping of the user input configuration as defined in the connector spec. - """ - - - list = [{"start": "2017-10-01", "end": "2020-01-31"}, - {"start": "2020-02-01", "end": "2020-06-30"}, - {"start": "2020-07-01", "end": "2020-09-30"}, - {"start": "2020-10-01", "end": "2020-12-31"}, - {"start": "2021-01-01", "end": "2021-03-01"}, - {"start": "2021-03-02", "end": "2021-06-30"}, - {"start": "2021-07-01", "end": "2021-10-31"}, - {"start": "2021-11-01", "end": "2021-12-31"}, - {"start": "2022-01-01", "end": "2022-02-27"}, - {"start": "2022-02-28", "end": "2022-03-01"}] - - - - - # for i in list: - # x = self.stories.append(Stories(start_date=i["start"], end_date=i["end"], auth=config["api_token"])) - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(i) + " - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") - #auth = TokenAuthenticator(token="api_key") # Oauth2Authenticator is also available if you need oauth support - return [Categories(start_date=config['start_date'], auth=config["api_token"]) - ,EntityTemplates(start_date=config['start_date'], auth=config["api_token"]) - ,EpicWorkflows(start_date=config['start_date'], auth=config["api_token"]) - ,Epics(start_date=config['start_date'], auth=config["api_token"]) - ,Files(start_date=config['start_date'], auth=config["api_token"]) - ,Groups(start_date=config['start_date'], auth=config["api_token"]) - ,Iterations(start_date=config['start_date'], auth=config["api_token"]) - ,Labels(start_date=config['start_date'], auth=config["api_token"]) - ,LinkedFiles(start_date=config['start_date'], auth=config["api_token"]) - ,Member(start_date=config['start_date'], auth=config["api_token"]) - ,Members(start_date=config['start_date'], auth=config["api_token"]) - ,Milestones(start_date=config['start_date'], auth=config["api_token"]) - ,Projects(start_date=config['start_date'], auth=config["api_token"]) - ,Repositories(start_date=config['start_date'], auth=config["api_token"]) - ,Stories(start_date="2017-10-01", end_date="2020-01-31", auth=config["api_token"]) - ,Stories2(start_date="2020-02-01", end_date="2020-06-30", auth=config["api_token"]) - ,Stories3(start_date="2020-07-01", end_date="2020-09-30", auth=config["api_token"]) - ,Stories4(start_date="2020-10-01", end_date="2020-12-31", auth=config["api_token"]) - ,Stories5(start_date="2021-01-01", end_date="2021-03-01", auth=config["api_token"]) - ,Stories6(start_date="2021-03-02", end_date="2021-05-31", auth=config["api_token"]) - ,Stories7(start_date="2021-06-01", end_date="2021-08-31", auth=config["api_token"]) - ,Stories8(start_date="2021-09-01", end_date="2021-11-30", auth=config["api_token"]) - ,Stories9(start_date="2021-12-01", end_date="2022-01-31", auth=config["api_token"]) - ,Stories10(start_date="2022-02-01", end_date="2022-03-31", auth=config["api_token"]) - ,Workflows(start_date=config['start_date'], auth=config["api_token"])] - - - -class Categories(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "categories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class EntityTemplates(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "entity-templates" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - -class EpicWorkflows(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "epic-workflow" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - return [response.json()] - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Epics(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "epics" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - -class Files(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "files" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Groups(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "groups" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Iterations(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "iterations" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Labels(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "labels" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - -class LinkedFiles(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "linked-files" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Member(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "member" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return [response.json()] - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Members(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "members" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Milestones(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "milestones" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Projects(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "projects" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - -class Repositories(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "repositories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - - - -class Stories(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - - -class Stories2(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - - - -class Stories3(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - -class Stories4(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - -class Stories5(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - -class Stories6(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - - -class Stories7(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - -class Stories8(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - -class Stories9(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - -class Stories10(HttpStream): - url_base = "https://api.app.shortcut.com" - cursor_field = "updated_at" - primary_key = "id" - #query = "completed:2017-01-01..2020-12-31" - query = "" - page_size = 1 - pg_count = 0 - token = "" - i = 0 - list = [] - - - - def __init__(self, auth: str, start_date: datetime, end_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.end_date = end_date - self.auth = auth - self.query = 'created:' + self.start_date + '..' + self.end_date - - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "api/v3/search/stories" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = {"page_size": self.page_size, "query": self.query, "token": self.auth} - if next_page_token: - #print(next_page_token) - return next_page_token.lstrip("api/v3/search/stories?") + '&token=' + self.auth - else: - return params - - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - #while self.pg_count < response.json().get("total"): - try: - decode_response = response.json() - next_page_token = decode_response.get("next") - self.pg_count += 1 - if response.status_code != 200: - message = response.json() - error_message = message.get("XXXXXXXXXXXXXXXXX - error - PPPPPPPPPPPPPPPPPPP") - if error_message: - return False, error_message - response.raise_for_status() - return next_page_token - except Exception as e: - return False, e - - - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - self.i = self.i+1 - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - ITERATION - " + str(self.i)) - self.list.append(response.json()["data"][0]) - # if response.json().get("next") != None: - # #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - " + response.json().get("next")) - if response.json().get("next") == None: - #print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - NONE REACHED - ") - #print(len(self.list)) - return self.list - # for y,x in enumerate(self.list): - # print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX - THIS IS THE OUTPUT - " + str(y)) - # print(x) - # print(x["data"][0]) - # print(type(x["data"][0])) - # print(type(response.json())) - #print(self.list[0]["data"][0]) - - - return [] - - - -class Workflows(HttpStream): - url_base = "https://api.app.shortcut.com/api/v3/" - cursor_field = "updated_at" - primary_key = "id" - - - def __init__(self, auth: str, start_date: datetime, **kwargs): - super().__init__() - self.start_date = start_date - self.auth = auth - - def path(self, stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - stream_slice: Mapping[str, Any] = None) -> str: - return "workflows" - - - def request_headers( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - return {"Content-Type": "application/json","Shortcut-Token": self.auth} - - def parse_response( - self, - response: requests.Response, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - ) -> Iterable[Mapping]: - # The response is a simple JSON whose schema matches our stream's schema exactly, - # so we just return a list containing the response - x=response.json() - print(type(x)) - return response.json() - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - # The API does not offer pagination, - # so we return None to indicate there are no more pages in the response - return None - - diff --git a/airbyte-integrations/connectors/source-shortcut/source_shortcut/spec.json b/airbyte-integrations/connectors/source-shortcut/source_shortcut/spec.json deleted file mode 100644 index 46dd72bc1fc8..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/source_shortcut/spec.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "documentationUrl": "https://docs.airbyte.io/integrations/sources/shortcutapi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Shortcut Spec", - "type": "object", - "required": ["start_date", "api_token"], - "additionalProperties": false, - "properties": { - "api_token": { - "type": "string", - "description": "Shortcut API Secret. See the docs for more information on how to obtain this key." - }, - "start_date": { - "type": "string", - "description": "Start getting data from this date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": ["%Y-%m-%d"] - } - } - } -} diff --git a/airbyte-integrations/connectors/source-shortcut/unit_tests/__init__.py b/airbyte-integrations/connectors/source-shortcut/unit_tests/__init__.py deleted file mode 100644 index 46b7376756ec..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/unit_tests/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# diff --git a/airbyte-integrations/connectors/source-shortcut/unit_tests/test_incremental_streams.py b/airbyte-integrations/connectors/source-shortcut/unit_tests/test_incremental_streams.py deleted file mode 100644 index 5f021b84f0ce..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/unit_tests/test_incremental_streams.py +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# - - -from airbyte_cdk.models import SyncMode -from pytest import fixture -from source_shortcut.source import IncrementalShortcutStream - - -@fixture -def patch_incremental_base_class(mocker): - # Mock abstract methods to enable instantiating abstract class - mocker.patch.object(IncrementalShortcutStream, "path", "v0/example_endpoint") - mocker.patch.object(IncrementalShortcutStream, "primary_key", "test_primary_key") - mocker.patch.object(IncrementalShortcutStream, "__abstractmethods__", set()) - - -def test_cursor_field(patch_incremental_base_class): - stream = IncrementalShortcutStream() - # TODO: replace this with your expected cursor field - expected_cursor_field = [] - assert stream.cursor_field == expected_cursor_field - - -def test_get_updated_state(patch_incremental_base_class): - stream = IncrementalShortcutStream() - # TODO: replace this with your input parameters - inputs = {"current_stream_state": None, "latest_record": None} - # TODO: replace this with your expected updated stream state - expected_state = {} - assert stream.get_updated_state(**inputs) == expected_state - - -def test_stream_slices(patch_incremental_base_class): - stream = IncrementalShortcutStream() - # TODO: replace this with your input parameters - inputs = {"sync_mode": SyncMode.incremental, "cursor_field": [], "stream_state": {}} - # TODO: replace this with your expected stream slices list - expected_stream_slice = [None] - assert stream.stream_slices(**inputs) == expected_stream_slice - - -def test_supports_incremental(patch_incremental_base_class, mocker): - mocker.patch.object(IncrementalShortcutStream, "cursor_field", "dummy_field") - stream = IncrementalShortcutStream() - assert stream.supports_incremental - - -def test_source_defined_cursor(patch_incremental_base_class): - stream = IncrementalShortcutStream() - assert stream.source_defined_cursor - - -def test_stream_checkpoint_interval(patch_incremental_base_class): - stream = IncrementalShortcutStream() - # TODO: replace this with your expected checkpoint interval - expected_checkpoint_interval = None - assert stream.state_checkpoint_interval == expected_checkpoint_interval diff --git a/airbyte-integrations/connectors/source-shortcut/unit_tests/test_source.py b/airbyte-integrations/connectors/source-shortcut/unit_tests/test_source.py deleted file mode 100644 index 50f99f0bad6e..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/unit_tests/test_source.py +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# - -from unittest.mock import MagicMock - -from source_shortcut.source import SourceShortcut - - -def test_check_connection(mocker): - source = SourceShortcut() - logger_mock, config_mock = MagicMock(), MagicMock() - assert source.check_connection(logger_mock, config_mock) == (True, None) - - -def test_streams(mocker): - source = SourceShortcut() - config_mock = MagicMock() - streams = source.streams(config_mock) - # TODO: replace this with your streams number - expected_streams_number = 2 - assert len(streams) == expected_streams_number diff --git a/airbyte-integrations/connectors/source-shortcut/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-shortcut/unit_tests/test_streams.py deleted file mode 100644 index e367627f1b00..000000000000 --- a/airbyte-integrations/connectors/source-shortcut/unit_tests/test_streams.py +++ /dev/null @@ -1,83 +0,0 @@ -# -# Copyright (c) 2021 Airbyte, Inc., all rights reserved. -# - -from http import HTTPStatus -from unittest.mock import MagicMock - -import pytest -from source_shortcut.source import ShortcutStream - - -@pytest.fixture -def patch_base_class(mocker): - # Mock abstract methods to enable instantiating abstract class - mocker.patch.object(ShortcutStream, "path", "v0/example_endpoint") - mocker.patch.object(ShortcutStream, "primary_key", "test_primary_key") - mocker.patch.object(ShortcutStream, "__abstractmethods__", set()) - - -def test_request_params(patch_base_class): - stream = ShortcutStream() - # TODO: replace this with your input parameters - inputs = {"stream_slice": None, "stream_state": None, "next_page_token": None} - # TODO: replace this with your expected request parameters - expected_params = {} - assert stream.request_params(**inputs) == expected_params - - -def test_next_page_token(patch_base_class): - stream = ShortcutStream() - # TODO: replace this with your input parameters - inputs = {"response": MagicMock()} - # TODO: replace this with your expected next page token - expected_token = None - assert stream.next_page_token(**inputs) == expected_token - - -def test_parse_response(patch_base_class): - stream = ShortcutStream() - # TODO: replace this with your input parameters - inputs = {"response": MagicMock()} - # TODO: replace this with your expected parced object - expected_parsed_object = {} - assert next(stream.parse_response(**inputs)) == expected_parsed_object - - -def test_request_headers(patch_base_class): - stream = ShortcutStream() - # TODO: replace this with your input parameters - inputs = {"stream_slice": None, "stream_state": None, "next_page_token": None} - # TODO: replace this with your expected request headers - expected_headers = {} - assert stream.request_headers(**inputs) == expected_headers - - -def test_http_method(patch_base_class): - stream = ShortcutStream() - # TODO: replace this with your expected http request method - expected_method = "GET" - assert stream.http_method == expected_method - - -@pytest.mark.parametrize( - ("http_status", "should_retry"), - [ - (HTTPStatus.OK, False), - (HTTPStatus.BAD_REQUEST, False), - (HTTPStatus.TOO_MANY_REQUESTS, True), - (HTTPStatus.INTERNAL_SERVER_ERROR, True), - ], -) -def test_should_retry(patch_base_class, http_status, should_retry): - response_mock = MagicMock() - response_mock.status_code = http_status - stream = ShortcutStream() - assert stream.should_retry(response_mock) == should_retry - - -def test_backoff_time(patch_base_class): - response_mock = MagicMock() - stream = ShortcutStream() - expected_backoff_time = None - assert stream.backoff_time(response_mock) == expected_backoff_time