python-amazon-paapi 6.1.0__py3-none-any.whl → 6.2.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.
@@ -106,7 +106,8 @@ class AsyncAmazonCreatorsApi:
106
106
 
107
107
  Raises:
108
108
  InvalidArgumentError: If neither country nor marketplace is provided.
109
- ValueError: If version is not supported (valid versions: 2.1, 2.2, 2.3).
109
+ ValueError: If version is not supported (valid versions: 2.1, 2.2, 2.3,
110
+ 3.1, 3.2, 3.3).
110
111
 
111
112
  """
112
113
 
@@ -483,7 +484,7 @@ class AsyncAmazonCreatorsApi:
483
484
  token = await self._token_manager.get_token()
484
485
 
485
486
  headers = {
486
- "Authorization": f"Bearer {token}, Version {self._version}",
487
+ "Authorization": self._build_authorization_header(token),
487
488
  "Content-Type": "application/json; charset=utf-8",
488
489
  "x-marketplace": self.marketplace,
489
490
  }
@@ -501,6 +502,12 @@ class AsyncAmazonCreatorsApi:
501
502
 
502
503
  return response.json()
503
504
 
505
+ def _build_authorization_header(self, token: str) -> str:
506
+ """Build the version-appropriate Authorization header."""
507
+ if self._version.startswith("3."):
508
+ return f"Bearer {token}"
509
+ return f"Bearer {token}, Version {self._version}"
510
+
504
511
  def _handle_error_response(self, status_code: int, body: str) -> None:
505
512
  """Handle API error responses and raise appropriate exceptions.
506
513
 
@@ -21,7 +21,10 @@ except ImportError as exc: # pragma: no cover
21
21
 
22
22
 
23
23
  # OAuth2 constants
24
- SCOPE = "creatorsapi/default"
24
+ COGNITO_SCOPE = "creatorsapi/default"
25
+ LWA_SCOPE = "creatorsapi::default"
26
+ # Backward-compatible alias for existing v2.x users.
27
+ SCOPE = COGNITO_SCOPE
25
28
  GRANT_TYPE = "client_credentials"
26
29
 
27
30
  # Token expiration buffer in seconds (refresh 30s before actual expiration)
@@ -32,6 +35,9 @@ VERSION_ENDPOINTS = {
32
35
  "2.1": "https://creatorsapi.auth.us-east-1.amazoncognito.com/oauth2/token",
33
36
  "2.2": "https://creatorsapi.auth.eu-south-2.amazoncognito.com/oauth2/token",
34
37
  "2.3": "https://creatorsapi.auth.us-west-2.amazoncognito.com/oauth2/token",
38
+ "3.1": "https://api.amazon.com/auth/o2/token",
39
+ "3.2": "https://api.amazon.co.uk/auth/o2/token",
40
+ "3.3": "https://api.amazon.co.jp/auth/o2/token",
35
41
  }
36
42
 
37
43
 
@@ -97,6 +103,14 @@ class AsyncOAuth2TokenManager:
97
103
 
98
104
  return VERSION_ENDPOINTS[version]
99
105
 
106
+ def is_lwa(self) -> bool:
107
+ """Return whether this token manager uses the LWA auth flow."""
108
+ return self._version.startswith("3.")
109
+
110
+ def get_scope(self) -> str:
111
+ """Return the version-appropriate OAuth2 scope."""
112
+ return LWA_SCOPE if self.is_lwa() else COGNITO_SCOPE
113
+
100
114
  @property
101
115
  def lock(self) -> asyncio.Lock:
102
116
  """Lazy initialization of the asyncio.Lock.
@@ -168,20 +182,23 @@ class AsyncOAuth2TokenManager:
168
182
  "grant_type": GRANT_TYPE,
169
183
  "client_id": self._credential_id,
170
184
  "client_secret": self._credential_secret,
171
- "scope": SCOPE,
172
- }
173
-
174
- headers = {
175
- "Content-Type": "application/x-www-form-urlencoded",
185
+ "scope": self.get_scope(),
176
186
  }
177
187
 
178
188
  try:
179
189
  async with httpx.AsyncClient() as client:
180
- response = await client.post(
181
- self._auth_endpoint,
182
- data=request_data,
183
- headers=headers,
184
- )
190
+ if self.is_lwa():
191
+ response = await client.post(
192
+ self._auth_endpoint,
193
+ json=request_data,
194
+ headers={"Content-Type": "application/json"},
195
+ )
196
+ else:
197
+ response = await client.post(
198
+ self._auth_endpoint,
199
+ data=request_data,
200
+ headers={"Content-Type": "application/x-www-form-urlencoded"},
201
+ )
185
202
 
186
203
  if response.status_code != 200: # noqa: PLR2004
187
204
  self.clear_token()
@@ -123,5 +123,6 @@ from creatorsapi_python_sdk.models.validation_exception_response_content import
123
123
  from creatorsapi_python_sdk.models.variation_attribute import VariationAttribute
124
124
  from creatorsapi_python_sdk.models.variation_dimension import VariationDimension
125
125
  from creatorsapi_python_sdk.models.variation_summary import VariationSummary
126
+ from creatorsapi_python_sdk.models.variation_summary_price import VariationSummaryPrice
126
127
  from creatorsapi_python_sdk.models.variations_result import VariationsResult
127
128
  from creatorsapi_python_sdk.models.website_sales_rank import WebsiteSalesRank
@@ -424,6 +424,7 @@ class DefaultApi:
424
424
  '401': "UnauthorizedExceptionResponseContent",
425
425
  '403': "AccessDeniedExceptionResponseContent",
426
426
  '404': "ResourceNotFoundExceptionResponseContent",
427
+ '429': "ThrottleExceptionResponseContent",
427
428
  '500': "InternalServerExceptionResponseContent",
428
429
  }
429
430
  response_data = self.api_client.call_api(
@@ -500,6 +501,7 @@ class DefaultApi:
500
501
  '401': "UnauthorizedExceptionResponseContent",
501
502
  '403': "AccessDeniedExceptionResponseContent",
502
503
  '404': "ResourceNotFoundExceptionResponseContent",
504
+ '429': "ThrottleExceptionResponseContent",
503
505
  '500': "InternalServerExceptionResponseContent",
504
506
  }
505
507
  response_data = self.api_client.call_api(
@@ -576,6 +578,7 @@ class DefaultApi:
576
578
  '401': "UnauthorizedExceptionResponseContent",
577
579
  '403': "AccessDeniedExceptionResponseContent",
578
580
  '404': "ResourceNotFoundExceptionResponseContent",
581
+ '429': "ThrottleExceptionResponseContent",
579
582
  '500': "InternalServerExceptionResponseContent",
580
583
  }
581
584
  response_data = self.api_client.call_api(
@@ -1026,6 +1029,7 @@ class DefaultApi:
1026
1029
  '401': "UnauthorizedExceptionResponseContent",
1027
1030
  '403': "AccessDeniedExceptionResponseContent",
1028
1031
  '404': "ResourceNotFoundExceptionResponseContent",
1032
+ '429': "ThrottleExceptionResponseContent",
1029
1033
  '500': "InternalServerExceptionResponseContent",
1030
1034
  }
1031
1035
  response_data = self.api_client.call_api(
@@ -1102,6 +1106,7 @@ class DefaultApi:
1102
1106
  '401': "UnauthorizedExceptionResponseContent",
1103
1107
  '403': "AccessDeniedExceptionResponseContent",
1104
1108
  '404': "ResourceNotFoundExceptionResponseContent",
1109
+ '429': "ThrottleExceptionResponseContent",
1105
1110
  '500': "InternalServerExceptionResponseContent",
1106
1111
  }
1107
1112
  response_data = self.api_client.call_api(
@@ -1178,6 +1183,7 @@ class DefaultApi:
1178
1183
  '401': "UnauthorizedExceptionResponseContent",
1179
1184
  '403': "AccessDeniedExceptionResponseContent",
1180
1185
  '404': "ResourceNotFoundExceptionResponseContent",
1186
+ '429': "ThrottleExceptionResponseContent",
1181
1187
  '500': "InternalServerExceptionResponseContent",
1182
1188
  }
1183
1189
  response_data = self.api_client.call_api(
@@ -1627,6 +1633,7 @@ class DefaultApi:
1627
1633
  '401': "UnauthorizedExceptionResponseContent",
1628
1634
  '403': "AccessDeniedExceptionResponseContent",
1629
1635
  '404': "ResourceNotFoundExceptionResponseContent",
1636
+ '429': "ThrottleExceptionResponseContent",
1630
1637
  '500': "InternalServerExceptionResponseContent",
1631
1638
  }
1632
1639
  response_data = self.api_client.call_api(
@@ -1699,6 +1706,7 @@ class DefaultApi:
1699
1706
  '401': "UnauthorizedExceptionResponseContent",
1700
1707
  '403': "AccessDeniedExceptionResponseContent",
1701
1708
  '404': "ResourceNotFoundExceptionResponseContent",
1709
+ '429': "ThrottleExceptionResponseContent",
1702
1710
  '500': "InternalServerExceptionResponseContent",
1703
1711
  }
1704
1712
  response_data = self.api_client.call_api(
@@ -1771,6 +1779,7 @@ class DefaultApi:
1771
1779
  '401': "UnauthorizedExceptionResponseContent",
1772
1780
  '403': "AccessDeniedExceptionResponseContent",
1773
1781
  '404': "ResourceNotFoundExceptionResponseContent",
1782
+ '429': "ThrottleExceptionResponseContent",
1774
1783
  '500': "InternalServerExceptionResponseContent",
1775
1784
  }
1776
1785
  response_data = self.api_client.call_api(
@@ -1899,6 +1908,8 @@ class DefaultApi:
1899
1908
  '400': "ValidationExceptionResponseContent",
1900
1909
  '401': "UnauthorizedExceptionResponseContent",
1901
1910
  '403': "AccessDeniedExceptionResponseContent",
1911
+ '404': "ResourceNotFoundExceptionResponseContent",
1912
+ '429': "ThrottleExceptionResponseContent",
1902
1913
  '500': "InternalServerExceptionResponseContent",
1903
1914
  }
1904
1915
  response_data = self.api_client.call_api(
@@ -1970,6 +1981,8 @@ class DefaultApi:
1970
1981
  '400': "ValidationExceptionResponseContent",
1971
1982
  '401': "UnauthorizedExceptionResponseContent",
1972
1983
  '403': "AccessDeniedExceptionResponseContent",
1984
+ '404': "ResourceNotFoundExceptionResponseContent",
1985
+ '429': "ThrottleExceptionResponseContent",
1973
1986
  '500': "InternalServerExceptionResponseContent",
1974
1987
  }
1975
1988
  response_data = self.api_client.call_api(
@@ -2041,6 +2054,8 @@ class DefaultApi:
2041
2054
  '400': "ValidationExceptionResponseContent",
2042
2055
  '401': "UnauthorizedExceptionResponseContent",
2043
2056
  '403': "AccessDeniedExceptionResponseContent",
2057
+ '404': "ResourceNotFoundExceptionResponseContent",
2058
+ '429': "ThrottleExceptionResponseContent",
2044
2059
  '500': "InternalServerExceptionResponseContent",
2045
2060
  }
2046
2061
  response_data = self.api_client.call_api(
@@ -107,7 +107,7 @@ class ApiClient:
107
107
  self.default_headers[header_name] = header_value
108
108
  self.cookie = cookie
109
109
  # Set default User-Agent.
110
- self.user_agent = 'creatorsapi-python-sdk/1.1.2'
110
+ self.user_agent = 'creatorsapi-python-sdk/1.2.0'
111
111
  self.client_side_validation = configuration.client_side_validation
112
112
 
113
113
  # OAuth2 properties
@@ -387,8 +387,11 @@ class ApiClient:
387
387
  self._token_manager = OAuth2TokenManager(config)
388
388
  # Get token (will use cached token if valid)
389
389
  token = self._token_manager.get_token()
390
- # Add Authorization headers
391
- header_params['Authorization'] = 'Bearer {}, Version {}'.format(token, self.version)
390
+ # Add Authorization headers - Version only for v2.x
391
+ if self.version.startswith("3."):
392
+ header_params['Authorization'] = 'Bearer {}'.format(token)
393
+ else:
394
+ header_params['Authorization'] = 'Bearer {}, Version {}'.format(token, self.version)
392
395
  except Exception as error:
393
396
  raise error
394
397
 
@@ -24,7 +24,8 @@ class OAuth2Config:
24
24
  """OAuth2 configuration class that manages version-specific cognito endpoints"""
25
25
 
26
26
  # Constants
27
- SCOPE = "creatorsapi/default"
27
+ COGNITO_SCOPE = "creatorsapi/default"
28
+ LWA_SCOPE = "creatorsapi::default"
28
29
  GRANT_TYPE = "client_credentials"
29
30
 
30
31
  def __init__(self, credential_id, credential_secret, version, auth_endpoint):
@@ -54,15 +55,30 @@ class OAuth2Config:
54
55
  if auth_endpoint and auth_endpoint.strip():
55
56
  return auth_endpoint
56
57
 
57
- # Fall back to version-based defaults
58
+ # Cognito endpoints (v2.x)
58
59
  if version == "2.1":
59
60
  return "https://creatorsapi.auth.us-east-1.amazoncognito.com/oauth2/token"
60
61
  elif version == "2.2":
61
62
  return "https://creatorsapi.auth.eu-south-2.amazoncognito.com/oauth2/token"
62
63
  elif version == "2.3":
63
64
  return "https://creatorsapi.auth.us-west-2.amazoncognito.com/oauth2/token"
65
+ # LWA endpoints (v3.x)
66
+ elif version == "3.1":
67
+ return "https://api.amazon.com/auth/o2/token"
68
+ elif version == "3.2":
69
+ return "https://api.amazon.co.uk/auth/o2/token"
70
+ elif version == "3.3":
71
+ return "https://api.amazon.co.jp/auth/o2/token"
64
72
  else:
65
- raise ValueError("Unsupported version: {}. Supported versions are: 2.1, 2.2, 2.3".format(version))
73
+ raise ValueError("Unsupported version: {}. Supported versions are: 2.1, 2.2, 2.3, 3.1, 3.2, 3.3".format(version))
74
+
75
+ def is_lwa(self):
76
+ """
77
+ Checks if this is an LWA (v3.x) configuration
78
+
79
+ :return: True if using LWA authentication
80
+ """
81
+ return self.version.startswith("3.")
66
82
 
67
83
  def get_token_endpoint(self, version):
68
84
  """
@@ -112,7 +128,7 @@ class OAuth2Config:
112
128
 
113
129
  :return: The OAuth2 scope
114
130
  """
115
- return OAuth2Config.SCOPE
131
+ return OAuth2Config.LWA_SCOPE if self.is_lwa() else OAuth2Config.COGNITO_SCOPE
116
132
 
117
133
  def get_grant_type(self):
118
134
  """
@@ -67,22 +67,35 @@ class OAuth2TokenManager:
67
67
  :raises Exception: If token refresh fails
68
68
  """
69
69
  try:
70
- request_data = {
71
- 'grant_type': self.config.get_grant_type(),
72
- 'client_id': self.config.get_credential_id(),
73
- 'client_secret': self.config.get_credential_secret(),
74
- 'scope': self.config.get_scope()
75
- }
76
-
77
- headers = {
78
- 'Content-Type': 'application/x-www-form-urlencoded'
79
- }
80
-
81
- response = requests.post(
82
- self.config.get_cognito_endpoint(),
83
- data=request_data,
84
- headers=headers
85
- )
70
+ if self.config.is_lwa():
71
+ # LWA (v3.x) uses JSON body
72
+ request_data = {
73
+ 'grant_type': self.config.get_grant_type(),
74
+ 'client_id': self.config.get_credential_id(),
75
+ 'client_secret': self.config.get_credential_secret(),
76
+ 'scope': self.config.get_scope()
77
+ }
78
+ headers = {'Content-Type': 'application/json'}
79
+ response = requests.post(
80
+ self.config.get_cognito_endpoint(),
81
+ json=request_data,
82
+ headers=headers
83
+ )
84
+ else:
85
+ # Cognito (v2.x) uses form-encoded
86
+ request_data = {
87
+ 'grant_type': self.config.get_grant_type(),
88
+ 'client_id': self.config.get_credential_id(),
89
+ 'client_secret': self.config.get_credential_secret(),
90
+ 'scope': self.config.get_scope()
91
+ }
92
+ headers = {'Content-Type': 'application/x-www-form-urlencoded'}
93
+ response = requests.post(
94
+ self.config.get_cognito_endpoint(),
95
+ data=request_data,
96
+ headers=headers
97
+ )
98
+
86
99
  if response.status_code != 200:
87
100
  raise Exception("OAuth2 token request failed with status {}: {}".format(response.status_code, response.text))
88
101
 
@@ -106,5 +106,6 @@ from creatorsapi_python_sdk.models.validation_exception_response_content import
106
106
  from creatorsapi_python_sdk.models.variation_attribute import VariationAttribute
107
107
  from creatorsapi_python_sdk.models.variation_dimension import VariationDimension
108
108
  from creatorsapi_python_sdk.models.variation_summary import VariationSummary
109
+ from creatorsapi_python_sdk.models.variation_summary_price import VariationSummaryPrice
109
110
  from creatorsapi_python_sdk.models.variations_result import VariationsResult
110
111
  from creatorsapi_python_sdk.models.website_sales_rank import WebsiteSalesRank
@@ -26,6 +26,7 @@ import json
26
26
  from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt
27
27
  from typing import Any, ClassVar, Dict, List, Optional, Union
28
28
  from creatorsapi_python_sdk.models.variation_dimension import VariationDimension
29
+ from creatorsapi_python_sdk.models.variation_summary_price import VariationSummaryPrice
29
30
  from typing import Optional, Set
30
31
  from typing_extensions import Self
31
32
 
@@ -34,9 +35,10 @@ class VariationSummary(BaseModel):
34
35
  The container for Variations Summary response. It consists of metadata of variations response like page numbers, number of variations, Price range and Variation Dimensions.
35
36
  """ # noqa: E501
36
37
  page_count: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Number of pages in the variation result set.", alias="pageCount")
38
+ price: Optional[VariationSummaryPrice] = None
37
39
  variation_count: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Total number of variations available for the product. This represents the complete count of all child ASINs across all pages. Use this value along with pageCount to understand the full scope of available variations.", alias="variationCount")
38
40
  variation_dimensions: Optional[List[VariationDimension]] = Field(default=None, description="List of variation dimensions associated with the product. Variation dimensions define the attributes on which products vary (e.g., size, color). Each dimension includes: - Display name and locale for presentation - Dimension name (internal identifier) - List of all possible values for that dimension For example, a clothing item might have two dimensions: 'Size' with values ['S', 'M', 'L'] and 'Color' with values ['Red', 'Blue', 'Green']. These dimensions help users understand how variations differ from each other.", alias="variationDimensions")
39
- __properties: ClassVar[List[str]] = ["pageCount", "variationCount", "variationDimensions"]
41
+ __properties: ClassVar[List[str]] = ["pageCount", "price", "variationCount", "variationDimensions"]
40
42
 
41
43
  model_config = ConfigDict(
42
44
  populate_by_name=True,
@@ -76,6 +78,9 @@ class VariationSummary(BaseModel):
76
78
  exclude=excluded_fields,
77
79
  exclude_none=True,
78
80
  )
81
+ # override the default output from pydantic by calling `to_dict()` of price
82
+ if self.price:
83
+ _dict['price'] = self.price.to_dict()
79
84
  # override the default output from pydantic by calling `to_dict()` of each item in variation_dimensions (list)
80
85
  _items = []
81
86
  if self.variation_dimensions:
@@ -96,6 +101,7 @@ class VariationSummary(BaseModel):
96
101
 
97
102
  _obj = cls.model_validate({
98
103
  "pageCount": obj.get("pageCount"),
104
+ "price": VariationSummaryPrice.from_dict(obj["price"]) if obj.get("price") is not None else None,
99
105
  "variationCount": obj.get("variationCount"),
100
106
  "variationDimensions": [VariationDimension.from_dict(_item) for _item in obj["variationDimensions"]] if obj.get("variationDimensions") is not None else None
101
107
  })
@@ -0,0 +1,101 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License").
7
+ You may not use this file except in compliance with the License.
8
+ A copy of the License is located at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ or in the "license" file accompanying this file. This file is distributed
13
+ on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14
+ express or implied. See the License for the specific language governing
15
+ permissions and limitations under the License.
16
+
17
+ """ # noqa: E501
18
+
19
+
20
+
21
+ from __future__ import annotations
22
+ import pprint
23
+ import re # noqa: F401
24
+ import json
25
+
26
+ from pydantic import BaseModel, ConfigDict, Field
27
+ from typing import Any, ClassVar, Dict, List, Optional
28
+ from creatorsapi_python_sdk.models.money import Money
29
+ from typing import Optional, Set
30
+ from typing_extensions import Self
31
+
32
+ class VariationSummaryPrice(BaseModel):
33
+ """
34
+ The container for highest and lowest price for variations.
35
+ """ # noqa: E501
36
+ highest_price: Optional[Money] = Field(default=None, alias="highestPrice")
37
+ lowest_price: Optional[Money] = Field(default=None, alias="lowestPrice")
38
+ __properties: ClassVar[List[str]] = ["highestPrice", "lowestPrice"]
39
+
40
+ model_config = ConfigDict(
41
+ populate_by_name=True,
42
+ validate_assignment=True,
43
+ protected_namespaces=(),
44
+ )
45
+
46
+
47
+ def to_str(self) -> str:
48
+ """Returns the string representation of the model using alias"""
49
+ return pprint.pformat(self.model_dump(by_alias=True))
50
+
51
+ def to_json(self) -> str:
52
+ """Returns the JSON representation of the model using alias"""
53
+ return self.model_dump_json(by_alias=True, exclude_unset=True)
54
+
55
+ @classmethod
56
+ def from_json(cls, json_str: str) -> Optional[Self]:
57
+ """Create an instance of VariationSummaryPrice from a JSON string"""
58
+ return cls.from_dict(json.loads(json_str))
59
+
60
+ def to_dict(self) -> Dict[str, Any]:
61
+ """Return the dictionary representation of the model using alias.
62
+
63
+ This has the following differences from calling pydantic's
64
+ `self.model_dump(by_alias=True)`:
65
+
66
+ * `None` is only added to the output dict for nullable fields that
67
+ were set at model initialization. Other fields with value `None`
68
+ are ignored.
69
+ """
70
+ excluded_fields: Set[str] = set([
71
+ ])
72
+
73
+ _dict = self.model_dump(
74
+ by_alias=True,
75
+ exclude=excluded_fields,
76
+ exclude_none=True,
77
+ )
78
+ # override the default output from pydantic by calling `to_dict()` of highest_price
79
+ if self.highest_price:
80
+ _dict['highestPrice'] = self.highest_price.to_dict()
81
+ # override the default output from pydantic by calling `to_dict()` of lowest_price
82
+ if self.lowest_price:
83
+ _dict['lowestPrice'] = self.lowest_price.to_dict()
84
+ return _dict
85
+
86
+ @classmethod
87
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
88
+ """Create an instance of VariationSummaryPrice from a dict"""
89
+ if obj is None:
90
+ return None
91
+
92
+ if not isinstance(obj, dict):
93
+ return cls.model_validate(obj)
94
+
95
+ _obj = cls.model_validate({
96
+ "highestPrice": Money.from_dict(obj["highestPrice"]) if obj.get("highestPrice") is not None else None,
97
+ "lowestPrice": Money.from_dict(obj["lowestPrice"]) if obj.get("lowestPrice") is not None else None
98
+ })
99
+ return _obj
100
+
101
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-amazon-paapi
3
- Version: 6.1.0
3
+ Version: 6.2.0
4
4
  Summary: Amazon Product Advertising API 5.0 wrapper for Python
5
5
  Project-URL: Homepage, https://github.com/sergioteula/python-amazon-paapi
6
6
  Project-URL: Repository, https://github.com/sergioteula/python-amazon-paapi
@@ -3,8 +3,8 @@ amazon_creatorsapi/api.py,sha256=GXjiHP3eCOdQEvpQDOP44U7crArEdr0ZqdVZK3fS7DE,140
3
3
  amazon_creatorsapi/errors.py,sha256=psL4KeXDt-NcMGr5TKmZ1E8xEp4I5qJfsrTkbDg9IiE,970
4
4
  amazon_creatorsapi/models.py,sha256=mHm8oaph1f7x2MunS6UqNS66_QbOJQfhnfatxSna3lk,5346
5
5
  amazon_creatorsapi/aio/__init__.py,sha256=Z76dMFKs0vPZakdXxoGq2dsWmkx-tUkx88NmHBq1DHU,398
6
- amazon_creatorsapi/aio/api.py,sha256=lUKnM7lAOYoKud_G5d_eDfLyU-XcrnaGqnBvlInfRPw,20924
7
- amazon_creatorsapi/aio/auth.py,sha256=PzZkTOj4ABezgp5Jlmj7tDuvmTIeetrX-j09O7bjugM,7077
6
+ amazon_creatorsapi/aio/api.py,sha256=rYppko-s--4veK0ROjXdYkwO_GW-IqceQ75BFIBn0FE,21215
7
+ amazon_creatorsapi/aio/auth.py,sha256=VcP8Pnv9nYYTRAn8jthKZmrtqM_Aes2qzG5s8Bc900U,7921
8
8
  amazon_creatorsapi/aio/client.py,sha256=33ycYZl3Tu-OlG1unCRpdF-LGHyc6KQxLxNIdm_xdJw,4281
9
9
  amazon_creatorsapi/core/__init__.py,sha256=3wb1H-IKqVShgbqfAlF8j5Nl9bIx_UMP2BDvRBvtnEk,146
10
10
  amazon_creatorsapi/core/constants.py,sha256=RfgU5r95wcRkN4hllMwBSq8trV0K1J-5Sj-z_0Z6sgQ,140
@@ -148,19 +148,19 @@ amazon_paapi/sdk/models/variations_result.py,sha256=CDQQME5_tK4VcY4S0j9s-JSvVtzd
148
148
  amazon_paapi/sdk/models/website_sales_rank.py,sha256=-JMA5_cHg9gRe3N0cyL8fbZ5mtrDhKXn9IN8ftL_22M,5774
149
149
  amazon_paapi/tools/__init__.py,sha256=AO_wDS2wEje-ZO8bUfEF_1cffMiehscSTeEsFHBD6Qw,119
150
150
  amazon_paapi/tools/asin.py,sha256=41X8waemaaEVLSq995ADWZfJKQswhE4DZHrgO-TjVHA,530
151
- creatorsapi_python_sdk/__init__.py,sha256=ZarwbxUTHSCLvwetn9nmwko14_-r_WkagJZ09i6XXMY,8508
152
- creatorsapi_python_sdk/api_client.py,sha256=_YAOZ6giuXg6td1U-qCqRGknrxG4igdZ3drx1Y5ZAzY,32054
151
+ creatorsapi_python_sdk/__init__.py,sha256=vOiRK8X8ZdZUiC8Qz53I1i16cXtMIEYW9AU0vW71knA,8596
152
+ creatorsapi_python_sdk/api_client.py,sha256=aA5LxBfbSsitncK_wvITIi0tcvhaKLkHNRccnF1MbUA,32221
153
153
  creatorsapi_python_sdk/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
154
154
  creatorsapi_python_sdk/configuration.py,sha256=0InEIsWDAF27mLSkzOUh-8GyuKCB2H2uUcFrWB3WHPw,15334
155
155
  creatorsapi_python_sdk/exceptions.py,sha256=Z_I0d93F3cZvTfDn86WYGPQLc_h7Vsa2JPNcI5wUgnE,6250
156
156
  creatorsapi_python_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  creatorsapi_python_sdk/rest.py,sha256=V5ZpRZiYosmawd3TCzAoZU2mAaOVBp63j6la6ZLETPE,9694
158
158
  creatorsapi_python_sdk/api/__init__.py,sha256=yhe-xIIJr786e9UzrgaDk6jNjUFniyR-wBIMs78di1g,110
159
- creatorsapi_python_sdk/api/default_api.py,sha256=5FPzHEu1w4f9iAJI5K9Pg9JkIiBTyS81FnlhCO4LlOg,105901
159
+ creatorsapi_python_sdk/api/default_api.py,sha256=opqPcjsA6IziNV0MwOGq6GOiZ423N46ndzUBj9tmuKE,106750
160
160
  creatorsapi_python_sdk/auth/__init__.py,sha256=YJkrayG46sTtqIFz1AhXO1-dAzGRVbQvVPZYbVGA4jY,795
161
- creatorsapi_python_sdk/auth/oauth2_config.py,sha256=zsH5BgJQYkNznQBq_saQEA-YJqU5obBVXhTqS8tFGMo,4026
162
- creatorsapi_python_sdk/auth/oauth2_token_manager.py,sha256=OxpPf-nL1cYxYf0AL_GxPrv6ejmCZlfDMEKNpKr71T4,4114
163
- creatorsapi_python_sdk/models/__init__.py,sha256=kgbZbLzJ7l2QfGilZRLTLA5VXtP-7OR24BdcBCWH4Nw,7830
161
+ creatorsapi_python_sdk/auth/oauth2_config.py,sha256=9s6Nk3pntGBG_5P2lgGUcvQwYWXf9jjA60z-mckUTR0,4637
162
+ creatorsapi_python_sdk/auth/oauth2_token_manager.py,sha256=gW02OLI1ESydkPB2hWFv3-Ulxfxcx58wm4xDpXTGZ9w,4843
163
+ creatorsapi_python_sdk/models/__init__.py,sha256=RFx8-_QZQ7EgwUthjH7kthVI-0blCIK74s868qjiibk,7918
164
164
  creatorsapi_python_sdk/models/access_denied_exception_response_content.py,sha256=km7ig3IVWT34Ia42zFmKslK9BFnWXHQ-4Y3v_yLmJCQ,3189
165
165
  creatorsapi_python_sdk/models/access_denied_reason.py,sha256=U_vt3v_-gt_Z93-l9GqSKJQBwU1wKC0T4wpwmT8EIsA,1137
166
166
  creatorsapi_python_sdk/models/availability.py,sha256=Tn3mFSadt5Py5IdftSQZ8VxR_hQVw9vfGgKIfZJxK1s,1106
@@ -247,10 +247,11 @@ creatorsapi_python_sdk/models/validation_exception_reason.py,sha256=9kBPuLB5iNo3
247
247
  creatorsapi_python_sdk/models/validation_exception_response_content.py,sha256=-LphLJA7lqjuhrVA8LeEl52zb5fAmquF6Lo5Nx48DH8,4036
248
248
  creatorsapi_python_sdk/models/variation_attribute.py,sha256=osvussgXlDT9hPwXjqblH_TDnpFiiCDQZzDwIEBDLCQ,2865
249
249
  creatorsapi_python_sdk/models/variation_dimension.py,sha256=zsN3sMBDxXQOOsXGmvorf3TYlnz2hRI1JWd2Z-qK4yo,3487
250
- creatorsapi_python_sdk/models/variation_summary.py,sha256=gc0lQvkRMaJlVqJmgaLSUebDpYPluufEcwMfy94Xq2s,4794
250
+ creatorsapi_python_sdk/models/variation_summary.py,sha256=98Zl9PmBF1lvd1xqKS3XZlBzwjxzWW6hLW9WecPRzt0,5208
251
+ creatorsapi_python_sdk/models/variation_summary_price.py,sha256=KbXfL21Smb1y9q0yu33t-5IW4FV20roFpiADzsNmx1Y,3533
251
252
  creatorsapi_python_sdk/models/variations_result.py,sha256=055KMPzIva1JX2AEV2v-i_yQ0AmkGTB3yFi3vCPqoHU,4113
252
253
  creatorsapi_python_sdk/models/website_sales_rank.py,sha256=nSkIVj6quN7ZYu1_A-kMrwmPikvWAZRr5JRmd1ysGnM,3346
253
- python_amazon_paapi-6.1.0.dist-info/METADATA,sha256=E1VuH8QKsG0nfa9v6n9IU4GCe65-ICMj-9DtzH_xYP8,8049
254
- python_amazon_paapi-6.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
255
- python_amazon_paapi-6.1.0.dist-info/licenses/LICENSE,sha256=pA7Z3pwvEEHJgQ2d9o8RTVUMxc_GMJNosLRWVwue7PQ,1068
256
- python_amazon_paapi-6.1.0.dist-info/RECORD,,
254
+ python_amazon_paapi-6.2.0.dist-info/METADATA,sha256=x0spgLF_hZAf8mmScE7bFpUZHDgBFK_wskrPHJ13aMw,8049
255
+ python_amazon_paapi-6.2.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
256
+ python_amazon_paapi-6.2.0.dist-info/licenses/LICENSE,sha256=pA7Z3pwvEEHJgQ2d9o8RTVUMxc_GMJNosLRWVwue7PQ,1068
257
+ python_amazon_paapi-6.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.28.0
2
+ Generator: hatchling 1.29.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any