python-amazon-ad-api 1.1.7__tar.gz → 1.1.9__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 (122) hide show
  1. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/PKG-INFO +16 -5
  2. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/README.md +15 -4
  3. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/campaigns_v4.py +28 -0
  4. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/targeting_categories.py +23 -0
  5. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/helpers.py +2 -0
  6. python_amazon_ad_api-1.1.9/ad_api/version.py +1 -0
  7. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/python_amazon_ad_api.egg-info/PKG-INFO +16 -5
  8. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/setup.cfg +1 -1
  9. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/setup.py +1 -1
  10. python_amazon_ad_api-1.1.7/ad_api/version.py +0 -1
  11. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/LICENSE +0 -0
  12. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/__init__.py +0 -0
  13. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/__init__.py +0 -0
  14. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/account.py +0 -0
  15. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/advertising_test_account.py +0 -0
  16. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/attribution.py +0 -0
  17. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/audiences.py +0 -0
  18. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/billing.py +0 -0
  19. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/brand_metrics.py +0 -0
  20. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/creative_assets.py +0 -0
  21. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/eligibility.py +0 -0
  22. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/exports.py +0 -0
  23. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/history.py +0 -0
  24. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/insights.py +0 -0
  25. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/invoices.py +0 -0
  26. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/localization.py +0 -0
  27. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/manager_accounts.py +0 -0
  28. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/metadata.py +0 -0
  29. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/portfolios.py +0 -0
  30. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/portfolios_v3.py +0 -0
  31. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/profiles.py +0 -0
  32. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/recommendations.py +0 -0
  33. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/reports.py +0 -0
  34. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/__init__.py +0 -0
  35. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/ad_creatives_v4.py +0 -0
  36. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/ad_groups.py +0 -0
  37. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/ad_groups_v4.py +0 -0
  38. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/ads_v4.py +0 -0
  39. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/benchmarks.py +0 -0
  40. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/bid_recommendations.py +0 -0
  41. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/brands.py +0 -0
  42. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/budget_rules.py +0 -0
  43. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/campaigns.py +0 -0
  44. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/forecast.py +0 -0
  45. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/keywords.py +0 -0
  46. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/keywords_recommendations.py +0 -0
  47. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/landing_page_asins.py +0 -0
  48. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/media.py +0 -0
  49. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/migration.py +0 -0
  50. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/negative_keywords.py +0 -0
  51. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/negative_product_targeting.py +0 -0
  52. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/optimization_rules.py +0 -0
  53. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/product_targeting.py +0 -0
  54. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/recommendations.py +0 -0
  55. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/reports.py +0 -0
  56. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/stores.py +0 -0
  57. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/targeting_recommendations.py +0 -0
  58. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sb/themes.py +0 -0
  59. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/__init__.py +0 -0
  60. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/ad_groups.py +0 -0
  61. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/bid_recommendations.py +0 -0
  62. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/brand_safety.py +0 -0
  63. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/budget_rules.py +0 -0
  64. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/campaigns.py +0 -0
  65. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/campaigns_budget_usage.py +0 -0
  66. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/creatives.py +0 -0
  67. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/forecast.py +0 -0
  68. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/negative_product_targeting.py +0 -0
  69. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/product_ads.py +0 -0
  70. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/product_targeting.py +0 -0
  71. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/recommendations.py +0 -0
  72. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/reports.py +0 -0
  73. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/snapshots.py +0 -0
  74. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sd/targeting_recommendations.py +0 -0
  75. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/__init__.py +0 -0
  76. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/ad_groups_v3.py +0 -0
  77. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/bid_recommendations_v3.py +0 -0
  78. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/budget_initial_recommendation.py +0 -0
  79. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/budget_recommendations.py +0 -0
  80. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/budget_rules.py +0 -0
  81. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/budget_rules_recommendations.py +0 -0
  82. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/campaign_consolidated_recommendations.py +0 -0
  83. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/campaign_negative_keywords_v3.py +0 -0
  84. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/campaign_negative_targets.py +0 -0
  85. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/campaigns_budget_usage.py +0 -0
  86. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/campaigns_v3.py +0 -0
  87. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/campaings_optimization.py +0 -0
  88. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/keywords_v3.py +0 -0
  89. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/negative_keywords_v3.py +0 -0
  90. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/negative_product_targeting_v3.py +0 -0
  91. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/product_ads_v3.py +0 -0
  92. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/product_recommendations.py +0 -0
  93. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/product_targeting_v3.py +0 -0
  94. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/ranked_keywords_recommendations.py +0 -0
  95. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/sp/schedule_based_bid_optimization.py +0 -0
  96. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/stores.py +0 -0
  97. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/stream.py +0 -0
  98. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/v1/__init__.py +0 -0
  99. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/v1/ad_groups.py +0 -0
  100. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/v1/ads.py +0 -0
  101. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/v1/campaigns.py +0 -0
  102. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/v1/targets.py +0 -0
  103. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/api/validation_configurations.py +0 -0
  104. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/auth/__init__.py +0 -0
  105. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/auth/access_token_client.py +0 -0
  106. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/auth/access_token_response.py +0 -0
  107. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/auth/credentials.py +0 -0
  108. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/auth/exceptions.py +0 -0
  109. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/__init__.py +0 -0
  110. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/api_response.py +0 -0
  111. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/base_client.py +0 -0
  112. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/client.py +0 -0
  113. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/config.py +0 -0
  114. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/credential_provider.py +0 -0
  115. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/exceptions.py +0 -0
  116. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/marketplaces.py +0 -0
  117. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/ad_api/base/utils.py +0 -0
  118. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/pyproject.toml +0 -0
  119. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/python_amazon_ad_api.egg-info/SOURCES.txt +0 -0
  120. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/python_amazon_ad_api.egg-info/dependency_links.txt +0 -0
  121. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/python_amazon_ad_api.egg-info/requires.txt +0 -0
  122. {python_amazon_ad_api-1.1.7 → python_amazon_ad_api-1.1.9}/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.1.7
3
+ Version: 1.1.9
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
@@ -343,24 +343,35 @@ Warning: the campaign, ad group and product ad operations are deprecated in favo
343
343
  * [Ad Groups (deprecated)](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_groups.html)
344
344
  * [Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/keywords.html)
345
345
  * [Negative Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/negative_keywords.html)
346
+ * [Keywords Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/keywords_recommendations.html)
346
347
  * [Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/product_targeting.html)
347
348
  * [Negative Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/negative_product_targeting.html)
348
349
  * [Targeting Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/targeting_recommendations.html)
349
350
  * [Bid Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/bid_recommendations.html)
351
+ * [Benchmarks](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/benchmarks.html)
350
352
  * [Stores](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/stores.html)
351
353
  * [Landing Page Asins](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/landing_page_asins.html)
352
354
  * [Media](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/media.html)
353
355
  * [Brands](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/brands.html)
354
- * [Moderation](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/moderation.html)
355
- * [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/reports.html)
356
- * [Snapshots](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/snapshots.html)
357
356
  * [Themes](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/themes.html)
357
+ * [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/reports.html)
358
358
 
359
359
  ### [Modules Available Sponsored Brands 4.0](https://python-amazon-ad-api.readthedocs.io/en/latest/sb_v4.html)
360
360
 
361
+ > The 4.0 contract is fully covered: every operation is implemented except the campaign moderation route, which the service answers with a router `404`, and the report download, which resolves through the shared `_download` helper.
362
+
361
363
  * [Campaigns](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/campaigns_v4.html)
362
364
  * [Ad Groups](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_groups_v4.html)
363
- * [Ads Groups](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ads_v4.html)
365
+ * [Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ads_v4.html)
366
+ * [Ad Creatives](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_creatives_v4.html)
367
+ * [Forecast](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/forecast.html)
368
+ * [Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/recommendations.html)
369
+ * [Budget Rules](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/budget_rules.html)
370
+ * [Optimization Rules](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/optimization_rules.html)
371
+ * [Targeting Categories](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/targeting_categories.html)
372
+ * [Migration](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/migration.html)
373
+
374
+ > Most 4.0 routes take a versioned media type and the service routes on it. With `application/json` they answer `404 Could not find resource`, which reads like a missing route but is only the wrong media type. This affects forecasts, budget recommendations, optimization rules, migrations, insights, negative brand recommendations and the collection creatives.
364
375
 
365
376
  ### [Modules Available Sponsored Display](https://python-amazon-ad-api.readthedocs.io/en/latest/sd.html)
366
377
 
@@ -315,24 +315,35 @@ Warning: the campaign, ad group and product ad operations are deprecated in favo
315
315
  * [Ad Groups (deprecated)](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_groups.html)
316
316
  * [Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/keywords.html)
317
317
  * [Negative Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/negative_keywords.html)
318
+ * [Keywords Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/keywords_recommendations.html)
318
319
  * [Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/product_targeting.html)
319
320
  * [Negative Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/negative_product_targeting.html)
320
321
  * [Targeting Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/targeting_recommendations.html)
321
322
  * [Bid Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/bid_recommendations.html)
323
+ * [Benchmarks](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/benchmarks.html)
322
324
  * [Stores](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/stores.html)
323
325
  * [Landing Page Asins](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/landing_page_asins.html)
324
326
  * [Media](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/media.html)
325
327
  * [Brands](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/brands.html)
326
- * [Moderation](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/moderation.html)
327
- * [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/reports.html)
328
- * [Snapshots](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/snapshots.html)
329
328
  * [Themes](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/themes.html)
329
+ * [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/reports.html)
330
330
 
331
331
  ### [Modules Available Sponsored Brands 4.0](https://python-amazon-ad-api.readthedocs.io/en/latest/sb_v4.html)
332
332
 
333
+ > The 4.0 contract is fully covered: every operation is implemented except the campaign moderation route, which the service answers with a router `404`, and the report download, which resolves through the shared `_download` helper.
334
+
333
335
  * [Campaigns](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/campaigns_v4.html)
334
336
  * [Ad Groups](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_groups_v4.html)
335
- * [Ads Groups](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ads_v4.html)
337
+ * [Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ads_v4.html)
338
+ * [Ad Creatives](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_creatives_v4.html)
339
+ * [Forecast](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/forecast.html)
340
+ * [Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/recommendations.html)
341
+ * [Budget Rules](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/budget_rules.html)
342
+ * [Optimization Rules](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/optimization_rules.html)
343
+ * [Targeting Categories](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/targeting_categories.html)
344
+ * [Migration](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/migration.html)
345
+
346
+ > Most 4.0 routes take a versioned media type and the service routes on it. With `application/json` they answer `404 Could not find resource`, which reads like a missing route but is only the wrong media type. This affects forecasts, budget recommendations, optimization rules, migrations, insights, negative brand recommendations and the collection creatives.
336
347
 
337
348
  ### [Modules Available Sponsored Display](https://python-amazon-ad-api.readthedocs.io/en/latest/sd.html)
338
349
 
@@ -77,6 +77,34 @@ class CampaignsV4(Client):
77
77
 
78
78
  return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
79
79
 
80
+ @sp_endpoint('/sb/campaigns/insights', method='POST')
81
+ def get_campaign_insights(self, version: int = 4, **kwargs) -> ApiResponse:
82
+ """
83
+ Gets insights for campaign ad groups.
84
+
85
+ Request Body [Required]
86
+ | **adGroups** (array): [required] One entry per ad group.
87
+ | **adFormat** (string): [required] Ad format of the ad group.
88
+ | **keywords** (array): [optional] Each entry needs
89
+ ``keywordText``, ``matchType`` and ``bid``.
90
+
91
+ Returns:
92
+ | ApiResponse, ``200``.
93
+
94
+ .. note::
95
+ This route takes ``application/vnd.sbinsights.v4+json``, not the
96
+ campaigns media type. With ``application/json`` it answers ``404
97
+ Could not find resource``, so the versioned type is what routes it.
98
+
99
+ .. note::
100
+ An empty body answers ``400`` naming ``adGroups``, which is the only
101
+ required member.
102
+ """
103
+ json_version = 'application/vnd.sbinsights.v' + str(version) + "+json"
104
+ headers = {'Accept': json_version}
105
+
106
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
107
+
80
108
  @sp_endpoint('/sb/v4/campaigns/list', method='POST')
81
109
  def list_campaigns(self, version: int = 4, **kwargs) -> ApiResponse:
82
110
  """
@@ -67,6 +67,29 @@ class TargetingCategories(Client):
67
67
  params=kwargs,
68
68
  headers={'Accept': self._MEDIA, 'Content-Type': self._MEDIA})
69
69
 
70
+ @sp_endpoint('/sb/negativeTargets/brands/recommendations', method='GET')
71
+ def list_negative_brand_recommendations(self, **kwargs) -> ApiResponse:
72
+ """
73
+ Gets brand recommendations for negative targeting.
74
+
75
+ Keyword Args
76
+ | query **nextToken** (string): [optional] Pagination token.
77
+
78
+ Returns:
79
+ | ApiResponse, ``200``, with brands under ``brands``, each carrying
80
+ ``brandRefinementId`` and ``name``.
81
+
82
+ Example::
83
+
84
+ {"brands": [{"brandRefinementId": "19897490031", "name": "YEYIAN"}]}
85
+
86
+ .. note::
87
+ Lives here because it shares this class media type. It is the one
88
+ route in this class that is not about the category tree.
89
+ """
90
+ return self._request(kwargs.pop('path'), params=kwargs,
91
+ headers={'Accept': self._MEDIA, 'Content-Type': self._MEDIA})
92
+
70
93
  @sp_endpoint('/sb/targets/products/count', method='POST')
71
94
  def get_product_count(self, category, **kwargs) -> ApiResponse:
72
95
  """
@@ -1,3 +1,4 @@
1
+ import functools
1
2
  from io import BytesIO
2
3
  from typing import TypeVar
3
4
 
@@ -17,6 +18,7 @@ T = TypeVar("T")
17
18
 
18
19
  def sp_endpoint(path, method="GET"):
19
20
  def decorator(function: T) -> T:
21
+ @functools.wraps(function)
20
22
  def wrapper(*args, **kwargs):
21
23
  kwargs.update({"path": path, "method": method})
22
24
  return function(*args, **kwargs)
@@ -0,0 +1 @@
1
+ __version__ = "1.1.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-amazon-ad-api
3
- Version: 1.1.7
3
+ Version: 1.1.9
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
@@ -343,24 +343,35 @@ Warning: the campaign, ad group and product ad operations are deprecated in favo
343
343
  * [Ad Groups (deprecated)](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_groups.html)
344
344
  * [Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/keywords.html)
345
345
  * [Negative Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/negative_keywords.html)
346
+ * [Keywords Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/keywords_recommendations.html)
346
347
  * [Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/product_targeting.html)
347
348
  * [Negative Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/negative_product_targeting.html)
348
349
  * [Targeting Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/targeting_recommendations.html)
349
350
  * [Bid Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/bid_recommendations.html)
351
+ * [Benchmarks](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/benchmarks.html)
350
352
  * [Stores](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/stores.html)
351
353
  * [Landing Page Asins](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/landing_page_asins.html)
352
354
  * [Media](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/media.html)
353
355
  * [Brands](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/brands.html)
354
- * [Moderation](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/moderation.html)
355
- * [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/reports.html)
356
- * [Snapshots](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/snapshots.html)
357
356
  * [Themes](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/themes.html)
357
+ * [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/reports.html)
358
358
 
359
359
  ### [Modules Available Sponsored Brands 4.0](https://python-amazon-ad-api.readthedocs.io/en/latest/sb_v4.html)
360
360
 
361
+ > The 4.0 contract is fully covered: every operation is implemented except the campaign moderation route, which the service answers with a router `404`, and the report download, which resolves through the shared `_download` helper.
362
+
361
363
  * [Campaigns](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/campaigns_v4.html)
362
364
  * [Ad Groups](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_groups_v4.html)
363
- * [Ads Groups](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ads_v4.html)
365
+ * [Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ads_v4.html)
366
+ * [Ad Creatives](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/ad_creatives_v4.html)
367
+ * [Forecast](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/forecast.html)
368
+ * [Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/recommendations.html)
369
+ * [Budget Rules](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/budget_rules.html)
370
+ * [Optimization Rules](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/optimization_rules.html)
371
+ * [Targeting Categories](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/targeting_categories.html)
372
+ * [Migration](https://python-amazon-ad-api.readthedocs.io/en/latest/sb/migration.html)
373
+
374
+ > Most 4.0 routes take a versioned media type and the service routes on it. With `application/json` they answer `404 Could not find resource`, which reads like a missing route but is only the wrong media type. This affects forecasts, budget recommendations, optimization rules, migrations, insights, negative brand recommendations and the collection creatives.
364
375
 
365
376
  ### [Modules Available Sponsored Display](https://python-amazon-ad-api.readthedocs.io/en/latest/sd.html)
366
377
 
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = python-amazon-ad-api
3
- version = 1.1.7
3
+ version = 1.1.9
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.1.7',
5
+ version='1.1.9',
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.1.7"