From 1bc850a635545b56ce6e51eaaea07b23d3da5c03 Mon Sep 17 00:00:00 2001 From: "Roman Yermilov [GL]" <86300758+roman-yermilov-gl@users.noreply.github.com> Date: Thu, 16 May 2024 21:38:59 +0200 Subject: [PATCH] Add availability_sla_days and fixed_period_in_days to GET_VENDOR_TRAFFIC_REPORT stream (#38210) --- .../source-amazon-seller-partner/metadata.yaml | 2 +- .../source-amazon-seller-partner/pyproject.toml | 2 +- .../source_amazon_seller_partner/streams.py | 2 ++ .../unit_tests/integration/config.py | 1 + .../unit_tests/integration/request_builder.py | 10 ++++++++++ .../integration/test_report_based_streams.py | 10 +++++++--- docs/integrations/sources/amazon-seller-partner.md | 1 + 7 files changed, 23 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml b/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml index 56ed881536349..e4e23c9073db2 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml @@ -15,7 +15,7 @@ data: connectorSubtype: api connectorType: source definitionId: e55879a8-0ef8-4557-abcf-ab34c53ec460 - dockerImageTag: 4.2.3 + dockerImageTag: 4.2.4 dockerRepository: airbyte/source-amazon-seller-partner documentationUrl: https://docs.airbyte.com/integrations/sources/amazon-seller-partner githubIssueLabel: source-amazon-seller-partner diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/pyproject.toml b/airbyte-integrations/connectors/source-amazon-seller-partner/pyproject.toml index 081213e4e8fd3..e816c93c0c74c 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/pyproject.toml +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/pyproject.toml @@ -3,7 +3,7 @@ requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.poetry] -version = "4.2.3" +version = "4.2.4" name = "source-amazon-seller-partner" description = "Source implementation for Amazon Seller Partner." authors = ["Airbyte "] diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py index bef06abc8a305..8d509fe100bd8 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py @@ -854,6 +854,8 @@ class VendorInventoryReports(IncrementalAnalyticsStream): class VendorTrafficReport(IncrementalAnalyticsStream): name = "GET_VENDOR_TRAFFIC_REPORT" result_key = "trafficByAsin" + availability_sla_days = 3 + fixed_period_in_days = 1 class SellerAnalyticsSalesAndTrafficReports(IncrementalAnalyticsStream): diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/config.py b/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/config.py index d1decff994b27..75cccd73e3807 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/config.py +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/config.py @@ -18,6 +18,7 @@ CONFIG_START_DATE = "2023-01-01T00:00:00Z" CONFIG_END_DATE = "2023-01-30T00:00:00Z" +VENDOR_TRAFFIC_REPORT_CONFIG_END_DATE = "2023-01-01T23:59:59Z" NOW = pendulum.now(tz="utc") TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/request_builder.py b/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/request_builder.py index d14097dc3cd1b..9533125cdde9e 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/request_builder.py +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/request_builder.py @@ -32,6 +32,16 @@ def create_report_endpoint(cls, report_name: str) -> RequestBuilder: } return cls("reports/2021-06-30/reports").with_body(json.dumps(request_body)) + @classmethod + def create_vendor_traffic_report_endpoint(cls, report_name: str) -> RequestBuilder: + request_body = { + "reportType": report_name, + "marketplaceIds": [MARKETPLACE_ID], + "dataStartTime": "2023-01-01T00:00:00Z", + "dataEndTime": "2023-01-01T23:59:59Z", + } + return cls("reports/2021-06-30/reports").with_body(json.dumps(request_body)) + @classmethod def check_report_status_endpoint(cls, report_id: str) -> RequestBuilder: return cls(f"reports/2021-06-30/reports/{report_id}") diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/test_report_based_streams.py b/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/test_report_based_streams.py index d50bb9de9b72c..b270db46edd91 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/test_report_based_streams.py +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/unit_tests/integration/test_report_based_streams.py @@ -17,7 +17,7 @@ from airbyte_protocol.models import AirbyteStateMessage, FailureType, SyncMode from source_amazon_seller_partner.streams import ReportProcessingStatus -from .config import CONFIG_END_DATE, CONFIG_START_DATE, MARKETPLACE_ID, NOW, ConfigBuilder +from .config import CONFIG_END_DATE, CONFIG_START_DATE, MARKETPLACE_ID, NOW, VENDOR_TRAFFIC_REPORT_CONFIG_END_DATE, ConfigBuilder from .request_builder import RequestBuilder from .response_builder import build_response, response_with_status from .utils import assert_message_in_log_output, config, find_template, get_stream_by_name, mock_auth, read_output @@ -68,7 +68,8 @@ def _create_report_request(report_name: str) -> RequestBuilder: A POST request needed to start generating a report on Amazon SP platform. Performed in ReportsAmazonSPStream._create_report method. """ - + if report_name == "GET_VENDOR_TRAFFIC_REPORT": + return RequestBuilder.create_vendor_traffic_report_endpoint(report_name) return RequestBuilder.create_report_endpoint(report_name) @@ -388,8 +389,11 @@ def test_given_report_status_fatal_when_read_then_exception_raised( output = self._read(stream_name, config(), expecting_exception=True) assert output.errors[-1].trace.error.failure_type == FailureType.config_error + config_end_date = CONFIG_END_DATE + if stream_name == "GET_VENDOR_TRAFFIC_REPORT": + config_end_date = VENDOR_TRAFFIC_REPORT_CONFIG_END_DATE assert ( - f"Failed to retrieve the report '{stream_name}' for period {CONFIG_START_DATE}-{CONFIG_END_DATE}. This will be read during the next sync. Error: {{'errorDetails': 'Error in report request: This report type requires the reportPeriod, distributorView, sellingProgram reportOption to be specified. Please review the document for this report type on GitHub, provide a value for this reportOption in your request, and try again.'}}" + f"Failed to retrieve the report '{stream_name}' for period {CONFIG_START_DATE}-{config_end_date}. This will be read during the next sync. Error: {{'errorDetails': 'Error in report request: This report type requires the reportPeriod, distributorView, sellingProgram reportOption to be specified. Please review the document for this report type on GitHub, provide a value for this reportOption in your request, and try again.'}}" ) in output.errors[-1].trace.error.message @pytest.mark.parametrize( diff --git a/docs/integrations/sources/amazon-seller-partner.md b/docs/integrations/sources/amazon-seller-partner.md index 41c7c4f177218..ed1a5deb1100b 100644 --- a/docs/integrations/sources/amazon-seller-partner.md +++ b/docs/integrations/sources/amazon-seller-partner.md @@ -175,6 +175,7 @@ Information about rate limits you may find [here](https://developer-docs.amazon. | Version | Date | Pull Request | Subject | |:--------|:-----------|:----------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 4.2.4 | 2024-05-15 | [#38210](https://github.com/airbytehq/airbyte/pull/38210) | Fix `GET_VENDOR_TRAFFIC_REPORT` stream with report option `reportPeriod=DAY` | | 4.2.3 | 2024-05-09 | [#38078](https://github.com/airbytehq/airbyte/pull/38078) | Hide OSS-only streams in report options config for cloud users | | 4.2.2 | 2024-04-24 | [#36630](https://github.com/airbytehq/airbyte/pull/36630) | Schema descriptions and CDK 0.80.0 | | 4.2.1 | 2024-04-08 | [#36895](https://github.com/airbytehq/airbyte/pull/36895) | Fix `reportPeriod` day query params |