python-amazon-ad-api 1.2.8__py3-none-any.whl → 1.3.0__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/__init__.py CHANGED
@@ -3,6 +3,7 @@ from .profiles import Profiles
3
3
  from .manager_accounts import ManagerAccounts
4
4
  from .invoices import Invoices
5
5
  from .billing import Billing
6
+ from .account_budgets import AccountBudgets
6
7
  from .eligibility import Eligibility
7
8
  from .metadata import Metadata
8
9
  from .history import History
@@ -38,6 +39,7 @@ __all__ = [
38
39
  "ManagerAccounts",
39
40
  "Invoices",
40
41
  "Billing",
42
+ "AccountBudgets",
41
43
  "Eligibility",
42
44
  "Metadata",
43
45
  "History",
@@ -45,6 +47,7 @@ __all__ = [
45
47
  "Localization",
46
48
  "Audiences",
47
49
  "Portfolios",
50
+ "PortfoliosV3",
48
51
  "Insights",
49
52
  "Attribution",
50
53
  "BrandMetrics",
@@ -0,0 +1,53 @@
1
+ from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
2
+
3
+
4
+ class AccountBudgets(Client):
5
+ """ """
6
+
7
+ @sp_endpoint('/accountBudgets/featureFlags', method='GET')
8
+ def get_feature_flags(self, **kwargs) -> ApiResponse:
9
+ r"""
10
+ Reports whether the account has opted out of automatic budget increases.
11
+
12
+ Returns
13
+ ApiResponse with a ``featureFlags`` object holding one member,
14
+ ``isOptedOutForAverageDailyBudgetIncrease``. At ``true`` the account
15
+ has opted out, and the service will not raise a campaign's daily
16
+ budget on its own; at ``false`` it may.
17
+
18
+ """
19
+ headers = {'Accept': 'application/vnd.accountBudgetFeatureFlags.v1+json'}
20
+ return self._request(kwargs.pop('path'), params=kwargs, headers=headers)
21
+
22
+ @sp_endpoint('/accountBudgets/featureFlags', method='POST')
23
+ def update_feature_flags(self, **kwargs) -> ApiResponse:
24
+ r"""
25
+ Changes whether the account opts out of automatic budget increases.
26
+
27
+ Request Body (required)
28
+
29
+ - ``featureFlags`` (object): required. A ``FeatureFlags`` object holding
30
+ ``isOptedOutForAverageDailyBudgetIncrease``. Set it to ``true`` to stop
31
+ the service raising daily budgets on its own, ``false`` to allow it.
32
+
33
+ .. warning::
34
+
35
+ This changes how the account is charged. With the flag at ``false``
36
+ the service may raise a campaign's daily budget without another call
37
+ from you, and spend follows the budget. Not exercised here: the
38
+ setting belongs to the account holder.
39
+
40
+ Returns
41
+ ApiResponse with ``code`` and ``details``, not with the flags read
42
+ back. ``code`` is ``OK``, ``ENTRY_NOT_FOUND`` or
43
+ ``INVALID_PARAMETER_VALUE``, so a ``200`` carrying something other
44
+ than ``OK`` means the change did not land. Read the flags again with
45
+ ``get_feature_flags`` to confirm.
46
+
47
+ """
48
+ headers = {
49
+ 'Accept': 'application/vnd.accountBudgetFeatureFlags.v1+json',
50
+ 'Content-Type': 'application/vnd.accountBudgetFeatureFlags.v1+json',
51
+ }
52
+ body = Utils.convert_body(kwargs.pop('body'), False)
53
+ return self._request(kwargs.pop('path'), data=body, params=kwargs, headers=headers)
@@ -13,7 +13,7 @@ class Recommendations(Client):
13
13
  | ListRecommendationsRequest {
14
14
  | **maxResults** (integer) default: 500 minimum: 1 maximum: 500
15
15
  | **nextToken** (string) Token to retrieve the next page of results.
16
- | **filters**\* (array) minItems: 1 maxItems: 10 [
16
+ | **filters** (array) minItems: 1 maxItems: 10 [
17
17
  | ListRecommendationsFilter {
18
18
  | **include** (boolean): Flag to specify if the filter should be included or excluded. default: true
19
19
  | **field**\* FilterField (string): Field to filter by. Enum: ['RECOMMENDATION_ID', 'AD_PRODUCT', 'RECOMMENDATION_TYPE', 'STATUS', 'GROUPING_TYPE', 'CAMPAIGN_ID']
@@ -24,8 +24,27 @@ class Recommendations(Client):
24
24
  | }
25
25
  | ]
26
26
  | }
27
+
28
+ The values ``STATUS`` accepts are not the states of a campaign. They are
29
+ the stages a recommendation passes through, and the service names them in
30
+ its rejection message: ``PUBLISHED``, ``APPLY_IN_PROGRESS``,
31
+ ``APPLY_SUCCESS``, ``APPLY_FAILED`` and ``REJECTED``. ``ENABLED`` and
32
+ ``ACTIVE`` are refused.
33
+
34
+ ``filters`` behaves oddly. An empty list answers
35
+ ``400 Member must have length greater than or equal to 1``, yet leaving
36
+ the member out altogether answers ``200`` with the account's
37
+ recommendations. So it is required when present, and optional in
38
+ practice.
39
+
40
+ A body is required: without one the call fails before reaching the
41
+ service, with ``KeyError: 'body'``.
42
+
27
43
  Returns
28
- ApiResponse
44
+ ApiResponse with ``recommendations``, ``totalResults`` and
45
+ ``nextToken``. The list is empty for an account that has none, which
46
+ is a fact about the account rather than a failed call.
47
+
29
48
  """
30
49
  schema_version = 'application/vnd.listRecommendationsRequest.v' + str(version) + '+json'
31
50
  headers = {"Accept": schema_version, "Content-Type": schema_version}
@@ -42,6 +61,15 @@ class Recommendations(Client):
42
61
  | (string) Recommendation identifier.
43
62
  | ]
44
63
  | }
64
+
65
+ .. warning::
66
+
67
+ This changes campaigns. Applying a recommendation edits real bidding
68
+ and budgets on the account, and there is no undo richer than
69
+ changing them back by hand.
70
+
71
+ Not exercised: no recommendation existed on the account to apply.
72
+
45
73
  Returns
46
74
  ApiResponse
47
75
  """
@@ -79,6 +107,15 @@ class Recommendations(Client):
79
107
  | }
80
108
  | }
81
109
  | }
110
+
111
+ .. warning::
112
+
113
+ This edits a recommendation before it is applied. Read one first with
114
+ ``list_recommendations`` for the shape it expects, since the fields
115
+ change with ``recommendationType``.
116
+
117
+ Not exercised, for the same reason as ``apply_recommendations``.
118
+
82
119
  Returns
83
120
  ApiResponse
84
121
 
ad_api/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.2.8"
1
+ __version__ = "1.3.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-amazon-ad-api
3
- Version: 1.2.8
3
+ Version: 1.3.0
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
@@ -266,6 +266,7 @@ curl \
266
266
  * [PortfoliosV3](https://python-amazon-ad-api.readthedocs.io/en/latest/api/portfoliosV3.html)
267
267
  * [Invoices](https://python-amazon-ad-api.readthedocs.io/en/latest/api/invoices.html)
268
268
  * [Billing](https://python-amazon-ad-api.readthedocs.io/en/latest/api/billing.html)
269
+ * [Account Budgets](https://python-amazon-ad-api.readthedocs.io/en/latest/api/account_budgets.html)
269
270
  * [Audiences](https://python-amazon-ad-api.readthedocs.io/en/latest/api/audiences.html)
270
271
  * [Change History](https://python-amazon-ad-api.readthedocs.io/en/latest/api/history.html)
271
272
  * [Creative Assets](https://python-amazon-ad-api.readthedocs.io/en/latest/api/creative_assets.html)
@@ -274,7 +275,7 @@ curl \
274
275
  * [Localization](https://python-amazon-ad-api.readthedocs.io/en/latest/api/localization.html)
275
276
  * [Product Selector](https://python-amazon-ad-api.readthedocs.io/en/latest/api/metadata.html)
276
277
  * [Validation Configurations](https://python-amazon-ad-api.readthedocs.io/en/latest/api/validation_configurations.html)
277
- * [Tactical recommendations beta](https://python-amazon-ad-api.readthedocs.io/en/latest/api/recommendations.html)
278
+ * [Tactical recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/api/recommendations.html)
278
279
  * [Exports](https://advertising.amazon.com/API/docs/en-us/exports)
279
280
 
280
281
 
@@ -1,7 +1,8 @@
1
1
  ad_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- ad_api/version.py,sha256=CfVXm0wwlKPW0khOcwhWw61TpgtZiLijCePsAIOK3aU,22
3
- ad_api/api/__init__.py,sha256=E9c0ZyK4vplMlKKEBF8CV5u7P4uSkTMSQsAuSQu5bfY,1514
2
+ ad_api/version.py,sha256=F5mW07pSyGrqDNY2Ehr-UpDzpBtN-FsYU0QGZWf6PJE,22
3
+ ad_api/api/__init__.py,sha256=TLMefdmuyrj3-vtxGlzX4Sl-lHmE3Rs6daYgw3zwO0c,1600
4
4
  ad_api/api/account.py,sha256=CmOvCfHoPWaeTUJvtB0pNoNulZVSz4oMMCKIpVTpHos,2931
5
+ ad_api/api/account_budgets.py,sha256=jFce5eLWAFK3ydjnYR7_Sv7B0-gHTG5bMTx_TcHyy1A,2319
5
6
  ad_api/api/advertising_test_account.py,sha256=btOVbdk2tBDmyKSJaQbcIFyzNG8KFJVUmTe4p9xMhpU,1507
6
7
  ad_api/api/attribution.py,sha256=vHmXP0wDqhEqaS1q3tJyERxJ1JwntqoEb73LVXNHxR0,5121
7
8
  ad_api/api/audiences.py,sha256=TQPt4avswFdCodNfQGDGxcJ2mY2LP2BfYvjxP6oJ0qY,3491
@@ -19,7 +20,7 @@ ad_api/api/metadata.py,sha256=vWPbDGvEB72421fjSu4KrNkTdrIijHTPV8k36hceSbA,2406
19
20
  ad_api/api/portfolios.py,sha256=Oe3LS2HsjMJSq1Id8cwOWrH2AiPMcBb7oTkFHjudnTI,7103
20
21
  ad_api/api/portfolios_v3.py,sha256=qqIzXmhnb3g2QmTENsgzOayhvOObgI-rD7PTfftgDQg,6842
21
22
  ad_api/api/profiles.py,sha256=mMSCUd5HdR_nFBDFngLY94tIfMCA4yGnjHz-PSMe0rE,7200
22
- ad_api/api/recommendations.py,sha256=aVDnnX8GEhdOVSKypIs8lyUJCiFxo9ujMYVXqzHTvBc,4633
23
+ ad_api/api/recommendations.py,sha256=_r4LsJkRTkiuOvzS7wrtR2ZmxA7gGe-T4jRDAqM6pRo,6198
23
24
  ad_api/api/reports.py,sha256=gNmDHLULD2uaJgsMpIbCX9kabwhMXRr9WfZBtHUdsOY,6043
24
25
  ad_api/api/stores.py,sha256=7W3RJKZyZOQ3nHzInvK9FDhWTXCH6Xe9a6dCBatEZ-o,2484
25
26
  ad_api/api/stream.py,sha256=JpnF8SKniOAHiEnEq1RPrh6tNy-Q2-8GPBTmnlxEXqQ,2989
@@ -108,8 +109,8 @@ ad_api/base/exceptions.py,sha256=9D3M40ZIlLS0fA-aQh1BTWPOW-Nvf0tRhbA85jFnDJ4,438
108
109
  ad_api/base/helpers.py,sha256=UK7Q13vZ0mNdF54xzfzoGDn2O_cd2yPrK2X4rOzC41c,2334
109
110
  ad_api/base/marketplaces.py,sha256=44lvCcluXNpqTprWQ80e3weSQmQbJoWL-WDSOWVbCyQ,4657
110
111
  ad_api/base/utils.py,sha256=_qnCBOvyJTLgaZjJzUWTi38GGLHkQszXELs79133Rb4,5618
111
- python_amazon_ad_api-1.2.8.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
112
- python_amazon_ad_api-1.2.8.dist-info/METADATA,sha256=Gu3pJw5dG36SOI5utdAevmjKaG-xqxVPW_tr_dhNuBI,21458
113
- python_amazon_ad_api-1.2.8.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
114
- python_amazon_ad_api-1.2.8.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
115
- python_amazon_ad_api-1.2.8.dist-info/RECORD,,
112
+ python_amazon_ad_api-1.3.0.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
113
+ python_amazon_ad_api-1.3.0.dist-info/METADATA,sha256=rN92CtI2QXdshEfkqjmzsNCIN7wVnJFGHXLBuPdVw50,21553
114
+ python_amazon_ad_api-1.3.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
115
+ python_amazon_ad_api-1.3.0.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
116
+ python_amazon_ad_api-1.3.0.dist-info/RECORD,,