python-amazon-ad-api 1.4.0__tar.gz → 1.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/PKG-INFO +3 -1
  2. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/README.md +2 -0
  3. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/v1/__init__.py +4 -0
  4. python_amazon_ad_api-1.4.2/ad_api/api/v1/ad_associations.py +138 -0
  5. python_amazon_ad_api-1.4.2/ad_api/api/v1/advertiser_accounts.py +122 -0
  6. python_amazon_ad_api-1.4.2/ad_api/version.py +1 -0
  7. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/python_amazon_ad_api.egg-info/PKG-INFO +3 -1
  8. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/python_amazon_ad_api.egg-info/SOURCES.txt +2 -0
  9. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/setup.cfg +1 -1
  10. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/setup.py +1 -1
  11. python_amazon_ad_api-1.4.0/ad_api/version.py +0 -1
  12. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/LICENSE +0 -0
  13. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/__init__.py +0 -0
  14. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/__init__.py +0 -0
  15. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/account.py +0 -0
  16. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/account_budgets.py +0 -0
  17. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/advertising_test_account.py +0 -0
  18. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/attribution.py +0 -0
  19. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/audiences.py +0 -0
  20. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/billing.py +0 -0
  21. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/brand_metrics.py +0 -0
  22. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/creative_assets.py +0 -0
  23. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/eligibility.py +0 -0
  24. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/exports.py +0 -0
  25. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/history.py +0 -0
  26. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/insights.py +0 -0
  27. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/invoices.py +0 -0
  28. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/localization.py +0 -0
  29. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/manager_accounts.py +0 -0
  30. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/metadata.py +0 -0
  31. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/portfolios.py +0 -0
  32. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/portfolios_v3.py +0 -0
  33. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/profiles.py +0 -0
  34. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/recommendations.py +0 -0
  35. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/reports.py +0 -0
  36. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/__init__.py +0 -0
  37. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/ad_creatives_v4.py +0 -0
  38. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/ad_groups.py +0 -0
  39. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/ad_groups_v4.py +0 -0
  40. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/ads_v4.py +0 -0
  41. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/benchmarks.py +0 -0
  42. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/bid_recommendations.py +0 -0
  43. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/brands.py +0 -0
  44. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/budget_rules.py +0 -0
  45. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/campaigns.py +0 -0
  46. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/campaigns_v4.py +0 -0
  47. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/forecast.py +0 -0
  48. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/keywords.py +0 -0
  49. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/keywords_recommendations.py +0 -0
  50. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/landing_page_asins.py +0 -0
  51. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/media.py +0 -0
  52. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/migration.py +0 -0
  53. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/negative_keywords.py +0 -0
  54. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/negative_product_targeting.py +0 -0
  55. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/optimization_rules.py +0 -0
  56. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/product_targeting.py +0 -0
  57. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/recommendations.py +0 -0
  58. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/reports.py +0 -0
  59. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/stores.py +0 -0
  60. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/targeting_categories.py +0 -0
  61. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/targeting_recommendations.py +0 -0
  62. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sb/themes.py +0 -0
  63. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/__init__.py +0 -0
  64. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/ad_groups.py +0 -0
  65. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/bid_recommendations.py +0 -0
  66. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/brand_safety.py +0 -0
  67. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/budget_rules.py +0 -0
  68. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/campaigns.py +0 -0
  69. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/campaigns_budget_usage.py +0 -0
  70. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/creatives.py +0 -0
  71. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/forecast.py +0 -0
  72. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/negative_product_targeting.py +0 -0
  73. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/product_ads.py +0 -0
  74. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/product_targeting.py +0 -0
  75. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/recommendations.py +0 -0
  76. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/reports.py +0 -0
  77. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/snapshots.py +0 -0
  78. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sd/targeting_recommendations.py +0 -0
  79. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/__init__.py +0 -0
  80. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/ad_groups_v3.py +0 -0
  81. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/bid_recommendations_v3.py +0 -0
  82. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/budget_initial_recommendation.py +0 -0
  83. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/budget_recommendations.py +0 -0
  84. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/budget_rules.py +0 -0
  85. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/budget_rules_recommendations.py +0 -0
  86. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/campaign_consolidated_recommendations.py +0 -0
  87. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/campaign_negative_keywords_v3.py +0 -0
  88. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/campaign_negative_targets.py +0 -0
  89. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/campaigns_budget_usage.py +0 -0
  90. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/campaigns_v3.py +0 -0
  91. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/campaings_optimization.py +0 -0
  92. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/keywords_v3.py +0 -0
  93. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/negative_keywords_v3.py +0 -0
  94. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/negative_product_targeting_v3.py +0 -0
  95. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/product_ads_v3.py +0 -0
  96. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/product_recommendations.py +0 -0
  97. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/product_targeting_v3.py +0 -0
  98. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/ranked_keywords_recommendations.py +0 -0
  99. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/sp/schedule_based_bid_optimization.py +0 -0
  100. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/stores.py +0 -0
  101. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/stream.py +0 -0
  102. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/v1/ad_extensions.py +0 -0
  103. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/v1/ad_groups.py +0 -0
  104. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/v1/ads.py +0 -0
  105. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/v1/campaigns.py +0 -0
  106. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/v1/targets.py +0 -0
  107. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/api/validation_configurations.py +0 -0
  108. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/auth/__init__.py +0 -0
  109. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/auth/access_token_client.py +0 -0
  110. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/auth/access_token_response.py +0 -0
  111. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/auth/credentials.py +0 -0
  112. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/auth/exceptions.py +0 -0
  113. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/__init__.py +0 -0
  114. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/api_response.py +0 -0
  115. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/base_client.py +0 -0
  116. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/client.py +0 -0
  117. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/config.py +0 -0
  118. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/credential_provider.py +0 -0
  119. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/exceptions.py +0 -0
  120. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/helpers.py +0 -0
  121. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/marketplaces.py +0 -0
  122. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/ad_api/base/utils.py +0 -0
  123. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/pyproject.toml +0 -0
  124. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/python_amazon_ad_api.egg-info/dependency_links.txt +0 -0
  125. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/python_amazon_ad_api.egg-info/requires.txt +0 -0
  126. {python_amazon_ad_api-1.4.0 → python_amazon_ad_api-1.4.2}/python_amazon_ad_api.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-amazon-ad-api
3
- Version: 1.4.0
3
+ Version: 1.4.2
4
4
  Summary: Python wrapper for the Amazon Advertising API
5
5
  Home-page: https://github.com/denisneuf/python-amazon-ad-api
6
6
  Author: Daniel Alvaro
@@ -305,6 +305,8 @@ The v1 API lives under `/adsApi/v1/` and is **not** split by product: every call
305
305
  * [Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ads.html#ad_api.api.v1.Ads.Ads.query_ads)
306
306
  * [Targets](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/targets.html#ad_api.api.v1.Targets.Targets.query_targets)
307
307
  * [Ad Extensions](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ad_extensions.html#ad_api.api.v1.AdExtensions.AdExtensions.query_ad_extensions)
308
+ * [Advertiser Accounts](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/advertiser_accounts.html#ad_api.api.v1.AdvertiserAccounts.AdvertiserAccounts.query_advertiser_accounts)
309
+ * [Ad Associations](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ad_associations.html#ad_api.api.v1.AdAssociations.AdAssociations.query_ad_associations)
308
310
 
309
311
 
310
312
  ### [Modules Available Sponsored Products](https://python-amazon-ad-api.readthedocs.io/en/latest/sp.html)
@@ -277,6 +277,8 @@ The v1 API lives under `/adsApi/v1/` and is **not** split by product: every call
277
277
  * [Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ads.html#ad_api.api.v1.Ads.Ads.query_ads)
278
278
  * [Targets](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/targets.html#ad_api.api.v1.Targets.Targets.query_targets)
279
279
  * [Ad Extensions](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ad_extensions.html#ad_api.api.v1.AdExtensions.AdExtensions.query_ad_extensions)
280
+ * [Advertiser Accounts](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/advertiser_accounts.html#ad_api.api.v1.AdvertiserAccounts.AdvertiserAccounts.query_advertiser_accounts)
281
+ * [Ad Associations](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ad_associations.html#ad_api.api.v1.AdAssociations.AdAssociations.query_ad_associations)
280
282
 
281
283
 
282
284
  ### [Modules Available Sponsored Products](https://python-amazon-ad-api.readthedocs.io/en/latest/sp.html)
@@ -3,6 +3,8 @@ from .ad_groups import AdGroups
3
3
  from .ads import Ads
4
4
  from .targets import Targets
5
5
  from .ad_extensions import AdExtensions
6
+ from .advertiser_accounts import AdvertiserAccounts
7
+ from .ad_associations import AdAssociations
6
8
 
7
9
  __all__ = [
8
10
  "Campaigns",
@@ -10,4 +12,6 @@ __all__ = [
10
12
  "Ads",
11
13
  "Targets",
12
14
  "AdExtensions",
15
+ "AdvertiserAccounts",
16
+ "AdAssociations",
13
17
  ]
@@ -0,0 +1,138 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class AdAssociations(Client):
5
+ r"""
6
+ AdAssociations(account='default', marketplace: Marketplaces = Marketplaces.EU, credentials=None, debug=False)
7
+
8
+ Amazon Ads API v1 - unified AdAssociations endpoints
9
+
10
+ An ad association links one ``adId`` to one ``adGroupId`` and decides how
11
+ much of the group's traffic that ad receives. ``weight`` is the relative
12
+ percentage directed to the creative, and ``startDateTime`` / ``endDateTime``
13
+ bound when the association applies.
14
+
15
+ This is the first v1 family in this client with all four operations: the
16
+ others stop at update, while this one also has a delete.
17
+
18
+ Update cannot move an association to another ad or ad group: only the dates,
19
+ the state and the weight are accepted, so reassigning means delete and
20
+ create.
21
+
22
+ Like AdvertiserAccounts, this is not an ad-product resource and takes no
23
+ ``adProductFilter`` -- the query filters by association, ad group or ad.
24
+ """
25
+
26
+ @sp_endpoint('/adsApi/v1/query/adAssociations', method='POST')
27
+ def query_ad_associations(self, **kwargs) -> ApiResponse:
28
+ r"""
29
+ query_ad_associations(body: dict) -> ApiResponse
30
+
31
+ Amazon Ads API v1 - Query AdAssociations (operationId: QueryAdAssociation)
32
+
33
+ Request Body
34
+ | **adAssociationIdFilter** (dict) [optional]
35
+ | **include** (list<string>) : association identifiers
36
+ | **adGroupIdFilter** (dict) [optional]
37
+ | **include** (list<string>) : ad group identifiers
38
+ | **adIdFilter** (dict) [optional]
39
+ | **include** (list<string>) : ad identifiers
40
+ | **maxResults** (int) [optional] Maximum number of records in the response
41
+ | **nextToken** (string) [optional] Token to navigate to the next page
42
+
43
+ Returns
44
+ ApiResponse. ``payload`` holds ``adAssociations`` and ``nextToken``.
45
+ """
46
+ headers = {"Accept": "application/json", "Content-Type": "application/json"}
47
+ return self._request(
48
+ kwargs.pop('path'),
49
+ data=Utils.convert_body(kwargs.pop('body'), False),
50
+ params=kwargs,
51
+ headers=headers,
52
+ )
53
+
54
+ @sp_endpoint('/adsApi/v1/create/adAssociations', method='POST')
55
+ def create_ad_associations(self, **kwargs) -> ApiResponse:
56
+ r"""
57
+ create_ad_associations(body: dict) -> ApiResponse
58
+
59
+ Amazon Ads API v1 - Create AdAssociations (operationId: CreateAdAssociation)
60
+
61
+ Request Body [Required]
62
+ | **adAssociations** (list, 1..20) [required]
63
+
64
+ Each element:
65
+ | **adGroupId** (string) [required] the ad group the ad belongs to
66
+ | **adId** (string) [required] the ad being associated
67
+ | **state** (string) [required] Enum [ ENABLED, PAUSED ]
68
+ | **startDateTime** (string) [optional] when the association starts
69
+ | **endDateTime** (string) [optional] when it stops
70
+ | **weight** (integer) [optional] relative share of the ad
71
+ group's traffic directed to this creative
72
+
73
+ Returns
74
+ ApiResponse. Per-entity result carrying ``success`` and ``error``,
75
+ not the created objects.
76
+ """
77
+ headers = {"Accept": "application/json", "Content-Type": "application/json"}
78
+ return self._request(
79
+ kwargs.pop('path'),
80
+ data=Utils.convert_body(kwargs.pop('body'), False),
81
+ params=kwargs,
82
+ headers=headers,
83
+ )
84
+
85
+ @sp_endpoint('/adsApi/v1/update/adAssociations', method='POST')
86
+ def update_ad_associations(self, **kwargs) -> ApiResponse:
87
+ r"""
88
+ update_ad_associations(body: dict) -> ApiResponse
89
+
90
+ Amazon Ads API v1 - Update AdAssociations (operationId: UpdateAdAssociation)
91
+
92
+ The ad and the ad group cannot be changed here. To point the same creative
93
+ at a different ad, delete the association and create a new one.
94
+
95
+ Request Body [Required]
96
+ | **adAssociations** (list, 1..20) [required]
97
+
98
+ Each element:
99
+ | **adAssociationId** (string) [required] association to update
100
+ | **startDateTime** (string) [optional]
101
+ | **endDateTime** (string) [optional]
102
+ | **state** (string) [optional] Enum [ ENABLED, PAUSED, ARCHIVED ]
103
+ | **weight** (integer) [optional]
104
+
105
+ Returns
106
+ ApiResponse. Per-entity result carrying ``success`` and ``error``.
107
+ """
108
+ headers = {"Accept": "application/json", "Content-Type": "application/json"}
109
+ return self._request(
110
+ kwargs.pop('path'),
111
+ data=Utils.convert_body(kwargs.pop('body'), False),
112
+ params=kwargs,
113
+ headers=headers,
114
+ )
115
+
116
+ @sp_endpoint('/adsApi/v1/delete/adAssociations', method='POST')
117
+ def delete_ad_associations(self, **kwargs) -> ApiResponse:
118
+ r"""
119
+ delete_ad_associations(body: dict) -> ApiResponse
120
+
121
+ Amazon Ads API v1 - Delete AdAssociations (operationId: DeleteAdAssociation)
122
+
123
+ The array is named ``adAssociationIds`` here, not ``adAssociations`` as in
124
+ create and update. Sending the wrong name is a rejected request.
125
+
126
+ Request Body [Required]
127
+ | **adAssociationIds** (list, 1..20) [required] associations to delete
128
+
129
+ Returns
130
+ ApiResponse. Per-entity result carrying ``success`` and ``error``.
131
+ """
132
+ headers = {"Accept": "application/json", "Content-Type": "application/json"}
133
+ return self._request(
134
+ kwargs.pop('path'),
135
+ data=Utils.convert_body(kwargs.pop('body'), False),
136
+ params=kwargs,
137
+ headers=headers,
138
+ )
@@ -0,0 +1,122 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class AdvertiserAccounts(Client):
5
+ r"""
6
+ AdvertiserAccounts(account='default', marketplace: Marketplaces = Marketplaces.EU, credentials=None, debug=False)
7
+
8
+ Amazon Ads API v1 - unified AdvertiserAccounts endpoints
9
+
10
+ Three routes and no delete, like the rest of the account family:
11
+
12
+ - ``create_advertiser_accounts`` -- 1 to 100 accounts per call.
13
+ - ``query_advertiser_accounts`` -- filter by identifier or by global flag.
14
+ - ``update_advertiser_accounts`` -- here the mutable fields really are
15
+ mutable: currency, time zone, display name, industry, manager link.
16
+
17
+ Unlike Ads, Targets or AdExtensions this is not an ad-product resource, so
18
+ there is no ``adProductFilter```; querying is by ``advertiserAccountIdFilter``
19
+ or ``isGlobalAccountFilter``.
20
+
21
+ ``managerAccountId`` decides what the account can run: without it the account
22
+ is created for Sponsored Ads only, and DSP needs it set.
23
+ """
24
+
25
+ @sp_endpoint('/adsApi/v1/query/advertiserAccounts', method='POST')
26
+ def query_advertiser_accounts(self, **kwargs) -> ApiResponse:
27
+ r"""
28
+ query_advertiser_accounts(body: dict) -> ApiResponse
29
+
30
+ Amazon Ads API v1 - Query AdvertiserAccounts (operationId: QueryAdvertiserAccount)
31
+
32
+ Request Body
33
+ | **advertiserAccountIdFilter** (dict) [optional]
34
+ | **include** (list<string>) : advertiser account identifiers
35
+ | **isGlobalAccountFilter** (dict) [optional]
36
+ | **include** (list<boolean>) : true for global accounts
37
+ | **maxResults** (int) [optional] Maximum number of records in the response
38
+ | **nextToken** (string) [optional] Token to navigate to the next page
39
+
40
+ Returns
41
+ ApiResponse. ``payload`` holds ``advertiserAccounts`` and ``nextToken``.
42
+ """
43
+ headers = {"Accept": "application/json", "Content-Type": "application/json"}
44
+ return self._request(
45
+ kwargs.pop('path'),
46
+ data=Utils.convert_body(kwargs.pop('body'), False),
47
+ params=kwargs,
48
+ headers=headers,
49
+ )
50
+
51
+ @sp_endpoint('/adsApi/v1/create/advertiserAccounts', method='POST')
52
+ def create_advertiser_accounts(self, **kwargs) -> ApiResponse:
53
+ r"""
54
+ create_advertiser_accounts(body: dict) -> ApiResponse
55
+
56
+ Amazon Ads API v1 - Create AdvertiserAccounts (operationId: CreateAdvertiserAccount)
57
+
58
+ Request Body [Required]
59
+ | **advertiserAccounts** (list, 1..100) [required]
60
+
61
+ Each element:
62
+ | **businessDetails** (list, exactly 1) [required]
63
+ Carries either ``addressToken`` for an existing selling account
64
+ address, or ``address`` when that account has none. Also accepts
65
+ ``businessRegistrationNumber`` and ``website`.
66
+ | **currencyCode** (string) [optional] Enum of 34 ISO codes,
67
+ including ``EUR``, ``USD``, ``GBP`
68
+ | **displayName** (string) [optional] name shown for the account
69
+ | **industryVertical** (string) [optional] Enum of 19 sectors
70
+ | **isGlobalAccount** (boolean) [optional]
71
+ | **isTestAccount** (boolean) [optional]
72
+ | **managerAccountId** (string) [optional] Required for
73
+ ADSP-enabled accounts; without it the account is created for
74
+ Sponsored Ads only.
75
+ | **sellingAccountLinkRequests** (list, 0..1) [optional]
76
+ | **timeZoneIana** (string) [optional] Enum of 42 IANA zones
77
+
78
+ The full enum lists live in the contract; they are not repeated here.
79
+
80
+ Returns
81
+ ApiResponse
82
+ """
83
+ headers = {"Accept": "application/json", "Content-Type": "application/json"}
84
+ return self._request(
85
+ kwargs.pop('path'),
86
+ data=Utils.convert_body(kwargs.pop('body'), False),
87
+ params=kwargs,
88
+ headers=headers,
89
+ )
90
+
91
+ @sp_endpoint('/adsApi/v1/update/advertiserAccounts', method='POST')
92
+ def update_advertiser_accounts(self, **kwargs) -> ApiResponse:
93
+ r"""
94
+ update_advertiser_accounts(body: dict) -> ApiResponse
95
+
96
+ Amazon Ads API v1 - Update AdvertiserAccounts (operationId: UpdateAdvertiserAccount)
97
+
98
+ Request Body [Required]
99
+ | **advertiserAccounts** (list) [required]
100
+
101
+ Each element:
102
+ | **advertiserAccountId** (string) [required] account to update
103
+ | **businessDetails** (list) [optional]
104
+ | **currencyCode** (string) [optional]
105
+ | **displayName** (string) [optional]
106
+ | **industryVertical** (string) [optional]
107
+ | **isGlobalAccount** (boolean) [optional]
108
+ | **isTestAccount** (boolean) [optional]
109
+ | **managerAccountId** (string) [optional]
110
+ | **sellingAccountLinkRequests** (list) [optional]
111
+ | **timeZoneIana** (string) [optional]
112
+
113
+ Returns
114
+ ApiResponse
115
+ """
116
+ headers = {"Accept": "application/json", "Content-Type": "application/json"}
117
+ return self._request(
118
+ kwargs.pop('path'),
119
+ data=Utils.convert_body(kwargs.pop('body'), False),
120
+ params=kwargs,
121
+ headers=headers,
122
+ )
@@ -0,0 +1 @@
1
+ __version__ = "1.4.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-amazon-ad-api
3
- Version: 1.4.0
3
+ Version: 1.4.2
4
4
  Summary: Python wrapper for the Amazon Advertising API
5
5
  Home-page: https://github.com/denisneuf/python-amazon-ad-api
6
6
  Author: Daniel Alvaro
@@ -305,6 +305,8 @@ The v1 API lives under `/adsApi/v1/` and is **not** split by product: every call
305
305
  * [Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ads.html#ad_api.api.v1.Ads.Ads.query_ads)
306
306
  * [Targets](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/targets.html#ad_api.api.v1.Targets.Targets.query_targets)
307
307
  * [Ad Extensions](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ad_extensions.html#ad_api.api.v1.AdExtensions.AdExtensions.query_ad_extensions)
308
+ * [Advertiser Accounts](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/advertiser_accounts.html#ad_api.api.v1.AdvertiserAccounts.AdvertiserAccounts.query_advertiser_accounts)
309
+ * [Ad Associations](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ad_associations.html#ad_api.api.v1.AdAssociations.AdAssociations.query_ad_associations)
308
310
 
309
311
 
310
312
  ### [Modules Available Sponsored Products](https://python-amazon-ad-api.readthedocs.io/en/latest/sp.html)
@@ -95,9 +95,11 @@ ad_api/api/sp/product_targeting_v3.py
95
95
  ad_api/api/sp/ranked_keywords_recommendations.py
96
96
  ad_api/api/sp/schedule_based_bid_optimization.py
97
97
  ad_api/api/v1/__init__.py
98
+ ad_api/api/v1/ad_associations.py
98
99
  ad_api/api/v1/ad_extensions.py
99
100
  ad_api/api/v1/ad_groups.py
100
101
  ad_api/api/v1/ads.py
102
+ ad_api/api/v1/advertiser_accounts.py
101
103
  ad_api/api/v1/campaigns.py
102
104
  ad_api/api/v1/targets.py
103
105
  ad_api/auth/__init__.py
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = python-amazon-ad-api
3
- version = 1.4.0
3
+ version = 1.4.2
4
4
  author = Daniel Alvaro
5
5
  author_email = denisneuf@hotmail.com
6
6
  description = Python wrapper for the Amazon Advertising API
@@ -2,7 +2,7 @@ from setuptools import setup
2
2
 
3
3
  setup(
4
4
  name='python-amazon-ad-api',
5
- version='1.4.0',
5
+ version='1.4.2',
6
6
  install_requires=[
7
7
  "requests>=2.27.1,<2.35.0",
8
8
  "six>=1.16,<1.18",
@@ -1 +0,0 @@
1
- __version__ = "1.4.0"