diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py
index dc20266eb346..058413428679 100644
--- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py
@@ -6,13 +6,12 @@
from typing import Any, List, Mapping, Tuple
from airbyte_cdk.logger import AirbyteLogger
-from airbyte_cdk.models import ConnectorSpecification
from airbyte_cdk.sources import AbstractSource
from airbyte_cdk.sources.streams import Stream
from airbyte_cdk.sources.streams.http.auth import Oauth2Authenticator
+from .constants import AmazonAdsRegion
from .schemas import Profile
-from .spec import AmazonAdsConfig, advanced_auth
from .streams import (
Profiles,
SponsoredBrandsAdGroups,
@@ -45,12 +44,12 @@ def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) ->
:param logger: logger object
:return Tuple[bool, any]: (True, None) if the input config can be used to connect to the API successfully, (False, error) otherwise.
"""
- config = AmazonAdsConfig(**config)
# Check connection by sending list of profiles request. Its most simple
# request, not require additional parameters and usually has few data
# in response body.
# It doesnt support pagination so there is no sense of reading single
# record, it would fetch all the data anyway.
+ self._set_defaults(config)
Profiles(config, authenticator=self._make_authenticator(config)).get_all_profiles()
return True, None
@@ -59,7 +58,7 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]:
:param config: A Mapping of the user input configuration as defined in the connector spec.
:return list of streams for current source
"""
- config = AmazonAdsConfig(**config)
+ self._set_defaults(config)
auth = self._make_authenticator(config)
stream_args = {"config": config, "authenticator": auth}
# All data for individual Amazon Ads stream divided into sets of data for
@@ -91,24 +90,21 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]:
]
return [profiles_stream, *[stream_class(**stream_args) for stream_class in non_profile_stream_classes]]
- def spec(self, *args) -> ConnectorSpecification:
- return ConnectorSpecification(
- documentationUrl="https://docs.airbyte.com/integrations/sources/amazon-ads",
- connectionSpecification=AmazonAdsConfig.schema(),
- advanced_auth=advanced_auth,
- )
-
@staticmethod
- def _make_authenticator(config: AmazonAdsConfig):
+ def _make_authenticator(config: Mapping[str, Any]):
return Oauth2Authenticator(
token_refresh_endpoint=TOKEN_URL,
- client_id=config.client_id,
- client_secret=config.client_secret,
- refresh_token=config.refresh_token,
+ client_id=config["client_id"],
+ client_secret=config["client_secret"],
+ refresh_token=config["refresh_token"],
)
@staticmethod
- def _choose_profiles(config: AmazonAdsConfig, profiles: List[Profile]):
- if not config.profiles:
+ def _set_defaults(config: Mapping[str, Any]):
+ config["region"] = AmazonAdsRegion.NA
+
+ @staticmethod
+ def _choose_profiles(config: Mapping[str, Any], profiles: List[Profile]):
+ if not config.get("profiles"):
return profiles
- return list(filter(lambda profile: profile.profileId in config.profiles, profiles))
+ return list(filter(lambda profile: profile.profileId in config["profiles"], profiles))
diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.py
deleted file mode 100644
index bf7a598f0791..000000000000
--- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#
-# Copyright (c) 2022 Airbyte, Inc., all rights reserved.
-#
-
-from typing import List
-
-from airbyte_cdk.models import AdvancedAuth, AuthFlowType, OAuthConfigSpecification
-from airbyte_cdk.sources.utils.schema_helpers import expand_refs
-from pydantic import BaseModel, Extra, Field
-from source_amazon_ads.constants import AmazonAdsRegion
-
-
-class AmazonAdsConfig(BaseModel):
- class Config:
- title = "Amazon Ads Spec"
- # ignore extra attributes during model initialization
- # https://pydantic-docs.helpmanual.io/usage/model_config/
- extra = Extra.ignore
- # it's default, but better to be more explicit
- schema_extra = {"additionalProperties": True}
-
- auth_type: str = Field(default="oauth2.0", const=True, order=0)
-
- client_id: str = Field(
- title="Client ID",
- description='The client ID of your Amazon Ads developer application. See the docs for more information.',
- order=1,
- )
-
- client_secret: str = Field(
- title="Client Secret",
- description='The client secret of your Amazon Ads developer application. See the docs for more information.',
- airbyte_secret=True,
- order=2,
- )
-
- refresh_token: str = Field(
- title="Refresh Token",
- description='Amazon Ads refresh token. See the docs for more information on how to obtain this token.',
- airbyte_secret=True,
- order=3,
- )
-
- region: AmazonAdsRegion = Field(
- title="Region *",
- description='Region to pull data from (EU/NA/FE/SANDBOX). See docs for more details.',
- default=AmazonAdsRegion.NA,
- order=4,
- )
-
- report_wait_timeout: int = Field(
- title="Report Wait Timeout *",
- description="Timeout duration in minutes for Reports. Default is 30 minutes.",
- default=30,
- examples=[30, 120],
- order=5,
- )
-
- report_generation_max_retries: int = Field(
- title="Report Generation Maximum Retries *",
- description="Maximum retries Airbyte will attempt for fetching report data. Default is 5.",
- default=5,
- examples=[5, 10, 15],
- order=6,
- )
-
- start_date: str = Field(
- None,
- title="Start Date (Optional)",
- description="The Start date for collecting reports, should not be more than 60 days in the past. In YYYY-MM-DD format",
- examples=["2022-10-10", "2022-10-22"],
- order=7,
- )
-
- profiles: List[int] = Field(
- None,
- title="Profile IDs (Optional)",
- description='Profile IDs you want to fetch data for. See docs for more details.',
- order=8,
- )
-
- @classmethod
- def schema(cls, **kwargs):
- schema = super().schema(**kwargs)
- expand_refs(schema)
- # Transform pydantic generated enum for region
- if schema["properties"]["region"].get("allOf"):
- schema["properties"]["region"] = {**schema["properties"]["region"]["allOf"][0], **schema["properties"]["region"]}
- schema["properties"]["region"].pop("allOf")
- return schema
-
-
-advanced_auth = AdvancedAuth(
- auth_flow_type=AuthFlowType.oauth2_0,
- predicate_key=["auth_type"],
- predicate_value="oauth2.0",
- oauth_config_specification=OAuthConfigSpecification(
- complete_oauth_output_specification={
- "type": "object",
- "additionalProperties": False,
- "properties": {"refresh_token": {"type": "string", "path_in_connector_config": ["refresh_token"]}},
- },
- complete_oauth_server_input_specification={
- "type": "object",
- "additionalProperties": False,
- "properties": {"client_id": {"type": "string"}, "client_secret": {"type": "string"}},
- },
- complete_oauth_server_output_specification={
- "type": "object",
- "additionalProperties": False,
- "properties": {
- "client_id": {"type": "string", "path_in_connector_config": ["client_id"]},
- "client_secret": {"type": "string", "path_in_connector_config": ["client_secret"]},
- },
- },
- ),
-)
diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.yaml b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.yaml
new file mode 100644
index 000000000000..ee50f4b4e95e
--- /dev/null
+++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.yaml
@@ -0,0 +1,128 @@
+---
+documentationUrl: https://docs.airbyte.com/integrations/sources/amazon-ads
+connectionSpecification:
+ title: Amazon Ads Spec
+ type: object
+ properties:
+ auth_type:
+ title: Auth Type
+ const: oauth2.0
+ order: 0
+ type: string
+ client_id:
+ title: Client ID
+ description:
+ The client ID of your Amazon Ads developer application. See the
+ docs
+ for more information.
+ order: 1
+ type: string
+ client_secret:
+ title: Client Secret
+ description:
+ The client secret of your Amazon Ads developer application. See
+ the docs
+ for more information.
+ airbyte_secret: true
+ order: 2
+ type: string
+ refresh_token:
+ title: Refresh Token
+ description:
+ Amazon Ads refresh token. See the docs
+ for more information on how to obtain this token.
+ airbyte_secret: true
+ order: 3
+ type: string
+ region:
+ title: Region *
+ description:
+ Region to pull data from (EU/NA/FE/SANDBOX). See docs
+ for more details.
+ enum:
+ - NA
+ - EU
+ - FE
+ - SANDBOX
+ type: string
+ default: NA
+ order: 4
+ report_wait_timeout:
+ title: Report Wait Timeout *
+ description: Timeout duration in minutes for Reports. Default is 30 minutes.
+ default: 30
+ examples:
+ - 30
+ - 120
+ order: 5
+ type: integer
+ report_generation_max_retries:
+ title: Report Generation Maximum Retries *
+ description:
+ Maximum retries Airbyte will attempt for fetching report data.
+ Default is 5.
+ default: 5
+ examples:
+ - 5
+ - 10
+ - 15
+ order: 6
+ type: integer
+ start_date:
+ title: Start Date (Optional)
+ description:
+ The Start date for collecting reports, should not be more than
+ 60 days in the past. In YYYY-MM-DD format
+ examples:
+ - "2022-10-10"
+ - "2022-10-22"
+ order: 7
+ type: string
+ profiles:
+ title: Profile IDs (Optional)
+ description:
+ Profile IDs you want to fetch data for. See docs
+ for more details.
+ order: 8
+ type: array
+ items:
+ type: integer
+ required:
+ - client_id
+ - client_secret
+ - refresh_token
+ additionalProperties: true
+advanced_auth:
+ auth_flow_type: oauth2.0
+ predicate_key:
+ - auth_type
+ predicate_value: oauth2.0
+ oauth_config_specification:
+ complete_oauth_output_specification:
+ type: object
+ additionalProperties: false
+ properties:
+ refresh_token:
+ type: string
+ path_in_connector_config:
+ - refresh_token
+ complete_oauth_server_input_specification:
+ type: object
+ additionalProperties: false
+ properties:
+ client_id:
+ type: string
+ client_secret:
+ type: string
+ complete_oauth_server_output_specification:
+ type: object
+ additionalProperties: false
+ properties:
+ client_id:
+ type: string
+ path_in_connector_config:
+ - client_id
+ client_secret:
+ type: string
+ path_in_connector_config:
+ - client_secret
diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/common.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/common.py
index c983af4e9587..f84b59a0f16a 100644
--- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/common.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/common.py
@@ -14,7 +14,6 @@
from source_amazon_ads.constants import URL_MAPPING
from source_amazon_ads.schemas import CatalogModel
from source_amazon_ads.schemas.profile import Profile
-from source_amazon_ads.spec import AmazonAdsConfig
"""
This class hierarchy may seem overcomplicated so here is a visualization of
@@ -74,10 +73,10 @@ class BasicAmazonAdsStream(Stream, ABC):
Base class for all Amazon Ads streams.
"""
- def __init__(self, config: AmazonAdsConfig, profiles: List[Profile] = None):
+ def __init__(self, config: Mapping[str, Any], profiles: List[Profile] = None):
self._profiles = profiles or []
- self._client_id = config.client_id
- self._url = URL_MAPPING[config.region]
+ self._client_id = config["client_id"]
+ self._url = URL_MAPPING[config["region"]]
@property
@abstractmethod
@@ -98,7 +97,7 @@ class AmazonAdsStream(HttpStream, BasicAmazonAdsStream):
Class for getting data from streams that based on single http request.
"""
- def __init__(self, config: AmazonAdsConfig, *args, profiles: List[Profile] = None, **kwargs):
+ def __init__(self, config: Mapping[str, Any], *args, profiles: List[Profile] = None, **kwargs):
# Each AmazonAdsStream instance are dependant on list of profiles.
BasicAmazonAdsStream.__init__(self, config, profiles=profiles)
HttpStream.__init__(self, *args, **kwargs)
diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py
index 369137d387a5..4ebaa733978f 100644
--- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py
@@ -22,7 +22,6 @@
from pendulum import DateTime
from pydantic import BaseModel
from source_amazon_ads.schemas import CatalogModel, MetricsReport, Profile
-from source_amazon_ads.spec import AmazonAdsConfig
from source_amazon_ads.streams.common import BasicAmazonAdsStream
logger = AirbyteLogger()
@@ -101,14 +100,14 @@ class ReportStream(BasicAmazonAdsStream, ABC):
REPORT_DATE_FORMAT = "YYYYMMDD"
cursor_field = "reportDate"
- def __init__(self, config: AmazonAdsConfig, profiles: List[Profile], authenticator: Oauth2Authenticator):
+ def __init__(self, config: Mapping[str, Any], profiles: List[Profile], authenticator: Oauth2Authenticator):
self._authenticator = authenticator
self._session = requests.Session()
self._model = self._generate_model()
- self.report_wait_timeout = timedelta(minutes=config.report_wait_timeout).total_seconds
- self.report_generation_maximum_retries = config.report_generation_max_retries
+ self.report_wait_timeout = timedelta(minutes=config.get("report_wait_timeout", 30)).total_seconds
+ self.report_generation_maximum_retries = config.get("report_generation_max_retries", 5)
# Set start date from config file, should be in UTC timezone.
- self._start_date = pendulum.parse(config.start_date).set(tz="UTC") if config.start_date else None
+ self._start_date = pendulum.parse(config.get("start_date")).set(tz="UTC") if config.get("start_date") else None
super().__init__(config, profiles)
@property
diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py
index a774e5e53153..727f81d7001f 100644
--- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py
@@ -6,12 +6,13 @@
@fixture
-def test_config():
+def config():
return {
"client_id": "test_client_id",
"client_secret": "test_client_secret",
"scope": "test_scope",
"refresh_token": "test_refresh",
+ "region": "NA",
}
diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py
index 07d3b51b7c10..3edac2ffabc5 100644
--- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py
@@ -13,7 +13,6 @@
from pytest import raises
from requests.exceptions import ConnectionError
from source_amazon_ads.schemas.profile import AccountInfo, Profile
-from source_amazon_ads.spec import AmazonAdsConfig
from source_amazon_ads.streams import (
SponsoredBrandsReportStream,
SponsoredBrandsVideoReportStream,
@@ -105,14 +104,13 @@ def make_profiles(profile_type="seller"):
@responses.activate
-def test_display_report_stream(test_config):
+def test_display_report_stream(config):
setup_responses(
init_response=REPORT_INIT_RESPONSE,
status_response=REPORT_STATUS_RESPONSE,
metric_response=METRIC_RESPONSE,
)
- config = AmazonAdsConfig(**test_config)
profiles = make_profiles()
stream = SponsoredDisplayReportStream(config, profiles, authenticator=mock.MagicMock())
@@ -130,14 +128,13 @@ def test_display_report_stream(test_config):
@responses.activate
-def test_products_report_stream(test_config):
+def test_products_report_stream(config):
setup_responses(
init_response_products=REPORT_INIT_RESPONSE,
status_response=REPORT_STATUS_RESPONSE,
metric_response=METRIC_RESPONSE,
)
- config = AmazonAdsConfig(**test_config)
profiles = make_profiles(profile_type="vendor")
stream = SponsoredProductsReportStream(config, profiles, authenticator=mock.MagicMock())
@@ -147,14 +144,13 @@ def test_products_report_stream(test_config):
@responses.activate
-def test_brands_report_stream(test_config):
+def test_brands_report_stream(config):
setup_responses(
init_response_brands=REPORT_INIT_RESPONSE,
status_response=REPORT_STATUS_RESPONSE,
metric_response=METRIC_RESPONSE,
)
- config = AmazonAdsConfig(**test_config)
profiles = make_profiles()
stream = SponsoredBrandsReportStream(config, profiles, authenticator=mock.MagicMock())
@@ -164,14 +160,13 @@ def test_brands_report_stream(test_config):
@responses.activate
-def test_brands_video_report_stream(test_config):
+def test_brands_video_report_stream(config):
setup_responses(
init_response_brands=REPORT_INIT_RESPONSE,
status_response=REPORT_STATUS_RESPONSE,
metric_response=METRIC_RESPONSE,
)
- config = AmazonAdsConfig(**test_config)
profiles = make_profiles()
stream = SponsoredBrandsVideoReportStream(config, profiles, authenticator=mock.MagicMock())
@@ -181,8 +176,7 @@ def test_brands_video_report_stream(test_config):
@responses.activate
-def test_display_report_stream_init_failure(mocker, test_config):
- config = AmazonAdsConfig(**test_config)
+def test_display_report_stream_init_failure(mocker, config):
profiles = make_profiles()
stream = SponsoredDisplayReportStream(config, profiles, authenticator=mock.MagicMock())
stream_slice = {"reportDate": "20210725"}
@@ -199,9 +193,8 @@ def test_display_report_stream_init_failure(mocker, test_config):
@responses.activate
-def test_display_report_stream_init_http_exception(mocker, test_config):
+def test_display_report_stream_init_http_exception(mocker, config):
mocker.patch("time.sleep", lambda x: None)
- config = AmazonAdsConfig(**test_config)
profiles = make_profiles()
stream = SponsoredDisplayReportStream(config, profiles, authenticator=mock.MagicMock())
stream_slice = {"reportDate": "20210725"}
@@ -213,9 +206,8 @@ def test_display_report_stream_init_http_exception(mocker, test_config):
@responses.activate
-def test_display_report_stream_init_too_many_requests(mocker, test_config):
+def test_display_report_stream_init_too_many_requests(mocker, config):
mocker.patch("time.sleep", lambda x: None)
- config = AmazonAdsConfig(**test_config)
profiles = make_profiles()
stream = SponsoredDisplayReportStream(config, profiles, authenticator=mock.MagicMock())
stream_slice = {"reportDate": "20210725"}
@@ -269,7 +261,7 @@ def test_display_report_stream_init_too_many_requests(mocker, test_config):
],
)
@responses.activate
-def test_display_report_stream_backoff(mocker, test_config, modifiers, expected):
+def test_display_report_stream_backoff(mocker, config, modifiers, expected):
mocker.patch("time.sleep")
setup_responses(init_response=REPORT_INIT_RESPONSE, metric_response=METRIC_RESPONSE)
@@ -292,7 +284,6 @@ def __call__(self, request):
callback = StatusCallback()
responses.add_callback(responses.GET, re.compile(r"https://advertising-api.amazon.com/v2/reports/[^/]+$"), callback=callback)
- config = AmazonAdsConfig(**test_config)
profiles = make_profiles()
stream = SponsoredDisplayReportStream(config, profiles, authenticator=mock.MagicMock())
stream_slice = {"reportDate": "20210725"}
@@ -307,8 +298,7 @@ def __call__(self, request):
@freeze_time("2021-07-30 04:26:08")
@responses.activate
-def test_display_report_stream_slices_full_refresh(test_config):
- config = AmazonAdsConfig(**test_config)
+def test_display_report_stream_slices_full_refresh(config):
stream = SponsoredDisplayReportStream(config, None, authenticator=mock.MagicMock())
slices = stream.stream_slices(SyncMode.full_refresh, cursor_field=stream.cursor_field)
assert slices == [{"reportDate": "20210730"}]
@@ -316,8 +306,7 @@ def test_display_report_stream_slices_full_refresh(test_config):
@freeze_time("2021-07-30 04:26:08")
@responses.activate
-def test_display_report_stream_slices_incremental(test_config):
- config = AmazonAdsConfig(**test_config)
+def test_display_report_stream_slices_incremental(config):
stream = SponsoredDisplayReportStream(config, None, authenticator=mock.MagicMock())
stream_state = {"reportDate": "20210726"}
slices = stream.stream_slices(SyncMode.incremental, cursor_field=stream.cursor_field, stream_state=stream_state)
diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py
index 812cd676dca7..52876c71b9f7 100644
--- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py
@@ -22,35 +22,35 @@ def setup_responses():
@responses.activate
-def test_discover(test_config):
+def test_discover(config):
setup_responses()
source = SourceAmazonAds()
- catalog = source.discover(None, test_config)
+ catalog = source.discover(None, config)
catalog = AirbyteMessage(type=Type.CATALOG, catalog=catalog).dict(exclude_unset=True)
schemas = [stream["json_schema"] for stream in catalog["catalog"]["streams"]]
for schema in schemas:
Draft4Validator.check_schema(schema)
-def test_spec(test_config):
+def test_spec():
source = SourceAmazonAds()
- spec = source.spec()
+ spec = source.spec(None)
assert isinstance(spec, ConnectorSpecification)
@responses.activate
-def test_check(test_config):
+def test_check(config):
setup_responses()
source = SourceAmazonAds()
- assert source.check(None, test_config) == AirbyteConnectionStatus(status=Status.SUCCEEDED)
+ assert source.check(None, config) == AirbyteConnectionStatus(status=Status.SUCCEEDED)
assert len(responses.calls) == 2
@responses.activate
-def test_source_streams(test_config):
+def test_source_streams(config):
setup_responses()
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
assert len(streams) == 18
actual_stream_names = {stream.name for stream in streams}
expected_stream_names = set(
diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py
index 2de4fe0a5611..43400b76a9f7 100644
--- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_streams.py
@@ -78,11 +78,11 @@ def get_stream_by_name(streams, stream_name):
@responses.activate
-def test_streams_profile(test_config, profiles_response):
+def test_streams_profile(config, profiles_response):
setup_responses(profiles_response=profiles_response)
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
profile_stream = get_stream_by_name(streams, "profiles")
schema = profile_stream.get_json_schema()
@@ -97,7 +97,7 @@ def test_streams_profile(test_config, profiles_response):
@responses.activate
-def test_streams_campaigns_4_vendors(test_config, profiles_response, campaigns_response):
+def test_streams_campaigns_4_vendors(config, profiles_response, campaigns_response):
profiles_response = json.loads(profiles_response)
for profile in profiles_response:
profile["accountInfo"]["type"] = "vendor"
@@ -105,7 +105,7 @@ def test_streams_campaigns_4_vendors(test_config, profiles_response, campaigns_r
setup_responses(profiles_response=profiles_response, campaigns_response=campaigns_response)
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
profile_stream = get_stream_by_name(streams, "profiles")
campaigns_stream = get_stream_by_name(streams, "sponsored_display_campaigns")
profile_records = get_all_stream_records(profile_stream)
@@ -118,7 +118,7 @@ def test_streams_campaigns_4_vendors(test_config, profiles_response, campaigns_r
[1, 2, 5, 1000000],
)
@responses.activate
-def test_streams_campaigns_pagination(mocker, test_config, profiles_response, campaigns_response, page_size):
+def test_streams_campaigns_pagination(mocker, config, profiles_response, campaigns_response, page_size):
mocker.patch("source_amazon_ads.streams.common.SubProfilesStream.page_size", page_size)
profiles_response = json.loads(profiles_response)
for profile in profiles_response:
@@ -127,7 +127,7 @@ def test_streams_campaigns_pagination(mocker, test_config, profiles_response, ca
setup_responses(profiles_response=profiles_response)
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
profile_stream = get_stream_by_name(streams, "profiles")
campaigns_stream = get_stream_by_name(streams, "sponsored_display_campaigns")
campaigns = json.loads(campaigns_response)
@@ -153,7 +153,7 @@ def campaigns_paginated_response_cb(request):
@pytest.mark.parametrize(("status_code"), [HTTPStatus.FORBIDDEN, HTTPStatus.UNAUTHORIZED])
@responses.activate
-def test_streams_campaigns_pagination_403_error(mocker, status_code, test_config, profiles_response, campaigns_response):
+def test_streams_campaigns_pagination_403_error(mocker, status_code, config, profiles_response, campaigns_response):
setup_responses(profiles_response=profiles_response)
responses.add(
responses.GET,
@@ -162,7 +162,7 @@ def test_streams_campaigns_pagination_403_error(mocker, status_code, test_config
status=status_code,
)
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
campaigns_stream = get_stream_by_name(streams, "sponsored_display_campaigns")
with pytest.raises(requests.exceptions.HTTPError):
@@ -170,7 +170,7 @@ def test_streams_campaigns_pagination_403_error(mocker, status_code, test_config
@responses.activate
-def test_streams_campaigns_pagination_403_error_expected(mocker, test_config, profiles_response, campaigns_response):
+def test_streams_campaigns_pagination_403_error_expected(mocker, config, profiles_response, campaigns_response):
setup_responses(profiles_response=profiles_response)
responses.add(
responses.GET,
@@ -179,7 +179,7 @@ def test_streams_campaigns_pagination_403_error_expected(mocker, test_config, pr
status=403,
)
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
campaigns_stream = get_stream_by_name(streams, "sponsored_display_campaigns")
campaigns_records = get_all_stream_records(campaigns_stream)
@@ -196,7 +196,7 @@ def test_streams_campaigns_pagination_403_error_expected(mocker, test_config, pr
)
@responses.activate
def test_streams_displays(
- test_config,
+ config,
stream_name,
endpoint,
profiles_response,
@@ -212,7 +212,7 @@ def test_streams_displays(
)
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
test_stream = get_stream_by_name(streams, stream_name)
records = get_all_stream_records(test_stream)
@@ -238,11 +238,11 @@ def test_streams_displays(
],
)
@responses.activate
-def test_streams_brands_and_products(test_config, stream_name, endpoint, profiles_response):
+def test_streams_brands_and_products(config, stream_name, endpoint, profiles_response):
setup_responses(profiles_response=profiles_response, generic_response=endpoint)
source = SourceAmazonAds()
- streams = source.streams(test_config)
+ streams = source.streams(config)
test_stream = get_stream_by_name(streams, stream_name)
records = get_all_stream_records(test_stream)