diff --git a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml index 46b1ca05fe89d..9a3840282dc0c 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -1167,6 +1167,13 @@ icon: pokeapi.svg sourceType: api releaseStage: alpha +- name: Polygon Stock API + sourceDefinitionId: 5807d72f-0abc-49f9-8fa5-ae820007032b + dockerRepository: airbyte/source-polygon-stock-api + dockerImageTag: 0.1.0 + documentationUrl: https://docs.airbyte.com/integrations/sources/polygon-stock-api + sourceType: api + releaseStage: alpha - name: PostHog sourceDefinitionId: af6d50ee-dddf-4126-a8ee-7faee990774f dockerRepository: airbyte/source-posthog diff --git a/airbyte-config/init/src/main/resources/seed/source_specs.yaml b/airbyte-config/init/src/main/resources/seed/source_specs.yaml index 5593ce11b07f6..5b38de2075780 100644 --- a/airbyte-config/init/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_specs.yaml @@ -10838,6 +10838,89 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] +- dockerImage: "airbyte/source-polygon-stock-api:0.1.0" + spec: + documentationUrl: "https://docs.airbyte.com/integrations/sources/airtable" + connectionSpecification: + $schema: "http://json-schema.org/draft-07/schema#" + title: "Weather API Spec" + type: "object" + required: + - "apiKey" + - "stocksTicker" + - "multiplier" + - "timespan" + - "start_date" + - "end_date" + additionalProperties: true + properties: + apiKey: + title: "API Key" + type: "string" + description: "Your API ACCESS Key" + airbyte_secret: true + stocksTicker: + title: "Stock Ticker" + type: "string" + description: "The exchange symbol that this item is traded under." + examples: + - "IBM" + - "MSFT" + multiplier: + title: "Multiplier" + type: "integer" + description: "The size of the timespan multiplier." + examples: + - 1 + - 2 + timespan: + title: "Timespan" + type: "string" + description: "The size of the time window." + examples: + - "day" + start_date: + title: "Start Date" + type: "string" + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + description: "The beginning date for the aggregate window." + examples: + - "2020-10-14" + end_date: + title: "End Date" + type: "string" + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + description: "The target date for the aggregate window." + examples: + - "2020-10-14" + adjusted: + title: "Adjusted" + type: "string" + description: "Determines whether or not the results are adjusted for splits.\ + \ By default, results are adjusted and set to true. Set this to false\ + \ to get results that are NOT adjusted for splits." + examples: + - "true" + - "false" + sort: + title: "Sort" + type: "string" + description: "Sort the results by timestamp. asc will return results in\ + \ ascending order (oldest at the top), desc will return results in descending\ + \ order (newest at the top)." + examples: + - "asc" + - "desc" + limit: + title: "Limit" + type: "integer" + description: "The target date for the aggregate window." + examples: + - 100 + - 120 + supportsNormalization: false + supportsDBT: false + supported_destination_sync_modes: [] - dockerImage: "airbyte/source-posthog:0.1.7" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/posthog" diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/.dockerignore b/airbyte-integrations/connectors/source-polygon-stock-api/.dockerignore new file mode 100644 index 0000000000000..d9b098c972093 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/.dockerignore @@ -0,0 +1,6 @@ +* +!Dockerfile +!main.py +!source_polygon_stock_api +!setup.py +!secrets diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/Dockerfile b/airbyte-integrations/connectors/source-polygon-stock-api/Dockerfile new file mode 100644 index 0000000000000..3b1dd791a1163 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/Dockerfile @@ -0,0 +1,38 @@ +FROM python:3.9.11-alpine3.15 as base + +# build and load all requirements +FROM base as builder +WORKDIR /airbyte/integration_code + +# upgrade pip to the latest version +RUN apk --no-cache upgrade \ + && pip install --upgrade pip \ + && apk --no-cache add tzdata build-base + + +COPY setup.py ./ +# install necessary packages to a temporary folder +RUN pip install --prefix=/install . + +# build a clean environment +FROM base +WORKDIR /airbyte/integration_code + +# copy all loaded and built libraries to a pure basic image +COPY --from=builder /install /usr/local +# add default timezone settings +COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime +RUN echo "Etc/UTC" > /etc/timezone + +# bash is installed for more convenient debugging. +RUN apk --no-cache add bash + +# copy payload code only +COPY main.py ./ +COPY source_polygon_stock_api ./source_polygon_stock_api + +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-polygon-stock-api diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/README.md b/airbyte-integrations/connectors/source-polygon-stock-api/README.md new file mode 100644 index 0000000000000..b32a733b8f96e --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/README.md @@ -0,0 +1,79 @@ +# Polygon Stock Api Source + +This is the repository for the Polygon Stock Api configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.io/integrations/sources/polygon-stock-api). + +## Local development + +#### Building via Gradle +You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. + +To build using Gradle, from the Airbyte repository root, run: +``` +./gradlew :airbyte-integrations:connectors:source-polygon-stock-api:build +``` + +#### Create credentials +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/polygon-stock-api) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_polygon_stock_api/spec.yaml` file. +Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. +See `integration_tests/sample_config.json` for a sample config file. + +**If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source polygon-stock-api test creds` +and place them into `secrets/config.json`. + +### Locally running the connector docker image + +#### Build +First, make sure you build the latest Docker image: +``` +docker build . -t airbyte/source-polygon-stock-api:dev +``` + +You can also build the connector image via Gradle: +``` +./gradlew :airbyte-integrations:connectors:source-polygon-stock-api: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-polygon-stock-api:dev spec +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-polygon-stock-api:dev check --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-polygon-stock-api:dev discover --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-polygon-stock-api:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json +``` +## Testing + +#### Acceptance Tests +Customize `acceptance-test-config.yml` file to configure tests. See [Source Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/source-acceptance-tests-reference) for more information. +If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. + +To run your integration tests with docker + +### Using gradle to run tests +All commands should be run from airbyte project root. +To run unit tests: +``` +./gradlew :airbyte-integrations:connectors:source-polygon-stock-api:unitTest +``` +To run acceptance and custom integration tests: +``` +./gradlew :airbyte-integrations:connectors:source-polygon-stock-api: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-polygon-stock-api/__init__.py b/airbyte-integrations/connectors/source-polygon-stock-api/__init__.py new file mode 100644 index 0000000000000..1100c1c58cf51 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/acceptance-test-config.yml b/airbyte-integrations/connectors/source-polygon-stock-api/acceptance-test-config.yml new file mode 100644 index 0000000000000..6ef9bf701dd90 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/acceptance-test-config.yml @@ -0,0 +1,38 @@ +# See [Source Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/source-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-polygon-stock-api:dev +acceptance_tests: + spec: + tests: + - spec_path: "source_polygon_stock_api/spec.yaml" + connection: + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" + discovery: + tests: + - config_path: "secrets/config.json" + basic_read: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + empty_streams: [] +# TODO uncomment this block to specify that the tests should assert the connector outputs the records provided in the input file a file +# expect_records: +# path: "integration_tests/expected_records.txt" +# extra_fields: no +# exact_order: no +# extra_records: yes + incremental: + bypass_reason: "This connector does not implement incremental sync" +# TODO uncomment this block this block if your connector implements incremental sync: +# tests: +# - config_path: "secrets/config.json" +# configured_catalog_path: "integration_tests/configured_catalog.json" +# future_state_path: "integration_tests/abnormal_state.json" + full_refresh: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-polygon-stock-api/acceptance-test-docker.sh new file mode 100644 index 0000000000000..c51577d10690c --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/acceptance-test-docker.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env sh + +# Build latest connector image +docker build . -t $(cat acceptance-test-config.yml | grep "connector_image" | head -n 1 | cut -d: -f2-) + +# Pull latest acctest image +docker pull airbyte/source-acceptance-test:latest + +# Run +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /tmp:/tmp \ + -v $(pwd):/test_input \ + airbyte/source-acceptance-test \ + --acceptance-test-config /test_input + diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/build.gradle b/airbyte-integrations/connectors/source-polygon-stock-api/build.gradle new file mode 100644 index 0000000000000..41db8677ed5eb --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'airbyte-python' + id 'airbyte-docker' + id 'airbyte-source-acceptance-test' +} + +airbytePython { + moduleDirectory 'source_polygon_stock_api' +} diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/__init__.py b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/__init__.py new file mode 100644 index 0000000000000..1100c1c58cf51 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/abnormal_state.json new file mode 100644 index 0000000000000..6f49f72327e60 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/abnormal_state.json @@ -0,0 +1,8 @@ +{ + "ticker": "microsoft", + "queryCount": 0, + "resultsCount": 0, + "adjusted": true, + "status": "OK", + "request_id": "2c243c1c9bc396cad059cd18253f3ab2" +} diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/acceptance.py new file mode 100644 index 0000000000000..1302b2f57e10e --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/acceptance.py @@ -0,0 +1,16 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +import pytest + +pytest_plugins = ("source_acceptance_test.plugin",) + + +@pytest.fixture(scope="session", autouse=True) +def connector_setup(): + """This fixture is a placeholder for external resources that acceptance test might require.""" + # TODO: setup test dependencies if needed. otherwise remove the TODO comments + yield + # TODO: clean up test dependencies diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/configured_catalog.json new file mode 100644 index 0000000000000..2686d60ea9841 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/configured_catalog.json @@ -0,0 +1,13 @@ +{ + "streams": [ + { + "stream": { + "name": "stock_api", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + } + ] +} diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/invalid_config.json new file mode 100644 index 0000000000000..0a4c9862b45cd --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/invalid_config.json @@ -0,0 +1,11 @@ +{ + "apiKey": "INVALID_API_KEY", + "limit": "120", + "sort": "asc", + "adjusted": "true", + "stocksTicker": "MSFT", + "multiplier": "1", + "timespan": "day", + "start_date": "2021-07-22", + "end_date": "2021-07-22" +} diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/sample_config.json new file mode 100644 index 0000000000000..113b8801448a8 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/sample_config.json @@ -0,0 +1,11 @@ +{ + "apiKey": "YOUR API KEY", + "limit": "120", + "sort": "asc", + "adjusted": "true", + "stocksTicker": "AAPL", + "multiplier": "1", + "timespan": "day", + "start_date": "2021-07-22", + "end_date": "2021-07-22" +} diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/sample_state.json new file mode 100644 index 0000000000000..3cd8779e34e8e --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/integration_tests/sample_state.json @@ -0,0 +1,21 @@ +{ + "ticker": "AAPL", + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "v": 77287356, + "vw": 146.991, + "o": 145.935, + "c": 146.8, + "h": 148.195, + "l": 145.81, + "t": 1626926400000, + "n": 480209 + } + ], + "status": "OK", + "request_id": "6aae8b7d3d4d2cd896085a840d2e3ed1", + "count": 1 +} diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/main.py b/airbyte-integrations/connectors/source-polygon-stock-api/main.py new file mode 100644 index 0000000000000..f5a2cac9ecec1 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/main.py @@ -0,0 +1,13 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +import sys + +from airbyte_cdk.entrypoint import launch +from source_polygon_stock_api import SourcePolygonStockApi + +if __name__ == "__main__": + source = SourcePolygonStockApi() + launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/requirements.txt b/airbyte-integrations/connectors/source-polygon-stock-api/requirements.txt new file mode 100644 index 0000000000000..0411042aa0911 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/requirements.txt @@ -0,0 +1,2 @@ +-e ../../bases/source-acceptance-test +-e . diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/setup.py b/airbyte-integrations/connectors/source-polygon-stock-api/setup.py new file mode 100644 index 0000000000000..0164c42e4b514 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/setup.py @@ -0,0 +1,29 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +from setuptools import find_packages, setup + +MAIN_REQUIREMENTS = [ + "airbyte-cdk~=0.1", +] + +TEST_REQUIREMENTS = [ + "pytest~=6.1", + "pytest-mock~=3.6.1", + "source-acceptance-test", +] + +setup( + name="source_polygon_stock_api", + description="Source implementation for Polygon Stock Api.", + author="Airbyte", + author_email="contact@airbyte.io", + packages=find_packages(), + install_requires=MAIN_REQUIREMENTS, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, + extras_require={ + "tests": TEST_REQUIREMENTS, + }, +) diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/__init__.py b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/__init__.py new file mode 100644 index 0000000000000..6a0b849243429 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/__init__.py @@ -0,0 +1,8 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +from .source import SourcePolygonStockApi + +__all__ = ["SourcePolygonStockApi"] diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/polygon_stock_api.yaml b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/polygon_stock_api.yaml new file mode 100644 index 0000000000000..85a1415b09b10 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/polygon_stock_api.yaml @@ -0,0 +1,41 @@ +version: "0.1.0" + +definitions: + selector: + extractor: + field_pointer: ["results"] + requester: + url_base: "https://api.polygon.io" + http_method: "GET" + authenticator: + type: ApiKeyAuthenticator + header: "X-CoinAPI-Key" + api_token: "{{ config['access_key'] }}" + retriever: + record_selector: + $ref: "*ref(definitions.selector)" + paginator: + type: NoPagination + requester: + $ref: "*ref(definitions.requester)" + base_stream: + retriever: + $ref: "*ref(definitions.retriever)" + + stream_slicer: + start_datetime: "{{ config['start_date'] }}T00:00:00.000000+0000" + end_datetime: "{{ config['start_date'] }}T00:00:00.000000+0000" + step: "1d" + + stock_api_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "stock_api" + primary_key: "t" + path: "/v2/aggs/ticker/{{ config['stocksTicker'] }}/range/{{ config['multiplier'] }}/{{ config['timespan'] }}/{{ config['start_date'] }}/{{ config['end_date'] }}?adjusted={{ config['adjusted'] }}&sort={{ config['sort'] }}&limit=120&apiKey={{ config['apiKey'] }}" +streams: + - "*ref(definitions.stock_api_stream)" + +check: + stream_names: + - "stock_api" diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/schemas/stock_api.json b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/schemas/stock_api.json new file mode 100644 index 0000000000000..0cf3fc66168ee --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/schemas/stock_api.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "properties": { + "v": { + "type": ["null", "number"] + }, + "vw": { + "type": ["null", "number"] + }, + "otc": { + "type": ["null", "boolean"] + }, + "o": { + "type": ["null", "number"] + }, + "c": { + "type": ["null", "number"] + }, + "h": { + "type": ["null", "number"] + }, + "l": { + "type": ["null", "number"] + }, + "t": { + "type": ["null", "integer"] + }, + "n": { + "type": ["null", "number"] + } + } +} diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/source.py b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/source.py new file mode 100644 index 0000000000000..e57f2f436ebb9 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/source.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource + +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. + +WARNING: Do not modify this file. +""" + + +# Declarative Source +class SourcePolygonStockApi(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "polygon_stock_api.yaml"}) diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/spec.yaml b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/spec.yaml new file mode 100644 index 0000000000000..5c2e5f9ea4589 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/spec.yaml @@ -0,0 +1,74 @@ +documentationUrl: https://docs.airbyte.com/integrations/sources/airtable +connectionSpecification: + $schema: http://json-schema.org/draft-07/schema# + title: Weather API Spec + type: object + required: + - apiKey + - stocksTicker + - multiplier + - timespan + - start_date + - end_date + additionalProperties: true + properties: + apiKey: + title: API Key + type: string + description: Your API ACCESS Key + airbyte_secret: true + stocksTicker: + title: Stock Ticker + type: string + description: The exchange symbol that this item is traded under. + examples: + - IBM + - MSFT + multiplier: + title: Multiplier + type: integer + description: The size of the timespan multiplier. + examples: + - 1 + - 2 + timespan: + title: Timespan + type: string + description: The size of the time window. + examples: + - day + start_date: + title: Start Date + type: string + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + description: The beginning date for the aggregate window. + examples: + - "2020-10-14" + end_date: + title: End Date + type: string + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + description: The target date for the aggregate window. + examples: + - "2020-10-14" + adjusted: + title: Adjusted + type: string + description: Determines whether or not the results are adjusted for splits. By default, results are adjusted and set to true. Set this to false to get results that are NOT adjusted for splits. + examples: + - "true" + - "false" + sort: + title: Sort + type: string + description: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top). + examples: + - "asc" + - "desc" + limit: + title: Limit + type: integer + description: The target date for the aggregate window. + examples: + - 100 + - 120 diff --git a/docs/integrations/sources/polygon-stock-api.md b/docs/integrations/sources/polygon-stock-api.md new file mode 100644 index 0000000000000..d15f5ce33553b --- /dev/null +++ b/docs/integrations/sources/polygon-stock-api.md @@ -0,0 +1,56 @@ +# Polygon Stock API + +## Sync overview + +This source can give information about stocks data available on +[PolygonStocksApi](https://polygon.io). It currently only supports Full Refresh +syncs. + +### Output schema + +This source is capable of syncing the following streams: + +* `stock_api` + +### Features + +| Feature | Supported? \(Yes/No\) | Notes | +|:------------------|:----------------------|:--------------------------------------------------------| +| Full Refresh Sync | Yes | | +| Incremental Sync | No | | + +### Performance considerations + +Polygon Stocks API allows only 5 API Calls/Minute on the free plan. Use of this connector +may require a paid plan based upon your requirements. + +## Getting started + +### Requirements + +1. Obtain an API key from [PolygonStocksApi](https://polygon.io). +2. Find out the exchange symbol of the stock also known as Ticker Symbol of the stock you can google it out and find it (E.x. : Exchange symbol for Microsoft is MSFT) +3. Choose and verify other options you required for fetching the stock details. [here](https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to). + +### Setup guide + +The following fields are required fields for the connector to work: +- `apiKey`: Your Polygon Stocks API key. +- `stocksTicker`: The ticker symbol of the `stock/equity`. +- `multiplier`: The size of the timespan multiplier. +- `timespan`: The +- `from`: The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp. +- `to`: The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp. +- (optional) `adjusted`: determines whether or not the results are adjusted for splits. By default, results are adjusted and set to true. Set this to false to get results that are NOT adjusted for splits. +- (optional) `sort`: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top). +- (optional) `limit`: Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements [Find-more](https://polygon.io/blog/aggs-api-updates/). + + + + + +## Changelog + +| Version | Date | Pull Request | Subject | +|:--------|:-----------|:---------------------------------------------------------|:-----------| +| 0.1.0 | 2022-11-02 | [18842](https://github.com/airbytehq/airbyte/pull/18842) | New source |