python-amazon-ad-api 0.6.6__tar.gz → 0.6.7__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 (135) hide show
  1. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/PKG-INFO +2 -2
  2. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/brand_metrics.py +2 -2
  3. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/dsp/reports.py +2 -2
  4. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/bid_recommendations.py +2 -2
  5. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/campaigns.py +2 -2
  6. python_amazon_ad_api-0.6.7/ad_api/api/sb/forecast.py +7 -0
  7. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/keywords.py +3 -3
  8. python_amazon_ad_api-0.6.7/ad_api/api/sb/keywords_recommendations.py +7 -0
  9. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/landing_page_asins.py +1 -1
  10. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/media.py +4 -4
  11. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/negative_product_targeting.py +4 -4
  12. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/product_targeting.py +4 -4
  13. python_amazon_ad_api-0.6.7/ad_api/api/sb/recommendations.py +7 -0
  14. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/reports.py +2 -2
  15. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/snapshots.py +1 -1
  16. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/stores.py +2 -2
  17. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/targeting_recommendations.py +4 -4
  18. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/ad_groups.py +3 -3
  19. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/bid_recommendations.py +2 -2
  20. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/campaigns.py +3 -3
  21. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/creatives.py +1 -1
  22. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/negative_product_targeting.py +3 -3
  23. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/product_ads.py +3 -3
  24. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/product_targeting.py +3 -3
  25. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/reports.py +2 -2
  26. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/snapshots.py +2 -2
  27. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/targeting_recommendations.py +2 -2
  28. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/ad_groups.py +2 -2
  29. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/bid_recommendations.py +3 -3
  30. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/bid_recommendations_v3.py +2 -2
  31. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaign_negative_keywords.py +2 -2
  32. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/keywords.py +2 -2
  33. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/negative_keywords.py +2 -2
  34. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/negative_product_targeting.py +2 -2
  35. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/product_ads.py +2 -2
  36. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/product_recommendations.py +2 -2
  37. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/product_targeting.py +6 -6
  38. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/reports.py +1 -1
  39. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/snapshots.py +2 -2
  40. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/suggested_keywords.py +2 -2
  41. python_amazon_ad_api-0.6.7/ad_api/version.py +1 -0
  42. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/python_amazon_ad_api.egg-info/PKG-INFO +2 -2
  43. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/python_amazon_ad_api.egg-info/requires.txt +1 -1
  44. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/setup.cfg +1 -1
  45. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/setup.py +2 -2
  46. python_amazon_ad_api-0.6.6/ad_api/api/sb/forecast.py +0 -7
  47. python_amazon_ad_api-0.6.6/ad_api/api/sb/keywords_recommendations.py +0 -7
  48. python_amazon_ad_api-0.6.6/ad_api/api/sb/recommendations.py +0 -7
  49. python_amazon_ad_api-0.6.6/ad_api/version.py +0 -1
  50. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/LICENSE +0 -0
  51. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/README.md +0 -0
  52. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/__init__.py +0 -0
  53. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/__init__.py +0 -0
  54. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/account.py +0 -0
  55. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/advertising_test_account.py +0 -0
  56. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/attribution.py +0 -0
  57. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/audiences.py +0 -0
  58. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/billing.py +0 -0
  59. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/creative_assets.py +0 -0
  60. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/dsp/__init__.py +0 -0
  61. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/dsp/access_token_client.py +0 -0
  62. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/dsp/client.py +0 -0
  63. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/dsp/credential_provider.py +0 -0
  64. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/eligibility.py +0 -0
  65. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/exports.py +0 -0
  66. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/history.py +0 -0
  67. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/insights.py +0 -0
  68. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/invoices.py +0 -0
  69. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/localization.py +0 -0
  70. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/manager_accounts.py +0 -0
  71. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/metadata.py +0 -0
  72. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/portfolios.py +0 -0
  73. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/portfolios_v3.py +0 -0
  74. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/profiles.py +0 -0
  75. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/recommendations.py +0 -0
  76. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/reports.py +0 -0
  77. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/__init__.py +0 -0
  78. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/ad_creatives_v4.py +0 -0
  79. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/ad_groups.py +0 -0
  80. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/ad_groups_v4.py +0 -0
  81. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/ads_v4.py +0 -0
  82. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/benchmarks.py +0 -0
  83. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/brands.py +0 -0
  84. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/campaigns_v4.py +0 -0
  85. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/moderation.py +0 -0
  86. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/negative_keywords.py +0 -0
  87. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sb/themes.py +0 -0
  88. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/__init__.py +0 -0
  89. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/brand_safety.py +0 -0
  90. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/budget_rules.py +0 -0
  91. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/campaigns_budget_usage.py +0 -0
  92. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/forecast.py +0 -0
  93. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sd/recommendations.py +0 -0
  94. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/__init__.py +0 -0
  95. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/ad_groups_v3.py +0 -0
  96. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/budget_initial_recommendation.py +0 -0
  97. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/budget_recommendations.py +0 -0
  98. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/budget_rules.py +0 -0
  99. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/budget_rules_recommendations.py +0 -0
  100. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaign_consolidated_recommendations.py +0 -0
  101. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaign_negative_keywords_v3.py +0 -0
  102. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaign_negative_targets.py +0 -0
  103. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaigns.py +0 -0
  104. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaigns_budget_usage.py +0 -0
  105. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaigns_v3.py +0 -0
  106. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/campaings_optimization.py +0 -0
  107. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/keywords_v3.py +0 -0
  108. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/negative_keywords_v3.py +0 -0
  109. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/negative_product_targeting_v3.py +0 -0
  110. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/product_ads_v3.py +0 -0
  111. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/product_targeting_v3.py +0 -0
  112. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/ranked_keywords_recommendations.py +0 -0
  113. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/sp/schedule_based_bid_optimization.py +0 -0
  114. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/stores.py +0 -0
  115. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/stream.py +0 -0
  116. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/api/validation_configurations.py +0 -0
  117. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/auth/__init__.py +0 -0
  118. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/auth/access_token_client.py +0 -0
  119. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/auth/access_token_response.py +0 -0
  120. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/auth/credentials.py +0 -0
  121. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/auth/exceptions.py +0 -0
  122. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/__init__.py +0 -0
  123. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/api_response.py +0 -0
  124. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/base_client.py +0 -0
  125. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/client.py +0 -0
  126. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/config.py +0 -0
  127. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/credential_provider.py +0 -0
  128. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/exceptions.py +0 -0
  129. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/helpers.py +0 -0
  130. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/marketplaces.py +0 -0
  131. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/ad_api/base/utils.py +0 -0
  132. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/pyproject.toml +0 -0
  133. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/python_amazon_ad_api.egg-info/SOURCES.txt +0 -0
  134. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/python_amazon_ad_api.egg-info/dependency_links.txt +0 -0
  135. {python_amazon_ad_api-0.6.6 → python_amazon_ad_api-0.6.7}/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: 0.6.6
3
+ Version: 0.6.7
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
@@ -14,7 +14,7 @@ Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
15
  Requires-Dist: requests<2.33.0,>=2.27.1
16
16
  Requires-Dist: six<1.18,>=1.16
17
- Requires-Dist: cachetools<6.2,>=5.0
17
+ Requires-Dist: cachetools<6.3,>=5.0
18
18
  Requires-Dist: pycryptodome<3.24,>=3.13
19
19
  Requires-Dist: pytz<2026.0,>=2021.3
20
20
  Requires-Dist: confuse<2.1,>=1.7
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class BrandMetrics(Client):
@@ -26,7 +26,7 @@ class BrandMetrics(Client):
26
26
  ApiResponse
27
27
 
28
28
  """
29
- return self._request(fill_query_params(kwargs.pop('path')), data=kwargs.pop('body'), params=kwargs)
29
+ return self._request(fill_query_params(kwargs.pop('path')), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
30
30
 
31
31
  @sp_endpoint('/insights/brandMetrics/report/{}', method='GET')
32
32
  def get_report(self, reportId, **kwargs) -> ApiResponse:
@@ -1,5 +1,5 @@
1
1
  from ad_api.api.dsp.client import DspClient as Client
2
- from ad_api.base import sp_endpoint, fill_query_params, ApiResponse
2
+ from ad_api.base import sp_endpoint, fill_query_params, ApiResponse, Utils
3
3
 
4
4
 
5
5
  class Reports(Client):
@@ -35,7 +35,7 @@ class Reports(Client):
35
35
  ApiResponse
36
36
  """
37
37
  path = fill_query_params(kwargs.pop('path'), dspAccountId)
38
- return self._request(path, data=kwargs.pop('body'), headers={'Accept': accept}, params=kwargs)
38
+ return self._request(path, data=Utils.convert_body(kwargs.pop('body'), False), headers={'Accept': accept}, params=kwargs)
39
39
 
40
40
  @sp_endpoint('/accounts/{}/dsp/reports/{}', method='GET')
41
41
  def get_report(self, dspAccountId, reportId, accept='application/vnd.dspgetreports.v3+json', **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class BidRecommendations(Client):
@@ -32,4 +32,4 @@ class BidRecommendations(Client):
32
32
 
33
33
  """
34
34
 
35
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
35
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -86,7 +86,7 @@ class Campaigns(Client):
86
86
 
87
87
  **match_type** (NegativeMatchType): [optional] The negative match type. For more information, see negative keyword match types in the Amazon Advertising support center. Enum:[ negativeExact, negativePhrase ]
88
88
  """
89
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
89
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
90
90
 
91
91
  @sp_endpoint('/sb/campaigns', method='PUT')
92
92
  @Utils.deprecated
@@ -113,7 +113,7 @@ class Campaigns(Client):
113
113
  | **end_date** (EndDate > string) [optional] The YYYYMMDD end date of the campaign. Must be greater than the value specified in the startDate field. If this property is not included in the request, the endDate value is not updated. If set to null, endDate is deleted from the draft campaign. [nullable: true] [pattern: ^\\d{8}$]
114
114
 
115
115
  """
116
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
116
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
117
117
 
118
118
  @sp_endpoint('/sb/campaigns/{}', method='GET')
119
119
  def get_campaign(self, campaignId, **kwargs) -> ApiResponse:
@@ -0,0 +1,7 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class Forecast(Client):
5
+ @sp_endpoint('/sb/campaigns/shopperSegments/forecast', method='POST')
6
+ def list_forecast(self, **kwargs) -> ApiResponse:
7
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Keywords(Client):
@@ -50,7 +50,7 @@ class Keywords(Client):
50
50
  Returns:
51
51
  | ApiResponse
52
52
  """
53
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
53
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
54
54
 
55
55
  @sp_endpoint('/sb/keywords', method='POST')
56
56
  def create_keywords(self, **kwargs) -> ApiResponse:
@@ -75,7 +75,7 @@ class Keywords(Client):
75
75
  Returns:
76
76
  | ApiResponse
77
77
  """
78
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
78
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
79
79
 
80
80
  @sp_endpoint('/sb/keywords/{}', method='GET')
81
81
  def get_keyword(self, keywordId, **kwargs) -> ApiResponse:
@@ -0,0 +1,7 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class KeywordsRecommendations(Client):
5
+ @sp_endpoint('/sb/recommendations/keyword', method='POST')
6
+ def list_keywords_recommendations(self, **kwargs) -> ApiResponse:
7
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class PageAsins(Client):
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Media(Client):
@@ -23,12 +23,12 @@ class Media(Client):
23
23
  | ApiResponse
24
24
 
25
25
  """
26
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
26
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
27
27
 
28
28
  @sp_endpoint('/media/complete', method='PUT')
29
29
  def complete_media(self, **kwargs) -> ApiResponse:
30
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
30
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
31
31
 
32
32
  @sp_endpoint('/media/describe', method='GET')
33
33
  def describe_media(self, **kwargs) -> ApiResponse:
34
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
34
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class NegativeTargets(Client):
@@ -28,7 +28,7 @@ class NegativeTargets(Client):
28
28
  Returns:
29
29
  ApiResponse
30
30
  """
31
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
31
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
32
32
 
33
33
  @sp_endpoint('/sb/negativeTargets', method='PUT')
34
34
  def edit_negative_targets(self, **kwargs) -> ApiResponse:
@@ -43,7 +43,7 @@ class NegativeTargets(Client):
43
43
  Returns:
44
44
  ApiResponse
45
45
  """
46
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
46
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
47
47
 
48
48
  @sp_endpoint('/sb/negativeTargets', method='POST')
49
49
  def create_negative_targets(self, **kwargs) -> ApiResponse:
@@ -63,7 +63,7 @@ class NegativeTargets(Client):
63
63
  Returns:
64
64
  ApiResponse
65
65
  """
66
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
66
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
67
67
 
68
68
  @sp_endpoint('/sb/negativeTargets/{}', method='GET')
69
69
  def get_negative_target(self, negativeTargetId, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Targets(Client):
@@ -31,7 +31,7 @@ class Targets(Client):
31
31
  """
32
32
  json_version = 'application/vnd.sblisttargetsresponse.v' + str(version) + "+json"
33
33
  headers = {'Accept': json_version}
34
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs, headers=headers)
34
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
35
35
 
36
36
  @sp_endpoint('/sb/targets', method='PUT')
37
37
  def edit_products_targets(self, **kwargs) -> ApiResponse:
@@ -49,7 +49,7 @@ class Targets(Client):
49
49
  ApiResponse
50
50
 
51
51
  """
52
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
52
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
53
53
 
54
54
  @sp_endpoint('/sb/targets', method='POST')
55
55
  def create_products_targets(self, **kwargs) -> ApiResponse:
@@ -65,7 +65,7 @@ class Targets(Client):
65
65
  Returns:
66
66
  ApiResponse
67
67
  """
68
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
68
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
69
69
 
70
70
  @sp_endpoint('/sb/targets/{}', method='GET')
71
71
  def get_products_target(self, targetId, **kwargs) -> ApiResponse:
@@ -0,0 +1,7 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class Recommendations(Client):
5
+ @sp_endpoint('/sb​/recommendations​/creative​/headline', method='POST')
6
+ def list_recommendations(self, **kwargs) -> ApiResponse:
7
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Reports(Client):
@@ -27,7 +27,7 @@ class Reports(Client):
27
27
  ApiResponse
28
28
 
29
29
  """
30
- return self._request(fill_query_params(kwargs.pop('path'), recordType), data=kwargs.pop('body'), params=kwargs)
30
+ return self._request(fill_query_params(kwargs.pop('path'), recordType), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
31
31
 
32
32
  @sp_endpoint('/v2/reports/{}', method='GET')
33
33
  def get_report(self, reportId, **kwargs) -> ApiResponse:
@@ -14,7 +14,7 @@ class Snapshots(Client):
14
14
  Returns:
15
15
  ApiResponse
16
16
  """
17
- return self._request(fill_query_params(kwargs.pop('path'), recordType), data=kwargs.pop('body'), params=kwargs)
17
+ return self._request(fill_query_params(kwargs.pop('path'), recordType), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
18
18
 
19
19
  @sp_endpoint('/v2/hsa/snapshots/{}', method='GET')
20
20
  @Utils.deprecated
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Stores(Client):
@@ -41,4 +41,4 @@ class Stores(Client):
41
41
  @sp_endpoint('/stores/assets', method='POST')
42
42
  def create_asset(self, contentDisposition, contentType, **kwargs) -> ApiResponse:
43
43
  headers = {'Content-Disposition': contentDisposition, 'Content-Type': contentType}
44
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs, headers=headers)
44
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class TargetsRecommendations(Client):
@@ -21,7 +21,7 @@ class TargetsRecommendations(Client):
21
21
  Returns:
22
22
  ApiResponse
23
23
  """
24
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
24
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
25
25
 
26
26
  @sp_endpoint('/sb/recommendations/targets/category', method='POST')
27
27
  def list_category_targets(self, **kwargs) -> ApiResponse:
@@ -36,7 +36,7 @@ class TargetsRecommendations(Client):
36
36
  Returns:
37
37
  ApiResponse
38
38
  """
39
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
39
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
40
40
 
41
41
  @sp_endpoint('/sb/recommendations/targets/brand', method='POST')
42
42
  def list_brand_targets(self, **kwargs) -> ApiResponse:
@@ -52,4 +52,4 @@ class TargetsRecommendations(Client):
52
52
  Returns:
53
53
  ApiResponse
54
54
  """
55
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
55
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class AdGroups(Client):
@@ -49,7 +49,7 @@ class AdGroups(Client):
49
49
  ApiResponse
50
50
 
51
51
  """
52
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
52
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
53
53
 
54
54
  @sp_endpoint('/sd/adGroups', method='POST')
55
55
  def create_ad_groups(self, **kwargs) -> ApiResponse:
@@ -71,7 +71,7 @@ class AdGroups(Client):
71
71
  ApiResponse
72
72
 
73
73
  """
74
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
74
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
75
75
 
76
76
  @sp_endpoint('/sd/adGroups/{}', method='GET')
77
77
  def get_ad_group(self, adGroupId, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class BidRecommendations(Client):
@@ -88,4 +88,4 @@ class BidRecommendations(Client):
88
88
  """
89
89
  contentType = 'application/vnd.sdtargetingrecommendations.v3.2+json'
90
90
  headers = {'Content-Type': contentType}
91
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs, headers=headers)
91
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Campaigns(Client):
@@ -53,7 +53,7 @@ class Campaigns(Client):
53
53
  ApiResponse
54
54
 
55
55
  """
56
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
56
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
57
57
 
58
58
  @sp_endpoint('/sd/campaigns', method='POST')
59
59
  def create_campaigns(self, **kwargs) -> ApiResponse:
@@ -81,7 +81,7 @@ class Campaigns(Client):
81
81
  ApiResponse
82
82
 
83
83
  """
84
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
84
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
85
85
 
86
86
  @sp_endpoint('/sd/campaigns/{}', method='GET')
87
87
  def get_campaign(self, campaignId, **kwargs) -> ApiResponse:
@@ -171,7 +171,7 @@ class Creatives(Client):
171
171
  Returns
172
172
  ApiResponse
173
173
  """
174
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
174
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
175
175
 
176
176
  @sp_endpoint('/sd/moderation/creatives', method='GET')
177
177
  def list_moderation_creatives(self, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class NegativeTargets(Client):
@@ -49,7 +49,7 @@ class NegativeTargets(Client):
49
49
 
50
50
 
51
51
  """
52
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
52
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
53
53
 
54
54
  @sp_endpoint('/sd/negativeTargets', method='POST')
55
55
  def create_negative_targets(self, **kwargs) -> ApiResponse:
@@ -73,7 +73,7 @@ class NegativeTargets(Client):
73
73
 
74
74
 
75
75
  """
76
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
76
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
77
77
 
78
78
  @sp_endpoint('/sd/negativeTargets/{}', method='GET')
79
79
  def get_negative_target(self, targetId, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class ProductAds(Client):
@@ -51,7 +51,7 @@ class ProductAds(Client):
51
51
  ApiResponse
52
52
 
53
53
  """
54
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
54
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
55
55
 
56
56
  @sp_endpoint('/sd/productAds', method='POST')
57
57
  def create_product_ads(self, **kwargs) -> ApiResponse:
@@ -73,7 +73,7 @@ class ProductAds(Client):
73
73
  ApiResponse
74
74
 
75
75
  """
76
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
76
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
77
77
 
78
78
  @sp_endpoint('/sd/productAds/{}', method='GET')
79
79
  def get_product_ad(self, adId, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Targets(Client):
@@ -115,7 +115,7 @@ class Targets(Client):
115
115
 
116
116
 
117
117
  """
118
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
118
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
119
119
 
120
120
  @sp_endpoint('/sd/targets', method='PUT')
121
121
  def edit_products_targets(self, **kwargs) -> ApiResponse:
@@ -133,7 +133,7 @@ class Targets(Client):
133
133
  ApiResponse
134
134
 
135
135
  """
136
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
136
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
137
137
 
138
138
  @sp_endpoint('/sd/targets/{}', method='GET')
139
139
  def get_products_target(self, targetId, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Reports(Client):
@@ -38,7 +38,7 @@ class Reports(Client):
38
38
  ApiResponse
39
39
 
40
40
  """
41
- return self._request(fill_query_params(kwargs.pop('path'), recordType), data=kwargs.pop('body'), params=kwargs)
41
+ return self._request(fill_query_params(kwargs.pop('path'), recordType), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
42
42
 
43
43
  @sp_endpoint('/v2/reports/{}', method='GET')
44
44
  def get_report(self, reportId, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class Snapshots(Client):
@@ -13,7 +13,7 @@ class Snapshots(Client):
13
13
  Returns:
14
14
  ApiResponse
15
15
  """
16
- return self._request(fill_query_params(kwargs.pop('path'), recordType), data=kwargs.pop('body'), params=kwargs)
16
+ return self._request(fill_query_params(kwargs.pop('path'), recordType), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
17
17
 
18
18
  @sp_endpoint('/sd/snapshots/{}', method='GET')
19
19
  def get_snapshot(self, snapshotId, **kwargs) -> ApiResponse:
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class TargetsRecommendations(Client):
@@ -46,4 +46,4 @@ class TargetsRecommendations(Client):
46
46
  """
47
47
  contentType = 'application/vnd.sdtargetingrecommendations.v3.1+json'
48
48
  headers = {'Content-Type': contentType}
49
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs, headers=headers)
49
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
@@ -23,7 +23,7 @@ class AdGroups(Client):
23
23
  ApiResponse
24
24
 
25
25
  """
26
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
26
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
27
27
 
28
28
  @sp_endpoint('/v2/sp/adGroups', method='PUT')
29
29
  @Utils.deprecated
@@ -45,7 +45,7 @@ class AdGroups(Client):
45
45
  ApiResponse
46
46
 
47
47
  """
48
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
48
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
49
49
 
50
50
  @sp_endpoint('/v2/sp/adGroups', method='GET')
51
51
  @Utils.deprecated
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class BidRecommendations(Client):
@@ -55,7 +55,7 @@ class BidRecommendations(Client):
55
55
  ApiResponse
56
56
 
57
57
  """
58
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
58
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
59
59
 
60
60
  @sp_endpoint('/v2/sp/targets/bidRecommendations', method='POST')
61
61
  def get_targets_bid_recommendations(self, **kwargs) -> ApiResponse:
@@ -78,4 +78,4 @@ class BidRecommendations(Client):
78
78
  ApiResponse
79
79
 
80
80
  """
81
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
81
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -1,4 +1,4 @@
1
- from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse
1
+ from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
2
2
 
3
3
 
4
4
  class BidRecommendationsV3(Client):
@@ -56,4 +56,4 @@ class BidRecommendationsV3(Client):
56
56
 
57
57
  headers = {"Content-Type": json_version}
58
58
 
59
- return self._request(fill_query_params(kwargs.pop('path')), data=kwargs.pop('body'), params=kwargs, headers=headers)
59
+ return self._request(fill_query_params(kwargs.pop('path')), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
@@ -132,7 +132,7 @@ class CampaignNegativeKeywords(Client):
132
132
  ApiResponse
133
133
 
134
134
  """
135
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
135
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
136
136
 
137
137
  @sp_endpoint('/v2/sp/campaignNegativeKeywords', method='PUT')
138
138
  @Utils.deprecated
@@ -152,4 +152,4 @@ class CampaignNegativeKeywords(Client):
152
152
  ApiResponse
153
153
 
154
154
  """
155
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
155
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -148,7 +148,7 @@ class Keywords(Client):
148
148
 
149
149
 
150
150
  """
151
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
151
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
152
152
 
153
153
  @sp_endpoint('/v2/sp/keywords', method='PUT')
154
154
  @Utils.deprecated
@@ -169,4 +169,4 @@ class Keywords(Client):
169
169
  ApiResponse
170
170
 
171
171
  """
172
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
172
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -141,7 +141,7 @@ class NegativeKeywords(Client):
141
141
  ApiResponse
142
142
 
143
143
  """
144
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
144
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
145
145
 
146
146
  @sp_endpoint('/v2/sp/negativeKeywords', method='PUT')
147
147
  @Utils.deprecated
@@ -161,4 +161,4 @@ class NegativeKeywords(Client):
161
161
  ApiResponse
162
162
 
163
163
  """
164
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
164
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
@@ -26,7 +26,7 @@ class NegativeTargets(Client):
26
26
 
27
27
 
28
28
  """
29
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
29
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
30
30
 
31
31
  @sp_endpoint('/v2/sp/negativeTargets', method='PUT')
32
32
  @Utils.deprecated
@@ -52,7 +52,7 @@ class NegativeTargets(Client):
52
52
 
53
53
 
54
54
  """
55
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
55
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
56
56
 
57
57
  @sp_endpoint('/v2/sp/negativeTargets', method='GET')
58
58
  @Utils.deprecated
@@ -128,7 +128,7 @@ class ProductAds(Client):
128
128
  ApiResponse
129
129
 
130
130
  """
131
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
131
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
132
132
 
133
133
  @sp_endpoint('/v2/sp/productAds', method='POST')
134
134
  @Utils.deprecated
@@ -151,4 +151,4 @@ class ProductAds(Client):
151
151
  ApiResponse
152
152
 
153
153
  """
154
- return self._request(kwargs.pop('path'), data=kwargs.pop('body'), params=kwargs)
154
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)