From 699ad08ba4418fc99e4e1fba0510c22c2cb2e6af Mon Sep 17 00:00:00 2001 From: Agata Walukiewicz Date: Tue, 10 Dec 2024 10:05:56 +0100 Subject: [PATCH 1/3] add ultracart connector --- .../connectors/source-ultracart/README.md | 103 ++++++++++++++++++ .../connectors/source-ultracart/__init__.py | 3 + .../acceptance-test-config.yml | 37 +++++++ .../integration_tests/__init__.py | 3 + .../integration_tests/abnormal_state.json | 5 + .../integration_tests/acceptance.py | 16 +++ .../integration_tests/configured_catalog.json | 22 ++++ .../integration_tests/invalid_config.json | 3 + .../integration_tests/sample_config.json | 3 + .../integration_tests/sample_state.json | 5 + .../connectors/source-ultracart/main.py | 13 +++ .../connectors/source-ultracart/metadata.yaml | 35 ++++++ .../source-ultracart/pyproject.toml | 27 +++++ .../source_ultracart/__init__.py | 8 ++ .../source_ultracart/manifest.yaml | 102 +++++++++++++++++ .../source-ultracart/source_ultracart/run.py | 13 +++ .../source_ultracart/schemas/TODO.md | 16 +++ .../source_ultracart/schemas/customers.json | 16 +++ .../source_ultracart/schemas/employees.json | 19 ++++ .../source_ultracart/source.py | 18 +++ 20 files changed, 467 insertions(+) create mode 100644 airbyte-integrations/connectors/source-ultracart/README.md create mode 100644 airbyte-integrations/connectors/source-ultracart/__init__.py create mode 100644 airbyte-integrations/connectors/source-ultracart/acceptance-test-config.yml create mode 100644 airbyte-integrations/connectors/source-ultracart/integration_tests/__init__.py create mode 100644 airbyte-integrations/connectors/source-ultracart/integration_tests/abnormal_state.json create mode 100644 airbyte-integrations/connectors/source-ultracart/integration_tests/acceptance.py create mode 100644 airbyte-integrations/connectors/source-ultracart/integration_tests/configured_catalog.json create mode 100644 airbyte-integrations/connectors/source-ultracart/integration_tests/invalid_config.json create mode 100644 airbyte-integrations/connectors/source-ultracart/integration_tests/sample_config.json create mode 100644 airbyte-integrations/connectors/source-ultracart/integration_tests/sample_state.json create mode 100644 airbyte-integrations/connectors/source-ultracart/main.py create mode 100644 airbyte-integrations/connectors/source-ultracart/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-ultracart/pyproject.toml create mode 100644 airbyte-integrations/connectors/source-ultracart/source_ultracart/__init__.py create mode 100644 airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml create mode 100644 airbyte-integrations/connectors/source-ultracart/source_ultracart/run.py create mode 100644 airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/TODO.md create mode 100644 airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/customers.json create mode 100644 airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/employees.json create mode 100644 airbyte-integrations/connectors/source-ultracart/source_ultracart/source.py diff --git a/airbyte-integrations/connectors/source-ultracart/README.md b/airbyte-integrations/connectors/source-ultracart/README.md new file mode 100644 index 000000000000..f991172bf69a --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/README.md @@ -0,0 +1,103 @@ +# Ultracart Source + +This is the repository for the Ultracart configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.com/integrations/sources/ultracart). + +## Local development + +### Prerequisites + +* Python (`^3.9`) +* Poetry (`^1.7`) - installation instructions [here](https://python-poetry.org/docs/#installation) + + + +### Installing the connector + +From this connector directory, run: +```bash +poetry install --with dev +``` + + +### Create credentials + +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.com/integrations/sources/ultracart) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `src/source_ultracart/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 `sample_files/sample_config.json` for a sample config file. + + +### Locally running the connector + +``` +poetry run source-ultracart spec +poetry run source-ultracart check --config secrets/config.json +poetry run source-ultracart discover --config secrets/config.json +poetry run source-ultracart read --config secrets/config.json --catalog sample_files/configured_catalog.json +``` + +### Running tests + +To run tests locally, from the connector directory run: + +``` +poetry run pytest tests +``` + +### Building the docker image + +1. Install [`airbyte-ci`](https://github.com/airbytehq/airbyte/blob/master/airbyte-ci/connectors/pipelines/README.md) +2. Run the following command to build the docker image: +```bash +airbyte-ci connectors --name=source-ultracart build +``` + +An image will be available on your host with the tag `airbyte/source-ultracart:dev`. + + +### Running as a docker container + +Then run any of the connector commands as follows: +``` +docker run --rm airbyte/source-ultracart:dev spec +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-ultracart:dev check --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-ultracart:dev discover --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-ultracart:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json +``` + +### Running our CI test suite + +You can run our full test suite locally using [`airbyte-ci`](https://github.com/airbytehq/airbyte/blob/master/airbyte-ci/connectors/pipelines/README.md): +```bash +airbyte-ci connectors --name=source-ultracart test +``` + +### Customizing acceptance Tests + +Customize `acceptance-test-config.yml` file to configure acceptance tests. See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-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. + +### Dependency Management + +All of your dependencies should be managed via Poetry. +To add a new dependency, run: +```bash +poetry add +``` + +Please commit the changes to `pyproject.toml` and `poetry.lock` files. + +## 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 our test suite: `airbyte-ci connectors --name=source-ultracart test` +2. Bump the connector version (please follow [semantic versioning for connectors](https://docs.airbyte.com/contributing-to-airbyte/resources/pull-requests-handbook/#semantic-versioning-for-connectors)): + - bump the `dockerImageTag` value in in `metadata.yaml` + - bump the `version` value in `pyproject.toml` +3. Make sure the `metadata.yaml` content is up to date. +4. Make sure the connector documentation and its changelog is up to date (`docs/integrations/sources/ultracart.md`). +5. Create a Pull Request: use [our PR naming conventions](https://docs.airbyte.com/contributing-to-airbyte/resources/pull-requests-handbook/#pull-request-title-convention). +6. Pat yourself on the back for being an awesome contributor. +7. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. +8. Once your PR is merged, the new version of the connector will be automatically published to Docker Hub and our connector registry. \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-ultracart/__init__.py b/airbyte-integrations/connectors/source-ultracart/__init__.py new file mode 100644 index 000000000000..66f6de8cb2bb --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-ultracart/acceptance-test-config.yml b/airbyte-integrations/connectors/source-ultracart/acceptance-test-config.yml new file mode 100644 index 000000000000..e852f7eed301 --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/acceptance-test-config.yml @@ -0,0 +1,37 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-ultracart:dev +acceptance_tests: + spec: + tests: + - spec_path: "source_ultracart/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.jsonl" +# exact_order: no + 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: +# 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-ultracart/integration_tests/__init__.py b/airbyte-integrations/connectors/source-ultracart/integration_tests/__init__.py new file mode 100644 index 000000000000..66f6de8cb2bb --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/integration_tests/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-ultracart/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-ultracart/integration_tests/abnormal_state.json new file mode 100644 index 000000000000..52b0f2c2118f --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/integration_tests/abnormal_state.json @@ -0,0 +1,5 @@ +{ + "todo-stream-name": { + "todo-field-name": "todo-abnormal-value" + } +} diff --git a/airbyte-integrations/connectors/source-ultracart/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-ultracart/integration_tests/acceptance.py new file mode 100644 index 000000000000..aaeb7f6c2529 --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/integration_tests/acceptance.py @@ -0,0 +1,16 @@ +# +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +# + + +import pytest + +pytest_plugins = ("connector_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-ultracart/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-ultracart/integration_tests/configured_catalog.json new file mode 100644 index 000000000000..36f0468db0d8 --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/integration_tests/configured_catalog.json @@ -0,0 +1,22 @@ +{ + "streams": [ + { + "stream": { + "name": "customers", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "employees", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + } + ] +} diff --git a/airbyte-integrations/connectors/source-ultracart/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-ultracart/integration_tests/invalid_config.json new file mode 100644 index 000000000000..f3732995784f --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/integration_tests/invalid_config.json @@ -0,0 +1,3 @@ +{ + "todo-wrong-field": "this should be an incomplete config file, used in standard tests" +} diff --git a/airbyte-integrations/connectors/source-ultracart/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-ultracart/integration_tests/sample_config.json new file mode 100644 index 000000000000..ecc4913b84c7 --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/integration_tests/sample_config.json @@ -0,0 +1,3 @@ +{ + "fix-me": "TODO" +} diff --git a/airbyte-integrations/connectors/source-ultracart/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-ultracart/integration_tests/sample_state.json new file mode 100644 index 000000000000..3587e579822d --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/integration_tests/sample_state.json @@ -0,0 +1,5 @@ +{ + "todo-stream-name": { + "todo-field-name": "value" + } +} diff --git a/airbyte-integrations/connectors/source-ultracart/main.py b/airbyte-integrations/connectors/source-ultracart/main.py new file mode 100644 index 000000000000..9c5ddb478cac --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/main.py @@ -0,0 +1,13 @@ +# +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +# + + +import sys + +from airbyte_cdk.entrypoint import launch +from source_ultracart import SourceUltracart + +if __name__ == "__main__": + source = SourceUltracart() + launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-ultracart/metadata.yaml b/airbyte-integrations/connectors/source-ultracart/metadata.yaml new file mode 100644 index 000000000000..566ab9c6255c --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/metadata.yaml @@ -0,0 +1,35 @@ +data: + allowedHosts: + hosts: + - TODO # Please change to the hostname of the source. + registries: + oss: + enabled: true + cloud: + enabled: false + remoteRegistries: + pypi: + enabled: true + packageName: airbyte-source-ultracart + connectorBuildOptions: + # Please update to the latest version of the connector base image. + # https://hub.docker.com/r/airbyte/python-connector-base + # Please use the full address with sha256 hash to guarantee build reproducibility. + baseImage: docker.io/airbyte/python-connector-base:1.2.0@sha256:c22a9d97464b69d6ef01898edf3f8612dc11614f05a84984451dde195f337db9 + connectorSubtype: api + connectorType: source + definitionId: 43db2b78-57e6-434e-aed6-bf5433562e16 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-ultracart + githubIssueLabel: source-ultracart + icon: ultracart.svg + license: MIT + name: Ultracart + releaseDate: TODO + releaseStage: alpha + supportLevel: community + documentationUrl: https://docs.airbyte.com/integrations/sources/ultracart + tags: + - language:python + - cdk:low-code +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-ultracart/pyproject.toml b/airbyte-integrations/connectors/source-ultracart/pyproject.toml new file mode 100644 index 000000000000..82c7c7907cfa --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/pyproject.toml @@ -0,0 +1,27 @@ +[build-system] +requires = [ "poetry-core>=1.0.0",] +build-backend = "poetry.core.masonry.api" + +[tool.poetry] +version = "0.1.0" +name = "source-ultracart" +description = "Source implementation for ultracart." +authors = [ "Airbyte ",] +license = "MIT" +readme = "README.md" +documentation = "https://docs.airbyte.com/integrations/sources/ultracart" +homepage = "https://airbyte.com" +repository = "https://github.com/airbytehq/airbyte" +packages = [ { include = "source_ultracart" }, {include = "main.py" } ] + +[tool.poetry.dependencies] +python = "^3.9,<3.12" +airbyte-cdk = "^0" + +[tool.poetry.scripts] +source-ultracart = "source_ultracart.run:run" + +[tool.poetry.group.dev.dependencies] +requests-mock = "*" +pytest-mock = "*" +pytest = "*" diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/__init__.py b/airbyte-integrations/connectors/source-ultracart/source_ultracart/__init__.py new file mode 100644 index 000000000000..0c967cb597ca --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/__init__.py @@ -0,0 +1,8 @@ +# +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +# + + +from .source import SourceUltracart + +__all__ = ["SourceUltracart"] diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml b/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml new file mode 100644 index 000000000000..4631f281217b --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml @@ -0,0 +1,102 @@ +version: 0.51.16 +type: DeclarativeSource +check: + type: CheckStream + stream_names: + - customers +streams: + - type: DeclarativeStream + name: customers + primary_key: + - customer_profile_oid + schema_loader: + type: InlineSchemaLoader + schema: + $schema: http://json-schema.org/schema# + properties: + business_notes: + type: string + customer_profile_oid: + type: number + email: + type: string + last_modified_by: + type: string + merchant_id: + type: string + signup_dts: + type: string + type: object + retriever: + type: SimpleRetriever + requester: + type: HttpRequester + url_base: https://secure.ultracart.com/rest/v2 + path: /customer/customers + http_method: GET + request_parameters: + _sort: +last_modified_dts + request_headers: + User-Agent: PostmanRuntime/7.42.0 + X-UltraCart-Api-Version: '2017-03-01' + authenticator: + type: BearerAuthenticator + api_token: '{{ config[''api_key''] }}' + request_body_json: {} + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - customers + paginator: + type: DefaultPaginator + page_token_option: + type: RequestOption + inject_into: request_parameter + field_name: _offset + page_size_option: + type: RequestOption + field_name: _limit + inject_into: request_parameter + pagination_strategy: + type: OffsetIncrement + page_size: 2 + incremental_sync: + type: DatetimeBasedCursor + cursor_field: last_modified_dts + cursor_datetime_formats: + - '%Y-%m-%dT%H:%M:%S%z' + datetime_format: '%Y-%m-%dT%H:%M:%S%z' + start_datetime: + type: MinMaxDatetime + datetime: '{{ config[''start_date''] }}' + datetime_format: '%Y-%m-%dT%H:%M:%SZ' + start_time_option: + inject_into: request_parameter + field_name: _since + type: RequestOption +spec: + connection_specification: + $schema: http://json-schema.org/draft-07/schema# + type: object + required: + - start_date + - api_key + properties: + start_date: + type: string + title: Start date + format: date-time + pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ + order: 0 + api_key: + type: string + title: Access Token + airbyte_secret: true + order: 1 + additionalProperties: true + type: Spec +metadata: + autoImportSchema: + customers: true \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/run.py b/airbyte-integrations/connectors/source-ultracart/source_ultracart/run.py new file mode 100644 index 000000000000..c724afe12c67 --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/run.py @@ -0,0 +1,13 @@ +# +# Copyright (c) 2024 Airbyte, Inc., all rights reserved. +# + + +import sys + +from airbyte_cdk.entrypoint import launch +from .source import SourceUltracart + +def run(): + source = SourceUltracart() + launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/TODO.md b/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/TODO.md new file mode 100644 index 000000000000..a604f678a7b0 --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/TODO.md @@ -0,0 +1,16 @@ +# TODO: Define your stream schemas +Your connector must describe the schema of each stream it can output using [JSONSchema](https://json-schema.org). + +You can describe the schema of your streams using one `.json` file per stream. + +## Static schemas +From the `ultracart.yaml` configuration file, you read the `.json` files in the `schemas/` directory. You can refer to a schema in your configuration file using the `schema_loader` component's `file_path` field. For example: +``` +schema_loader: + type: JsonSchema + file_path: "./source_ultracart/schemas/customers.json" +``` +Every stream specified in the configuration file should have a corresponding `.json` schema file. + +Delete this file once you're done. Or don't. Up to you :) + diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/customers.json b/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/customers.json new file mode 100644 index 000000000000..9a4b13485836 --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/customers.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "signup_date": { + "type": ["null", "string"], + "format": "date-time" + } + } +} diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/employees.json b/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/employees.json new file mode 100644 index 000000000000..2fa01a0fa1ff --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/schemas/employees.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "id": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "years_of_service": { + "type": ["null", "integer"] + }, + "start_date": { + "type": ["null", "string"], + "format": "date-time" + } + } +} diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/source.py b/airbyte-integrations/connectors/source-ultracart/source_ultracart/source.py new file mode 100644 index 000000000000..850176f204fd --- /dev/null +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/source.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2024 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 SourceUltracart(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "manifest.yaml"}) From 43990974581437c9daeaeb5945399cb431d5aaac Mon Sep 17 00:00:00 2001 From: Agata Walukiewicz Date: Wed, 18 Dec 2024 11:18:20 +0100 Subject: [PATCH 2/3] bump version --- .../source-ultracart/source_ultracart/manifest.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml b/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml index 4631f281217b..ec3f994b413b 100644 --- a/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml @@ -36,6 +36,7 @@ streams: http_method: GET request_parameters: _sort: +last_modified_dts + _expand: billing request_headers: User-Agent: PostmanRuntime/7.42.0 X-UltraCart-Api-Version: '2017-03-01' @@ -73,9 +74,9 @@ streams: datetime: '{{ config[''start_date''] }}' datetime_format: '%Y-%m-%dT%H:%M:%SZ' start_time_option: - inject_into: request_parameter - field_name: _since type: RequestOption + field_name: _since + inject_into: request_parameter spec: connection_specification: $schema: http://json-schema.org/draft-07/schema# From 519eedc20625868264b8f5c5afd5848913a0fd1d Mon Sep 17 00:00:00 2001 From: Agata Walukiewicz Date: Fri, 20 Dec 2024 14:55:33 +0100 Subject: [PATCH 3/3] bump manifest --- .../source-ultracart/source_ultracart/manifest.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml b/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml index ec3f994b413b..db7fa7dc33d9 100644 --- a/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml +++ b/airbyte-integrations/connectors/source-ultracart/source_ultracart/manifest.yaml @@ -36,7 +36,7 @@ streams: http_method: GET request_parameters: _sort: +last_modified_dts - _expand: billing + _expand: billing,privacy request_headers: User-Agent: PostmanRuntime/7.42.0 X-UltraCart-Api-Version: '2017-03-01' @@ -62,7 +62,7 @@ streams: inject_into: request_parameter pagination_strategy: type: OffsetIncrement - page_size: 2 + page_size: 200 incremental_sync: type: DatetimeBasedCursor cursor_field: last_modified_dts