python-amazon-ad-api 1.5.0__py3-none-any.whl → 1.5.2__py3-none-any.whl

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.
ad_api/api/v1/__init__.py CHANGED
@@ -10,6 +10,8 @@ from .brand_stores import BrandStores
10
10
  from .brand_store_editions import BrandStoreEditions
11
11
  from .brand_store_pages import BrandStorePages
12
12
  from .reports import Reports
13
+ from .labels import Labels
14
+ from .manager_accounts import ManagerAccounts
13
15
 
14
16
  __all__ = [
15
17
  "Campaigns",
@@ -24,4 +26,6 @@ __all__ = [
24
26
  "BrandStoreEditions",
25
27
  "BrandStorePages",
26
28
  "Reports",
29
+ "Labels",
30
+ "ManagerAccounts",
27
31
  ]
@@ -0,0 +1,56 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class Labels(Client):
5
+ r"""
6
+ Labels(account='default', marketplace: Marketplaces = Marketplaces.EU, credentials=None, debug=False)
7
+
8
+ Amazon Ads API v1 - unified Labels endpoints
9
+
10
+ Labels has a single route and it is read only: there is no create, update
11
+ or delete in the contract.
12
+
13
+ The required member is not the usual adProductFilter but
14
+ ``labelObjectTypeFilter``, and it takes exactly one value:
15
+
16
+ AD_GROUP, CAMPAIGN, DEAL, INVENTORY_GROUP
17
+
18
+ ``adProductFilter`` is optional here and also takes exactly one value.
19
+ """
20
+
21
+ @sp_endpoint('/adsApi/v1/query/labels', method='POST')
22
+ def query_labels(self, **kwargs) -> ApiResponse:
23
+ r"""
24
+ query_labels(body: dict) -> ApiResponse
25
+
26
+ Amazon Ads API v1 - Query Labels (operationId: QueryLabel)
27
+
28
+ Request Body [Required]
29
+ | **labelObjectTypeFilter** (dict) : [required] exactly one value
30
+ | **include** (list<LabelObjectType>) : Enum [ AD_GROUP, CAMPAIGN, DEAL, INVENTORY_GROUP ]
31
+ | **adProductFilter** (dict) : [optional] exactly one value
32
+ | **include** (list<AdProduct>) : Enum [ AMAZON_DSP, SPONSORED_BRANDS, SPONSORED_DISPLAY, SPONSORED_PRODUCTS, SPONSORED_TELEVISION ]
33
+ | **labelIdFilter** (dict) : [optional] 1..50 ids
34
+ | **include** (list<string>)
35
+ | **labelNameFilter** (dict) : [optional] 1..10 names
36
+ | **include** (list<string>)
37
+ | **maxResults** (int) : 1..1000, default 100
38
+ | **nextToken** (string) : token to navigate to the next page
39
+
40
+ Returns
41
+ | **labels** (list<Label>) : 0..1000
42
+ | **labelId** (string) : [required]
43
+ | **labelName** (string) : [required]
44
+ | **adProduct** (AdProduct)
45
+ | **nextToken** (string)
46
+
47
+ A body without labelObjectTypeFilter is a rejected request, not an
48
+ empty answer, so every call needs that member even when the other
49
+ filters are left out.
50
+
51
+ Requires one of these permissions:
52
+ campaign_edit, campaign_view
53
+ """
54
+ schema_version = 'application/json'
55
+ headers = {"Accept": schema_version, "Content-Type": schema_version}
56
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
@@ -0,0 +1,110 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class ManagerAccounts(Client):
5
+ r"""
6
+ ManagerAccounts(account='default', marketplace: Marketplaces = Marketplaces.EU, credentials=None, debug=False)
7
+
8
+ Amazon Ads API v1 - unified ManagerAccounts endpoints
9
+
10
+ Three routes, no delete in the contract:
11
+
12
+ POST /adsApi/v1/create/managerAccounts
13
+ POST /adsApi/v1/query/managerAccounts
14
+ POST /adsApi/v1/update/managerAccounts
15
+
16
+ This family is not about ad products, so no adProductFilter appears
17
+ anywhere. The query declares no required member at all: an empty body is a
18
+ valid request and returns every manager account the caller can see.
19
+
20
+ Both write routes take up to 10 accounts per call and answer a multi-status
21
+ with success[] and error[] indexed the same way.
22
+
23
+ Alongside this class the package keeps the legacy manager account reader as
24
+ ad_api.api.ManagerAccounts; the two live in different packages and do not
25
+ shadow each other.
26
+ """
27
+
28
+ @sp_endpoint('/adsApi/v1/query/managerAccounts', method='POST')
29
+ def query_manager_accounts(self, **kwargs) -> ApiResponse:
30
+ r"""
31
+ query_manager_accounts(body: dict) -> ApiResponse
32
+
33
+ Amazon Ads API v1 - Query Manager Accounts (operationId: QueryManagerAccount)
34
+
35
+ Request Body [All optional]
36
+ | **managerAccountIdFilter** (dict)
37
+ | **include** (list<string>) : 1..100 identifiers
38
+ | **maxResults** (int) : 10..100, default 100
39
+ | **nextToken** (string) : token to navigate to the next page
40
+
41
+ Returns
42
+ | **managerAccounts** (list<ManagerAccount>) : 0..100
43
+ | **displayName** (string)
44
+ | **managerAccountId** (string)
45
+ | **currencyCode** (CurrencyCode)
46
+ | **timeZoneIana** (TimeZoneIana)
47
+ | **industryVertical** (IndustryVertical)
48
+ | **accountUsageType** (AccountUsageType)
49
+ | **businessDetails** (BusinessDetail)
50
+ | **nextToken** (string)
51
+
52
+ maxResults starts at 10: a value below that is a rejected body, not a
53
+ smaller page.
54
+ """
55
+ schema_version = 'application/json'
56
+ headers = {"Accept": schema_version, "Content-Type": schema_version}
57
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
58
+
59
+ @sp_endpoint('/adsApi/v1/create/managerAccounts', method='POST')
60
+ def create_manager_accounts(self, **kwargs) -> ApiResponse:
61
+ r"""
62
+ create_manager_accounts(body: dict) -> ApiResponse
63
+
64
+ Amazon Ads API v1 - Create Manager Accounts (operationId: CreateManagerAccount)
65
+
66
+ Request Body [Required]
67
+ | **managerAccounts** (list<ManagerAccountCreate>) : [required] 1..10
68
+ | **displayName** (string) : required on create
69
+ | **currencyCode** (CurrencyCode)
70
+ | **timeZoneIana** (TimeZoneIana)
71
+ | **industryVertical** (IndustryVertical)
72
+ | **accountUsageType** (AccountUsageType)
73
+ | **businessDetails** (CreateBusinessDetail)
74
+
75
+ Answer
76
+ 207 MultiStatus: success[] carries the created accounts with their
77
+ index, error[] the index and reason of the refused ones.
78
+
79
+ This route creates an account in the manager hierarchy. It is not a
80
+ read and not something to fire to see what happens.
81
+ """
82
+ schema_version = 'application/json'
83
+ headers = {"Accept": schema_version, "Content-Type": schema_version}
84
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
85
+
86
+ @sp_endpoint('/adsApi/v1/update/managerAccounts', method='POST')
87
+ def update_manager_accounts(self, **kwargs) -> ApiResponse:
88
+ r"""
89
+ update_manager_accounts(body: dict) -> ApiResponse
90
+
91
+ Amazon Ads API v1 - Update Manager Accounts (operationId: UpdateManagerAccount)
92
+
93
+ Request Body [Required]
94
+ | **managerAccounts** (list<ManagerAccountUpdate>) : [required] 1..10
95
+ | **managerAccountId** (string) : the account to change
96
+ | **displayName** (string)
97
+ | **currencyCode** (CurrencyCode)
98
+ | **timeZoneIana** (TimeZoneIana)
99
+ | **industryVertical** (IndustryVertical)
100
+ | **businessDetails** (UpdateBusinessDetail)
101
+
102
+ Answer
103
+ 207 MultiStatus, indexed the same way as create.
104
+
105
+ businessDetails uses the Update variant of each nested object, so a
106
+ body copied from create is not interchangeable here.
107
+ """
108
+ schema_version = 'application/json'
109
+ headers = {"Accept": schema_version, "Content-Type": schema_version}
110
+ return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
ad_api/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.5.0"
1
+ __version__ = "1.5.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-amazon-ad-api
3
- Version: 1.5.0
3
+ Version: 1.5.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
@@ -312,6 +312,8 @@ The v1 API lives under `/adsApi/v1/` and is **not** split by product: every call
312
312
  * [Brand Store Editions](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/brand_store_editions.html#ad_api.api.v1.BrandStoreEditions.BrandStoreEditions.list_brand_store_editions)
313
313
  * [Brand Store Pages](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/brand_store_pages.html#ad_api.api.v1.BrandStorePages.BrandStorePages.query_brand_store_pages)
314
314
  * [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/reports.html#ad_api.api.v1.Reports.Reports.create_report)
315
+ * [Labels](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/labels.html#ad_api.api.v1.Labels.Labels.query_labels)
316
+ * [Manager Accounts](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/manager_accounts.html#ad_api.api.v1.ManagerAccounts.ManagerAccounts.query_manager_accounts)
315
317
 
316
318
 
317
319
  ### [Modules Available Sponsored Products](https://python-amazon-ad-api.readthedocs.io/en/latest/sp.html)
@@ -1,5 +1,5 @@
1
1
  ad_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- ad_api/version.py,sha256=X9pTeGHIYZtDOmfb9pnn2DEqWZMAyaPlqdFwEhsuSvk,22
2
+ ad_api/version.py,sha256=NLrkQ2LAsgJRVGHe-rDXXXW41i69D_hoSh1yM92AX5M,22
3
3
  ad_api/api/__init__.py,sha256=M07SD5BRC1L4_PqxLc8cKPI9Iq5zC2jPhkFUeHoh6CM,1632
4
4
  ad_api/api/account.py,sha256=CmOvCfHoPWaeTUJvtB0pNoNulZVSz4oMMCKIpVTpHos,2931
5
5
  ad_api/api/account_budgets.py,sha256=jFce5eLWAFK3ydjnYR7_Sv7B0-gHTG5bMTx_TcHyy1A,2319
@@ -89,7 +89,7 @@ ad_api/api/sp/product_recommendations.py,sha256=vXoZIRqcFc5bo9MUprArKndxcEYe_Puy
89
89
  ad_api/api/sp/product_targeting_v3.py,sha256=vk_T0piHzP5uwt8HSHm5hFKP_0sXJD8nbyooPtM-BTs,9567
90
90
  ad_api/api/sp/ranked_keywords_recommendations.py,sha256=QYFje19TFmwhedh7sn5VJIypL8gp6d6tpBQCpf_SIXw,13094
91
91
  ad_api/api/sp/schedule_based_bid_optimization.py,sha256=G8VkS7iP1lTIAxZgbfRCLz8njw1DkVH9HQPOZ63pWNU,2371
92
- ad_api/api/v1/__init__.py,sha256=1Pcd2suLJAL2yOFl_2p_rQe20ogRJEMIAdfGiLxlT90,766
92
+ ad_api/api/v1/__init__.py,sha256=svMwDtx7QswApWJ1fJ0Giw9l2YiRCoyzGq0-lRebnq4,876
93
93
  ad_api/api/v1/ad_associations.py,sha256=g5L8hAIagmsb-yQ09hP7z1zbVVe868NlpOOokv-Mouc,5812
94
94
  ad_api/api/v1/ad_extensions.py,sha256=kL-7xHaXXqb2jXTwZrY0oGttLAG0CW_IjBAqL_CI92U,5519
95
95
  ad_api/api/v1/ad_groups.py,sha256=pQhCVdve_O6kbL4mBA5bxxhKcKNl_BKqa7z9DvrxwaM,12626
@@ -100,6 +100,8 @@ ad_api/api/v1/brand_store_editions.py,sha256=xW4z2jDWhNJn86tWlT3eLIRr0NEpxLhW1eA
100
100
  ad_api/api/v1/brand_store_pages.py,sha256=TrSQbqlXqFv7i7RooxlFZOBrwYfEMPLvRPSJ9FjO87o,2765
101
101
  ad_api/api/v1/brand_stores.py,sha256=zlBsKiOwmdSiIG9filgdqUlPnV6AX-gE6S5nNyAQACc,2131
102
102
  ad_api/api/v1/campaigns.py,sha256=u5PlvoAhgVhMxbCvYkPgqtbYK3TXXcb7TMie0Qjrgwc,9573
103
+ ad_api/api/v1/labels.py,sha256=jjPmafIQZTh99Ztj5MCcDC7UyoFFN0YuWdn2syqd3Yg,2438
104
+ ad_api/api/v1/manager_accounts.py,sha256=cNAs1Qq6SYG0y4_4UpNBDfItqBJ1NvYACsIvFc8h-rw,4980
103
105
  ad_api/api/v1/reports.py,sha256=vJmWhIsALkX27HeijTsSUz3zrYhUBm4RodTCieJD8Y8,6657
104
106
  ad_api/api/v1/targets.py,sha256=a4BzPjg9m1JJwqphhpQOFkNIcgCw7v4-K0sNzOihMZI,12355
105
107
  ad_api/auth/__init__.py,sha256=B_yKdmsHENQaKfMFAIcSxQqG4aBUmNBm5orKIMUYObk,229
@@ -117,8 +119,8 @@ ad_api/base/exceptions.py,sha256=9D3M40ZIlLS0fA-aQh1BTWPOW-Nvf0tRhbA85jFnDJ4,438
117
119
  ad_api/base/helpers.py,sha256=UK7Q13vZ0mNdF54xzfzoGDn2O_cd2yPrK2X4rOzC41c,2334
118
120
  ad_api/base/marketplaces.py,sha256=44lvCcluXNpqTprWQ80e3weSQmQbJoWL-WDSOWVbCyQ,4657
119
121
  ad_api/base/utils.py,sha256=_qnCBOvyJTLgaZjJzUWTi38GGLHkQszXELs79133Rb4,5618
120
- python_amazon_ad_api-1.5.0.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
121
- python_amazon_ad_api-1.5.0.dist-info/METADATA,sha256=ofNprBWjLQQyP6eWTdG4JRGzOJwxjU0fKGryodntY-c,22959
122
- python_amazon_ad_api-1.5.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
123
- python_amazon_ad_api-1.5.0.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
124
- python_amazon_ad_api-1.5.0.dist-info/RECORD,,
122
+ python_amazon_ad_api-1.5.2.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
123
+ python_amazon_ad_api-1.5.2.dist-info/METADATA,sha256=UYOy1zbCPXhih_Bl02eQ97h2J2mTUvKgN58w5XxjFXI,23251
124
+ python_amazon_ad_api-1.5.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
125
+ python_amazon_ad_api-1.5.2.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
126
+ python_amazon_ad_api-1.5.2.dist-info/RECORD,,