airbyte icon indicating copy to clipboard operation
airbyte copied to clipboard

🎉 Source Amazon Ads : Add attribution reports

Open ganpatagarwal opened this issue 2 years ago • 12 comments

What

*Add attribution reports

How

*Call attribution report API for different report types

Recommended reading order

  1. source.py
  2. streams/attribution_report.py

🚨 User Impact 🚨

No impact to existing functionality. Not a breaking change

Pre-merge Checklist

Updating a connector

Community member or Airbyter

  • [x] Grant edit access to maintainers (instructions)
  • [ ] Secrets in the connector's spec are annotated with airbyte_secret
  • [x] Unit & integration tests added and passing. Community members, please provide proof of success locally e.g: screenshot or copy-paste unit, integration, and acceptance test output. To run acceptance tests for a Python connector, follow instructions in the README. For java connectors run ./gradlew :airbyte-integrations:connectors:<name>:integrationTest.
  • [ ] Code reviews completed
  • [ ] Documentation updated
    • [ ] Connector's README.md
    • [ ] Connector's bootstrap.md. See description and examples
    • [x] Changelog updated in docs/integrations/<source or destination>/<name>.md including changelog. See changelog example
  • [x] PR name follows PR naming conventions

Airbyter

If this is a community PR, the Airbyte engineer reviewing this PR is responsible for the below items.

  • [ ] Create a non-forked branch based on this PR and test the below items on it
  • [ ] Build is successful
  • [ ] If new credentials are required for use in CI, add them to GSM. Instructions.
  • [ ] /test connector=connectors/<name> command is passing
  • [ ] New Connector version released on Dockerhub and connector version bumped by running the /publish command described here

Tests

Unit

Results (4.23s):
      55 passed
Name                                                              Stmts   Miss  Cover   Missing
-----------------------------------------------------------------------------------------------
source_amazon_ads/__init__.py                                         2      0   100%
source_amazon_ads/constants.py                                        1      0   100%
source_amazon_ads/schemas/__init__.py                                 7      0   100%
source_amazon_ads/schemas/attribution_report.py                      21      0   100%
source_amazon_ads/schemas/common.py                                  51      1    98%   26
source_amazon_ads/schemas/profile.py                                 16      0   100%
source_amazon_ads/schemas/sponsored_brands.py                        22      0   100%
source_amazon_ads/schemas/sponsored_display.py                       31      0   100%
source_amazon_ads/schemas/sponsored_products.py                      37      0   100%
source_amazon_ads/source.py                                          44      1    98%   129
source_amazon_ads/streams/__init__.py                                 7      0   100%
source_amazon_ads/streams/attribution_report.py                      78      0   100%
source_amazon_ads/streams/common.py                                  79      1    99%   157
source_amazon_ads/streams/profiles.py                                21      0   100%
source_amazon_ads/streams/report_streams/__init__.py                  5      0   100%
source_amazon_ads/streams/report_streams/brands_report.py            10      0   100%
source_amazon_ads/streams/report_streams/brands_video_report.py      10      0   100%
source_amazon_ads/streams/report_streams/display_report.py           16      0   100%
source_amazon_ads/streams/report_streams/products_report.py          18      0   100%
source_amazon_ads/streams/report_streams/report_streams.py          237     18    92%   137, 190-191, 243-244, 363-364, 396-398, 409-413, 427-428, 430
source_amazon_ads/streams/sponsored_brands.py                        17      0   100%
source_amazon_ads/streams/sponsored_display.py                       22      0   100%
source_amazon_ads/streams/sponsored_products.py                      32      0   100%
source_amazon_ads/utils.py                                            9      0   100%
unit_tests/__init__.py                                                0      0   100%
unit_tests/conftest.py                                               34      0   100%
unit_tests/test_attribution_report.py                                56      1    98%   47
unit_tests/test_report_streams.py                                   288      0   100%
unit_tests/test_source.py                                            47      0   100%
unit_tests/test_streams.py                                          126      1    99%   77
unit_tests/utils.py                                                  32      0   100%
-----------------------------------------------------------------------------------------------
TOTAL                                                              1376     23    98%
Integration

Put your integration tests output here.

Acceptance

Put your acceptance tests output here.

ganpatagarwal avatar Sep 06 '22 05:09 ganpatagarwal

Need help with acceptance tests.

With my version of secrets/config.json file, it's stuck after reaching 70%. Looks like tests are based for a specific ads account.

python -m pytest -p integration_tests.acceptance
Test session starts (platform: darwin, Python 3.9.11, pytest 6.1.2, pytest-sugar 0.9.5)
cachedir: .pytest_cache
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/Users/ganpatagarwal/stoke/airbyte/airbyte-integrations/connectors/source-amazon-ads/.hypothesis/examples')
rootdir: /Users/ganpatagarwal/stoke/airbyte, configfile: pytest.ini
plugins: sugar-0.9.5, requests-mock-1.9.3, mock-3.7.0, hypothesis-6.54.4, timeout-1.4.2, cov-3.0.0
collecting ...
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_config_match_spec[inputs0] ✓                                         3% ▍
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_match_expected[inputs0] ✓                                            6% ▋
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_docker_env[inputs0] ✓                                                9% ▉
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_oneof_usage[inputs0] ✓                                              12% █▎
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_required[inputs0] ✓                                                 15% █▌
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_optional[inputs0] ✓                                                 18% █▊
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_has_secret[inputs0] ✓                                               21% ██▎
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_secret_never_in_the_output[inputs0] ✓                               24% ██▌
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_defined_refs_exist_in_json_spec_file[inputs0] ✓                     27% ██▊
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_oauth_flow_parameters[inputs0] ✓                                    30% ███
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_backward_compatibility[inputs0] ✓                                   33% ███▍
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestSpec.test_additional_properties_is_true[inputs0] ✓                            36% ███▋
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestConnection.test_check[inputs0] ✓                                              39% ███▉
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestConnection.test_check[inputs1] ✓                                              42% ████▎
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_discover[inputs0] ✓                                            45% ████▋
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_defined_cursors_exist_in_schema[inputs0] ✓                     48% ████▉
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_defined_refs_exist_in_schema[inputs0] ✓                        52% █████▎
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_defined_keyword_exist_in_schema[inputs0-allOf] ✓               55% █████▌
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_defined_keyword_exist_in_schema[inputs0-not] ✓                 58% █████▊
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_primary_keys_exist_in_schema[inputs0] ✓                        61% ██████▏
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_streams_has_sync_modes[inputs0] ✓                              64% ██████▍
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_additional_properties_is_true[inputs0] ✓                       67% ██████▋
 airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py::TestDiscovery.test_backward_compatibility[inputs0] ✓                              70% ███████   ^C
{"type": "LOG", "log": {"level": "INFO", "message": "/Users/ganpatagarwal/stoke/airbyte/airbyte-integrations/connectors/source-amazon-ads - SAT run - 4d86c53ca5646a106dda7d35226e032637529b26 - PASSED"}}

ganpatagarwal avatar Sep 06 '22 06:09 ganpatagarwal

regarding the test being stuck at 70%, can you remove the expect_records section and try again?

      expect_records:
        path: "integration_tests/expected_records.txt"
        extra_fields: no
        exact_order: no
        extra_records: no

YiyangLi avatar Sep 08 '22 22:09 YiyangLi

@sajarin can you help cherry-pick this commit to the topic branch? https://github.com/YiyangLi/airbyte/commit/9341fc62a69b90ac114568b5d66a2faefba9d9bd

It's irrelevant to this topic branch. The acceptance test fails at TestDiscovery.test_backward_compatibility even in the master branch because of the missing data. I added the data back.

I don't know why, in my local test, the test is stuck at TestBasicRead.test_read[inputs0] for a long time, in both the topic branch and master branch.

To reproduce the issue, you can use the credential, but change the region from SANDBOX to NA.

YiyangLi avatar Sep 08 '22 22:09 YiyangLi

/test connector=connectors/source-amazon-ads

YiyangLi avatar Sep 09 '22 16:09 YiyangLi

/test connector=connectors/source-amazon-ads

:clock2: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3023863746 :x: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3023863746 :bug: https://gradle.com/s/mszvkqcli3gso

Build Failed

Test summary info:

=========================== short test summary info ============================
FAILED test_core.py::TestBasicRead::test_read[inputs0] - docker.errors.Contai...
FAILED test_full_refresh.py::TestFullRefresh::test_sequential_reads[inputs0]
FAILED test_incremental.py::TestIncremental::test_two_sequential_reads[inputs0]
FAILED test_incremental.py::TestIncremental::test_read_sequential_slices[inputs0]
================== 4 failed, 28 passed in 6678.75s (1:51:18) ===================

sajarin avatar Sep 09 '22 16:09 sajarin

@ganpatagarwal The CI throws an error of This profileID is not authorized to use Amazon Attribution. I guess that's why the acceptance tests are stuck. Can you provide the instruction about it? Or even better, can you update the doc for Amazon Ads? docs/integrations/sources/amazon-ads.md

Thanks.

YiyangLi avatar Sep 11 '22 17:09 YiyangLi

@YiyangLi

The amazon ads account I am using for testing is not given me any issues to fetch attribution report. We had been using the attribution feature on that account and used the same to fetch the reports via API.

If you are authorizing your developer application with advertising::campaign_management scope, it should have access to Attribution APIs

My guess would be limitations with the amazon ads account your are using with CI

https://advertising.amazon.com/API/docs/en-us/amazon-attribution/troubleshooting#i-get-a-403-error-when-i-call-an-amazon-attribution-endpoint-using-my-advertisers-profile-even-though-i-am-authorized

Amazon Attribution is currently available in beta to professional seller brand owners enrolled in Amazon Brand Registry and vendors that sell products on Amazon in the following markets: US, Canada, Mexico, UK, Germany, France, Italy, Spain, and Netherlands.

I have already added the link for amazon attribution reports in docs/integrations/sources/amazon-ads.md Please let me know if I should add any other information.

ganpatagarwal avatar Sep 12 '22 05:09 ganpatagarwal

@YiyangLi

The amazon ads account I am using for testing is not given me any issues to fetch attribution report. We had been using the attribution feature on that account and used the same to fetch the reports via API.

If you are authorizing your developer application with advertising::campaign_management scope, it should have access to Attribution APIs

My guess would be limitations with the amazon ads account your are using with CI

https://advertising.amazon.com/API/docs/en-us/amazon-attribution/troubleshooting#i-get-a-403-error-when-i-call-an-amazon-attribution-endpoint-using-my-advertisers-profile-even-though-i-am-authorized

Amazon Attribution is currently available in beta to professional seller brand owners enrolled in Amazon Brand Registry and vendors that sell products on Amazon in the following markets: US, Canada, Mexico, UK, Germany, France, Italy, Spain, and Netherlands.

I have already added the link for amazon attribution reports in docs/integrations/sources/amazon-ads.md Please let me know if I should add any other information.

Thank you, I will get the dev account and try to get a new token. Overall, the goal is to get acceptance tests passed at 100%, then we are good to merge.

So, are you able to complete the acceptance test? If not, you could bypass the expect_records by removing the section locally? It would be great if you could share the pass rate on your end.

YiyangLi avatar Sep 12 '22 17:09 YiyangLi

@YiyangLi

I started executing acceptance test iteratively on my local env.

First Error

------------------------------------------------------------------------------------- Captured log call --------------------------------------------------------------------------------------
ERROR    root:test_core.py:376
The sponsored_display_campaigns stream has the following schema errors:
163170956955202 is not of type 'null', 'string'

Failed validating 'type' in schema['properties']['portfolioId']:
    {'type': ['null', 'string']}

On instance['portfolioId']:
    163170956955202

Applied below fix

--- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/sponsored_display.py
+++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/schemas/sponsored_display.py
@@ -16,7 +16,7 @@ class DisplayCampaign(CatalogModel):
     endDate: str = None
     costType: str
     state: str
-    portfolioId: str = None
+    portfolioId: Decimal = None
     tactic: str
     deliveryProfile: str

Second Error With above fix applied , it's failing at backward compatibility check

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <source_acceptance_test.utils.backward_compatibility.CatalogDiffChecker object at 0x108e86ac0>, message = "The'type' field value was changed."
diff = {'dictionary_item_added': [<root['attribution_report_performance_adgroup'] t1:not present, t2:{'type': 'ob...}>, <root...ues_changed': [<root['sponsored_display_campaigns']['properties']['portfolioId']['type'][1] t1:'string', t2:'number'>]}

    def _raise_error(self, message: str, diff: DeepDiff):
>       raise NonBackwardCompatibleError(f"{message}. Diff: {diff.pretty()}", self.context)
E       source_acceptance_test.utils.backward_compatibility.NonBackwardCompatibleError: BackwardIncompatibilityContext.DISCOVER - The'type' field value was changed.. Diff: Item root['attribution_report_performance_adgroup'] added to dictionary.
E       Item root['attribution_report_performance_campaign'] added to dictionary.
E       Item root['attribution_report_performance_creative'] added to dictionary.
E       Item root['attribution_report_products'] added to dictionary.
E       Item root['sponsored_display_campaigns']['properties']['portfolioId']['type'][1] removed from iterable.

../../bases/source-acceptance-test/source_acceptance_test/utils/backward_compatibility.py:38: NonBackwardCompatibleError

How to fix this?

ganpatagarwal avatar Sep 13 '22 17:09 ganpatagarwal

it looks like portfolioId comes from sponsored_products stream, and it's expected to be a nullable string, but the data is an integer.

YiyangLi avatar Sep 14 '22 10:09 YiyangLi

@sajarin can you help me cherry-pick the commit https://github.com/YiyangLi/airbyte/commit/8a9ac8f07ecfbe1c99880d55130c03f18a68acf1 and run again the acceptance test for me?

YiyangLi avatar Sep 14 '22 10:09 YiyangLi

/test connector=connectors/source-amazon-ads

YiyangLi avatar Sep 14 '22 10:09 YiyangLi

/test connector=connectors/source-amazon-ads

:clock2: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3054665410 :x: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3054665410 :bug: https://gradle.com/s/ifdn3y5j7iy46

Build Failed

Test summary info:

=========================== short test summary info ============================
FAILED test_core.py::TestBasicRead::test_read[inputs0] - docker.errors.Contai...
FAILED test_full_refresh.py::TestFullRefresh::test_sequential_reads[inputs0]
FAILED test_incremental.py::TestIncremental::test_two_sequential_reads[inputs0]
================== 3 failed, 29 passed in 6439.61s (1:47:19) ===================

sajarin avatar Sep 14 '22 17:09 sajarin

/test connector=connectors/source-amazon-ads

:clock2: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3106402954 :white_check_mark: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3106402954 Python tests coverage:

Name                                                              Stmts   Miss  Cover
-------------------------------------------------------------------------------------
source_amazon_ads/utils.py                                            9      0   100%
source_amazon_ads/streams/sponsored_products.py                      32      0   100%
source_amazon_ads/streams/sponsored_display.py                       22      0   100%
source_amazon_ads/streams/sponsored_brands.py                        17      0   100%
source_amazon_ads/streams/report_streams/products_report.py          18      0   100%
source_amazon_ads/streams/report_streams/display_report.py           16      0   100%
source_amazon_ads/streams/report_streams/brands_video_report.py      10      0   100%
source_amazon_ads/streams/report_streams/brands_report.py            10      0   100%
source_amazon_ads/streams/report_streams/__init__.py                  5      0   100%
source_amazon_ads/streams/profiles.py                                21      0   100%
source_amazon_ads/streams/attribution_report.py                      81      0   100%
source_amazon_ads/streams/__init__.py                                 7      0   100%
source_amazon_ads/schemas/sponsored_products.py                      37      0   100%
source_amazon_ads/schemas/sponsored_display.py                       31      0   100%
source_amazon_ads/schemas/sponsored_brands.py                        22      0   100%
source_amazon_ads/schemas/profile.py                                 16      0   100%
source_amazon_ads/schemas/attribution_report.py                      21      0   100%
source_amazon_ads/schemas/__init__.py                                 7      0   100%
source_amazon_ads/constants.py                                        1      0   100%
source_amazon_ads/__init__.py                                         2      0   100%
source_amazon_ads/streams/common.py                                  79      1    99%
source_amazon_ads/schemas/common.py                                  51      1    98%
source_amazon_ads/source.py                                          44      1    98%
source_amazon_ads/streams/report_streams/report_streams.py          237     18    92%
-------------------------------------------------------------------------------------
TOTAL                                                               796     21    97%
	 Name                                                 Stmts   Miss  Cover   Missing
	 ----------------------------------------------------------------------------------
	 source_acceptance_test/base.py                          10      4    60%   15-18
	 source_acceptance_test/config.py                        83      6    93%   78-80, 84-86
	 source_acceptance_test/conftest.py                     164    164     0%   6-282
	 source_acceptance_test/plugin.py                        48     48     0%   6-104
	 source_acceptance_test/tests/test_core.py              329    111    66%   39, 50-58, 63-70, 74-75, 79-80, 164, 202-219, 228-236, 240-245, 251, 284-289, 327-334, 374-376, 379, 439-448, 477-478, 484, 487, 520-530, 543-568, 573-577
	 source_acceptance_test/tests/test_full_refresh.py       52      2    96%   34, 65
	 source_acceptance_test/tests/test_incremental.py       152     26    83%   21-23, 29-31, 36-43, 48-61, 239, 250-258
	 source_acceptance_test/utils/asserts.py                 37      2    95%   57-58
	 source_acceptance_test/utils/common.py                  77     17    78%   15-16, 24-30, 47-54, 64, 67
	 source_acceptance_test/utils/compare.py                 62     23    63%   21-51, 68, 97-99
	 source_acceptance_test/utils/connector_runner.py       112     50    55%   23-26, 32, 36, 39-67, 70-72, 75-77, 80-82, 85-87, 90-92, 95-113, 147-149
	 source_acceptance_test/utils/json_schema_helper.py     105     13    88%   30-31, 38, 41, 65-68, 96, 120, 190-192
	 ----------------------------------------------------------------------------------
	 TOTAL                                                 1358    466    66%

Build Passed

Test summary info:

All Passed

harshithmullapudi avatar Sep 22 '22 14:09 harshithmullapudi

@grubberr are we able to merge this?

sajarin avatar Sep 23 '22 15:09 sajarin

/test connector=connectors/source-amazon-ads

:clock2: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3128888397 :x: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3128888397 :bug: https://gradle.com/s/2zmhoymp77pk4

Build Failed

Test summary info:

=========================== short test summary info ============================
FAILED test_incremental.py::TestIncremental::test_read_sequential_slices[inputs0]
================== 1 failed, 31 passed in 4254.78s (1:10:54) ===================

sajarin avatar Sep 26 '22 15:09 sajarin

@sajarin

Failed: Timeout >2400.0s

According to the log, it looks like the Integration test timeouts at incremental test, can you help to run the test again? Thanks.

YiyangLi avatar Sep 26 '22 17:09 YiyangLi

/test connector=connectors/source-amazon-ads

:clock2: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3129700626 :x: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3129700626 :bug: https://gradle.com/s/ft72ypn6sndji

Build Failed

Test summary info:

=========================== short test summary info ============================
FAILED test_incremental.py::TestIncremental::test_two_sequential_reads[inputs0]
================== 1 failed, 31 passed in 3970.08s (1:06:10) ===================

sajarin avatar Sep 26 '22 17:09 sajarin

https://github.com/airbytehq/airbyte/pull/17202 there is a patch merged to master today, @ganpatagarwal can you rebase and try again? sorry for the inconvenience.

This branch has conflicts that must be resolved

The conflict is related to the doc, hope it's quick. docs/integrations/sources/amazon-ads.md

YiyangLi avatar Sep 28 '22 05:09 YiyangLi

Done !!

ganpatagarwal avatar Sep 28 '22 15:09 ganpatagarwal

/test connector=connectors/source-amazon-ads

:clock2: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3145122936 :white_check_mark: connectors/source-amazon-ads https://github.com/airbytehq/airbyte/actions/runs/3145122936 Python tests coverage:

Name                                                              Stmts   Miss  Cover
-------------------------------------------------------------------------------------
source_amazon_ads/utils.py                                            9      0   100%
source_amazon_ads/streams/sponsored_products.py                      32      0   100%
source_amazon_ads/streams/sponsored_display.py                       22      0   100%
source_amazon_ads/streams/sponsored_brands.py                        17      0   100%
source_amazon_ads/streams/report_streams/products_report.py          18      0   100%
source_amazon_ads/streams/report_streams/display_report.py           16      0   100%
source_amazon_ads/streams/report_streams/brands_video_report.py      10      0   100%
source_amazon_ads/streams/report_streams/brands_report.py            10      0   100%
source_amazon_ads/streams/report_streams/__init__.py                  5      0   100%
source_amazon_ads/streams/profiles.py                                21      0   100%
source_amazon_ads/streams/attribution_report.py                      81      0   100%
source_amazon_ads/streams/__init__.py                                 7      0   100%
source_amazon_ads/schemas/sponsored_products.py                      37      0   100%
source_amazon_ads/schemas/sponsored_display.py                       31      0   100%
source_amazon_ads/schemas/sponsored_brands.py                        22      0   100%
source_amazon_ads/schemas/profile.py                                 16      0   100%
source_amazon_ads/schemas/attribution_report.py                      21      0   100%
source_amazon_ads/schemas/__init__.py                                 7      0   100%
source_amazon_ads/constants.py                                        1      0   100%
source_amazon_ads/__init__.py                                         2      0   100%
source_amazon_ads/streams/common.py                                  79      1    99%
source_amazon_ads/schemas/common.py                                  51      1    98%
source_amazon_ads/source.py                                          44      1    98%
source_amazon_ads/streams/report_streams/report_streams.py          240     19    92%
-------------------------------------------------------------------------------------
TOTAL                                                               799     22    97%
	 Name                                                 Stmts   Miss  Cover   Missing
	 ----------------------------------------------------------------------------------
	 source_acceptance_test/base.py                          10      4    60%   15-18
	 source_acceptance_test/config.py                        83      6    93%   78-80, 84-86
	 source_acceptance_test/conftest.py                     164    164     0%   6-282
	 source_acceptance_test/plugin.py                        48     48     0%   6-104
	 source_acceptance_test/tests/test_core.py              329    111    66%   39, 50-58, 63-70, 74-75, 79-80, 164, 202-219, 228-236, 240-245, 251, 284-289, 327-334, 374-376, 379, 439-448, 477-478, 484, 487, 520-530, 543-568, 573-577
	 source_acceptance_test/tests/test_full_refresh.py       52      2    96%   34, 65
	 source_acceptance_test/tests/test_incremental.py       152     26    83%   21-23, 29-31, 36-43, 48-61, 239, 250-258
	 source_acceptance_test/utils/asserts.py                 37      2    95%   57-58
	 source_acceptance_test/utils/common.py                  77     17    78%   15-16, 24-30, 47-54, 64, 67
	 source_acceptance_test/utils/compare.py                 62     23    63%   21-51, 68, 97-99
	 source_acceptance_test/utils/connector_runner.py       112     50    55%   23-26, 32, 36, 39-67, 70-72, 75-77, 80-82, 85-87, 90-92, 95-113, 147-149
	 source_acceptance_test/utils/json_schema_helper.py     105     13    88%   30-31, 38, 41, 65-68, 96, 120, 190-192
	 ----------------------------------------------------------------------------------
	 TOTAL                                                 1358    466    66%

Build Passed

Test summary info:

All Passed

sajarin avatar Sep 28 '22 16:09 sajarin