python-amazon-paapi 7.0.0__py3-none-any.whl → 7.1.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.
@@ -87,6 +87,7 @@ from creatorsapi_python_sdk.models.search_items_resource import SearchItemsResou
87
87
  if TYPE_CHECKING:
88
88
  from types import TracebackType
89
89
 
90
+ from amazon_creatorsapi.core.constants import TimeoutValue
90
91
  from amazon_creatorsapi.core.marketplaces import CountryCode
91
92
  from creatorsapi_python_sdk.models.availability import Availability
92
93
  from creatorsapi_python_sdk.models.condition import Condition
@@ -168,8 +169,9 @@ class AsyncAmazonCreatorsApi:
168
169
  country: Country code (e.g., "ES", "US"). Used to determine marketplace.
169
170
  marketplace: Marketplace URL (e.g., "www.amazon.es"). Overrides country.
170
171
  throttling: Wait time in seconds between API calls. Defaults to 1 second.
171
- timeout: Request timeout in seconds, or None to wait indefinitely.
172
- Defaults to 30 seconds.
172
+ timeout: Request timeout in seconds, a pair of ``(connect, read)``
173
+ seconds bounding each leg on its own, or None to wait
174
+ indefinitely. Defaults to 5 seconds to connect and 25 to read.
173
175
  retries: Extra attempts for the failures that Amazon asks to retry,
174
176
  waiting longer before every attempt. Defaults to 3.
175
177
  host: Base URL of the API. Defaults to the Amazon Creators API.
@@ -196,7 +198,7 @@ class AsyncAmazonCreatorsApi:
196
198
  country: CountryCode | None = None,
197
199
  marketplace: str | None = None,
198
200
  throttling: float = DEFAULT_THROTTLING,
199
- timeout: float | None = DEFAULT_TIMEOUT,
201
+ timeout: TimeoutValue | None = DEFAULT_TIMEOUT,
200
202
  retries: int = DEFAULT_RETRIES,
201
203
  host: str = DEFAULT_HOST,
202
204
  auth_endpoint: str | None = None,
@@ -7,8 +7,9 @@ from __future__ import annotations
7
7
 
8
8
  import asyncio
9
9
  import time
10
- from typing import Any
10
+ from typing import TYPE_CHECKING, Any
11
11
 
12
+ from amazon_creatorsapi.aio.timeouts import build_httpx_timeout
12
13
  from amazon_creatorsapi.core.constants import DEFAULT_TIMEOUT, HTTP_OK
13
14
  from amazon_creatorsapi.core.oauth import (
14
15
  COGNITO_SCOPE,
@@ -23,6 +24,9 @@ from amazon_creatorsapi.core.oauth import (
23
24
  )
24
25
  from amazon_creatorsapi.errors import AuthenticationError
25
26
 
27
+ if TYPE_CHECKING:
28
+ from amazon_creatorsapi.core.constants import TimeoutValue
29
+
26
30
  try:
27
31
  import httpx
28
32
  except ImportError as exc: # pragma: no cover
@@ -61,8 +65,10 @@ class AsyncOAuth2TokenManager:
61
65
  credential_secret: OAuth2 credential secret.
62
66
  version: API version (determines auth endpoint).
63
67
  auth_endpoint: Optional custom auth endpoint URL.
64
- timeout: Token request timeout in seconds, or None to wait
65
- indefinitely. Defaults to 30 seconds.
68
+ timeout: Token request timeout in seconds, a pair of
69
+ ``(connect, read)`` seconds bounding each leg on its own, or None
70
+ to wait indefinitely. Defaults to 5 seconds to connect and
71
+ 25 to read.
66
72
 
67
73
  """
68
74
 
@@ -72,7 +78,7 @@ class AsyncOAuth2TokenManager:
72
78
  credential_secret: str,
73
79
  version: str,
74
80
  auth_endpoint: str | None = None,
75
- timeout: float | None = DEFAULT_TIMEOUT,
81
+ timeout: TimeoutValue | None = DEFAULT_TIMEOUT,
76
82
  ) -> None:
77
83
  """Initialize the async OAuth2 token manager."""
78
84
  self._credential_id = credential_id
@@ -189,7 +195,9 @@ class AsyncOAuth2TokenManager:
189
195
  }
190
196
 
191
197
  try:
192
- async with httpx.AsyncClient(timeout=self._timeout) as client:
198
+ async with httpx.AsyncClient(
199
+ timeout=build_httpx_timeout(self._timeout),
200
+ ) as client:
193
201
  if self.is_lwa():
194
202
  response = await client.post(
195
203
  self._auth_endpoint,
@@ -12,11 +12,14 @@ from typing import TYPE_CHECKING, Any
12
12
 
13
13
  from typing_extensions import Self
14
14
 
15
+ from amazon_creatorsapi.aio.timeouts import build_httpx_timeout
15
16
  from amazon_creatorsapi.core.constants import DEFAULT_TIMEOUT
16
17
 
17
18
  if TYPE_CHECKING:
18
19
  from types import TracebackType
19
20
 
21
+ from amazon_creatorsapi.core.constants import TimeoutValue
22
+
20
23
  try:
21
24
  import httpx
22
25
  except ImportError as exc: # pragma: no cover
@@ -65,15 +68,16 @@ class AsyncHttpClient:
65
68
 
66
69
  Args:
67
70
  host: Base URL for API requests. Defaults to Amazon Creators API.
68
- timeout: Request timeout in seconds, or None to wait indefinitely.
69
- Defaults to 30.
71
+ timeout: Request timeout in seconds, a pair of ``(connect, read)``
72
+ seconds bounding each leg on its own, or None to wait
73
+ indefinitely. Defaults to 5 seconds to connect and 25 to read.
70
74
 
71
75
  """
72
76
 
73
77
  def __init__(
74
78
  self,
75
79
  host: str = DEFAULT_HOST,
76
- timeout: float | None = DEFAULT_TIMEOUT,
80
+ timeout: TimeoutValue | None = DEFAULT_TIMEOUT,
77
81
  ) -> None:
78
82
  """Initialize the async HTTP client."""
79
83
  self._host = host
@@ -85,7 +89,7 @@ class AsyncHttpClient:
85
89
  """Enter async context manager, creating a persistent client."""
86
90
  self._client = httpx.AsyncClient(
87
91
  base_url=self._host,
88
- timeout=self._timeout,
92
+ timeout=build_httpx_timeout(self._timeout),
89
93
  headers={"User-Agent": USER_AGENT},
90
94
  )
91
95
  self._owns_client = True
@@ -134,7 +138,7 @@ class AsyncHttpClient:
134
138
  # Create a new client for this request (standalone mode)
135
139
  async with httpx.AsyncClient(
136
140
  base_url=self._host,
137
- timeout=self._timeout,
141
+ timeout=build_httpx_timeout(self._timeout),
138
142
  ) as client:
139
143
  response = await client.post(
140
144
  path,
@@ -0,0 +1,49 @@
1
+ """Conversion of the timeout values into the ones httpx understands.
2
+
3
+ It lives here rather than next to the values themselves because httpx is an
4
+ optional dependency, and the synchronous client must keep importing without
5
+ it.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from amazon_creatorsapi.core.constants import TimeoutValue
14
+
15
+ try:
16
+ import httpx
17
+ except ImportError as exc: # pragma: no cover
18
+ msg = (
19
+ "httpx is required for async support. "
20
+ "Install it with: pip install python-amazon-paapi[async]"
21
+ )
22
+ raise ImportError(msg) from exc
23
+
24
+
25
+ def build_httpx_timeout(
26
+ timeout: TimeoutValue | None,
27
+ ) -> float | httpx.Timeout | None:
28
+ """Return the timeout to hand to httpx for a value the clients accept.
29
+
30
+ A pair is the only value httpx needs help with. Everything else is passed
31
+ through as it is, so httpx keeps reading it exactly as it did before pairs
32
+ were accepted.
33
+
34
+ Args:
35
+ timeout: Seconds for the whole request, ``(connect, read)`` seconds
36
+ per leg, or None to wait indefinitely.
37
+
38
+ Returns:
39
+ The seconds, the httpx timeout built from the pair, or None to wait
40
+ indefinitely.
41
+
42
+ """
43
+ if not isinstance(timeout, tuple):
44
+ return timeout
45
+ connect, read = timeout
46
+ # httpx reads a pair as (connect, read, write, pool) and leaves the two it
47
+ # does not find unbounded, which would drop a timeout that the single
48
+ # value form applies. The read value covers them instead.
49
+ return httpx.Timeout(connect=connect, read=read, write=read, pool=read)
amazon_creatorsapi/api.py CHANGED
@@ -77,6 +77,7 @@ from creatorsapi_python_sdk.models.search_items_resource import SearchItemsResou
77
77
  if TYPE_CHECKING:
78
78
  from types import TracebackType
79
79
 
80
+ from amazon_creatorsapi.core.constants import TimeoutValue
80
81
  from amazon_creatorsapi.core.marketplaces import CountryCode
81
82
  from creatorsapi_python_sdk.models.availability import Availability
82
83
  from creatorsapi_python_sdk.models.browse_node import BrowseNode
@@ -109,8 +110,9 @@ class AmazonCreatorsApi:
109
110
  country: Country code (e.g., "ES", "US"). Used to determine marketplace.
110
111
  marketplace: Marketplace URL (e.g., "www.amazon.es"). Overrides country.
111
112
  throttling: Wait time in seconds between API calls. Defaults to 1 second.
112
- timeout: Request timeout in seconds, or None to wait indefinitely.
113
- Defaults to 30 seconds.
113
+ timeout: Request timeout in seconds, a pair of ``(connect, read)``
114
+ seconds bounding each leg on its own, or None to wait
115
+ indefinitely. Defaults to 5 seconds to connect and 25 to read.
114
116
  retries: Extra attempts for the failures that Amazon asks to retry,
115
117
  waiting longer before every attempt. Defaults to 3.
116
118
  host: Base URL of the API. Defaults to the Amazon Creators API.
@@ -151,7 +153,7 @@ class AmazonCreatorsApi:
151
153
  country: CountryCode | None = None,
152
154
  marketplace: str | None = None,
153
155
  throttling: float = DEFAULT_THROTTLING,
154
- timeout: float | None = DEFAULT_TIMEOUT,
156
+ timeout: TimeoutValue | None = DEFAULT_TIMEOUT,
155
157
  retries: int = DEFAULT_RETRIES,
156
158
  host: str = DEFAULT_HOST,
157
159
  auth_endpoint: str | None = None,
@@ -14,6 +14,7 @@ from amazon_creatorsapi.errors import AuthenticationError
14
14
  from creatorsapi_python_sdk.auth.oauth2_token_manager import OAuth2TokenManager
15
15
 
16
16
  if TYPE_CHECKING:
17
+ from amazon_creatorsapi.core.constants import TimeoutValue
17
18
  from creatorsapi_python_sdk.auth.oauth2_config import OAuth2Config
18
19
 
19
20
 
@@ -28,12 +29,17 @@ class TimeoutOAuth2TokenManager(OAuth2TokenManager):
28
29
 
29
30
  Args:
30
31
  config: OAuth2 configuration with the credentials and the endpoint.
31
- timeout: Token request timeout in seconds, or None to wait
32
- indefinitely.
32
+ timeout: Token request timeout in seconds, a pair of
33
+ ``(connect, read)`` seconds bounding each leg on its own, or None
34
+ to wait indefinitely.
33
35
 
34
36
  """
35
37
 
36
- def __init__(self, config: OAuth2Config, timeout: float | None) -> None:
38
+ def __init__(
39
+ self,
40
+ config: OAuth2Config,
41
+ timeout: TimeoutValue | None,
42
+ ) -> None:
37
43
  """Initialize the token manager with its timeout."""
38
44
  super().__init__(config)
39
45
  self._timeout = timeout
@@ -1,8 +1,27 @@
1
1
  """Constants for the Amazon Creators API."""
2
2
 
3
+ from __future__ import annotations
4
+
5
+ from typing import Union
6
+
7
+ TimeoutValue = Union[float, "tuple[float, float]"]
8
+ """Seconds for the whole request, or ``(connect, read)`` seconds per leg.
9
+
10
+ The pair matters for a host that resolves to several addresses: the connect
11
+ leg is spent once per address, so a single value generous enough to read a
12
+ slow response is also spent on every address that fails to answer.
13
+ """
14
+
3
15
  DEFAULT_HOST = "https://creatorsapi.amazon"
4
16
  DEFAULT_THROTTLING = 1
5
- DEFAULT_TIMEOUT = 30.0
17
+ # Connect and read seconds, rather than one value covering both. The connect
18
+ # leg is spent once per address the host resolves to, so a single value
19
+ # generous enough to read a slow response is also spent on every address that
20
+ # fails to answer: at 30 seconds, a host resolving to four addresses takes two
21
+ # minutes to give up. The two add up to the 30 seconds this has always
22
+ # documented, and a connection that takes longer than five seconds to
23
+ # establish is not one that a longer wait rescues.
24
+ DEFAULT_TIMEOUT = (5.0, 25.0)
6
25
 
7
26
  # Maximum amount of item identifiers accepted in a single request
8
27
  MAX_ITEMS_PER_REQUEST = 10
@@ -10,6 +10,7 @@ from amazon_creatorsapi.core.marketplaces import MARKETPLACES
10
10
  from amazon_creatorsapi.errors import InvalidArgumentError
11
11
 
12
12
  if TYPE_CHECKING:
13
+ from amazon_creatorsapi.core.constants import TimeoutValue
13
14
  from amazon_creatorsapi.core.marketplaces import CountryCode
14
15
 
15
16
  RequestT = TypeVar("RequestT", bound=BaseModel)
@@ -44,21 +45,47 @@ def validate_and_get_marketplace(
44
45
  raise InvalidArgumentError(msg)
45
46
 
46
47
 
47
- def validate_timeout(timeout: float | None) -> float | None:
48
+ def validate_timeout(timeout: TimeoutValue | None) -> TimeoutValue | None:
48
49
  """Validate the request timeout value.
49
50
 
50
51
  Args:
51
- timeout: Request timeout in seconds, or None to wait indefinitely.
52
+ timeout: Request timeout in seconds, a pair of ``(connect, read)``
53
+ seconds bounding each leg on its own, or None to wait
54
+ indefinitely.
52
55
 
53
56
  Returns:
54
- The timeout as a float, or None when disabled.
57
+ The timeout as a float, as a pair of floats, or None when disabled.
55
58
 
56
59
  Raises:
57
- InvalidArgumentError: If the timeout is not greater than zero.
60
+ InvalidArgumentError: If a timeout is not greater than zero, or if a
61
+ pair does not hold exactly two of them.
58
62
 
59
63
  """
60
64
  if timeout is None:
61
65
  return None
66
+ if not isinstance(timeout, tuple):
67
+ return _validate_seconds(timeout)
68
+ try:
69
+ connect, read = timeout
70
+ except ValueError as error:
71
+ msg = f"Timeout must be a pair of (connect, read) seconds: {timeout!r}"
72
+ raise InvalidArgumentError(msg) from error
73
+ return _validate_seconds(connect), _validate_seconds(read)
74
+
75
+
76
+ def _validate_seconds(timeout: float) -> float:
77
+ """Validate a number of seconds used as a timeout.
78
+
79
+ Args:
80
+ timeout: Timeout in seconds, whether on its own or one leg of a pair.
81
+
82
+ Returns:
83
+ The timeout as a float.
84
+
85
+ Raises:
86
+ InvalidArgumentError: If it is not a number greater than zero.
87
+
88
+ """
62
89
  try:
63
90
  value = float(timeout)
64
91
  except (TypeError, ValueError) as error:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-amazon-paapi
3
- Version: 7.0.0
3
+ Version: 7.1.0
4
4
  Summary: Amazon Creators API 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
@@ -260,8 +260,11 @@ The interval is kept per client and is safe to share between threads.
260
260
 
261
261
  ### Timeout
262
262
 
263
- Timeout value represents the number of seconds to wait for a response before failing,
264
- being the default value 30 seconds. Use `None` to wait indefinitely.
263
+ Timeout value represents the number of seconds to wait for a response before failing.
264
+ Use `None` to wait indefinitely.
265
+
266
+ The default is `(5, 25)`: five seconds to establish the connection and twenty-five to
267
+ read the response, thirty in total.
265
268
 
266
269
  ```python
267
270
  api = AmazonCreatorsApi(ID, SECRET, VERSION, TAG, COUNTRY, timeout=10) # Fails after 10 seconds
@@ -270,6 +273,16 @@ api = AmazonCreatorsApi(ID, SECRET, VERSION, TAG, COUNTRY, timeout=0.5) # Fails
270
273
 
271
274
  It applies to every API request, including the OAuth2 token refresh.
272
275
 
276
+ A pair of `(connect, read)` seconds bounds each leg of the request on its own. This
277
+ matters for a host resolving to several addresses: the connect leg is spent once per
278
+ address, so a single value generous enough to read a slow response is also spent on
279
+ every address that fails to answer.
280
+
281
+ ```python
282
+ # Gives up on an unresponsive address after 1 second, and still reads for 10
283
+ api = AmazonCreatorsApi(ID, SECRET, VERSION, TAG, COUNTRY, timeout=(1, 10))
284
+ ```
285
+
273
286
  ### Retries
274
287
 
275
288
  Amazon asks clients to back off and try again when it throttles a request or fails to
@@ -1,15 +1,16 @@
1
1
  amazon_creatorsapi/__init__.py,sha256=Ioi8TxeQHQHrlNsFhYW0nRZIeodXg2N5xZXQEXKz4jc,298
2
- amazon_creatorsapi/api.py,sha256=32PYOqw5ZjET2J0c14su6WF8gHE1wLw11TnkOKSgBUo,26229
2
+ amazon_creatorsapi/api.py,sha256=ZSfDT7MNYvFpL4bg-hlNyZqEXvVdjidHKSo7zbGzhp4,26404
3
3
  amazon_creatorsapi/errors.py,sha256=C7ddKHbMGjdaXEVAg1iDjPEyolpzxGx30tafgk8OcGo,1613
4
4
  amazon_creatorsapi/models.py,sha256=u9MYkNUHyWt0J_eHb0HO4rPb8Gqbjczyqv33NXJ79_c,5975
5
5
  amazon_creatorsapi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  amazon_creatorsapi/aio/__init__.py,sha256=Z76dMFKs0vPZakdXxoGq2dsWmkx-tUkx88NmHBq1DHU,398
7
- amazon_creatorsapi/aio/api.py,sha256=8znD6MNMTdcPJRh_MMvVm4L6olhN8SntOiJ0ENDhPKA,30777
8
- amazon_creatorsapi/aio/auth.py,sha256=skYcIqKR-nSAcbZzMm80slepsxjTQepj6skt1cV7v1k,8279
9
- amazon_creatorsapi/aio/client.py,sha256=ULBQwnPKszEbj6quhbyBxlslb-FDoBKQGnreRH886gU,4490
7
+ amazon_creatorsapi/aio/api.py,sha256=1idnlUz1EiHYgfLvuwehIWgKb2CP-kOV6RiKXF5J5Hc,30952
8
+ amazon_creatorsapi/aio/auth.py,sha256=Unkr9LgaE30o9inTkl1271sI34cFVD1b6E2wG14ncSI,8616
9
+ amazon_creatorsapi/aio/client.py,sha256=ASPjzFG_e2L1La0U3RekiCdZpYgphtuFqssReTH-CFU,4780
10
+ amazon_creatorsapi/aio/timeouts.py,sha256=uHRfF7aBHNyqqGqzrEPXXG5K-VmIVbc7K6QGYFYbN8E,1608
10
11
  amazon_creatorsapi/core/__init__.py,sha256=3wb1H-IKqVShgbqfAlF8j5Nl9bIx_UMP2BDvRBvtnEk,146
11
- amazon_creatorsapi/core/auth.py,sha256=qWEowrmLScgZAq15UmUvFM09z_LMwpsWNFZju_pvVDw,4918
12
- amazon_creatorsapi/core/constants.py,sha256=N9nub-SCUZ2WxFKms5pnVEg-AIAdBjiwDhiRvYK9tYQ,383
12
+ amazon_creatorsapi/core/auth.py,sha256=kTzOmrZWhC7ugW-g3DBM_By7vi5qH4AcmgEsYRAkskA,5099
13
+ amazon_creatorsapi/core/constants.py,sha256=jRWAMxYuMbHpFGdjJAq_F6i-7GzpweUxnd88LyiyFeY,1299
13
14
  amazon_creatorsapi/core/error_handling.py,sha256=yUBN1S7OAWIO2EYeKdtCiqTpmMkMoBCQobP_T_2nH6E,5830
14
15
  amazon_creatorsapi/core/items.py,sha256=iI2wkKr0k73k1tSRz2jSK20bG1h5Or_aesP8rHd0qKY,1968
15
16
  amazon_creatorsapi/core/marketplaces.py,sha256=GpoG82iEviC3Po_Hrdywo4Tl_p5F7iktB_CXW9lMDbM,1753
@@ -19,7 +20,7 @@ amazon_creatorsapi/core/requests.py,sha256=0vBRB0Zl3PdctTqQRW2YaOHjciO9Z9Rsdkmbg
19
20
  amazon_creatorsapi/core/resources.py,sha256=JoUKfENnyhrksgRYkB-IEdDGLlBf3W_3G04eO0FULJw,558
20
21
  amazon_creatorsapi/core/results.py,sha256=HXTJOoP4S2_hzEgTewgKSGk4Hpnc7QNmj73EG37PrAE,1134
21
22
  amazon_creatorsapi/core/retry.py,sha256=LGlhd8qCl15HZMJIOnMwps3jg4lZdYtP1foNtcCffFY,2916
22
- amazon_creatorsapi/core/validation.py,sha256=KQUWolwUD70CeqxoK-b_BHZyiZt_8YrRW4yKCXNSvAE,4700
23
+ amazon_creatorsapi/core/validation.py,sha256=F4_5woqt5qXWCQIoWZFm2yDzFy4BOjI1l1xnzThkWuY,5629
23
24
  creatorsapi_python_sdk/__init__.py,sha256=TGp-BhzlfTVRrvEPUiJ7lmwNwebnRICdxeYcpIFlvSQ,8722
24
25
  creatorsapi_python_sdk/api_client.py,sha256=lSQo2r83MXFvPuTD1Zt46MfD7AeE5es5olCIxPS1tzo,32221
25
26
  creatorsapi_python_sdk/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
@@ -125,7 +126,7 @@ creatorsapi_python_sdk/models/variation_summary.py,sha256=98Zl9PmBF1lvd1xqKS3XZl
125
126
  creatorsapi_python_sdk/models/variation_summary_price.py,sha256=KbXfL21Smb1y9q0yu33t-5IW4FV20roFpiADzsNmx1Y,3533
126
127
  creatorsapi_python_sdk/models/variations_result.py,sha256=055KMPzIva1JX2AEV2v-i_yQ0AmkGTB3yFi3vCPqoHU,4113
127
128
  creatorsapi_python_sdk/models/website_sales_rank.py,sha256=nSkIVj6quN7ZYu1_A-kMrwmPikvWAZRr5JRmd1ysGnM,3346
128
- python_amazon_paapi-7.0.0.dist-info/METADATA,sha256=pLnQ_Pht_S8rVS13l-OT_tyhurVIDd79AVPWI2N7xZ0,15426
129
- python_amazon_paapi-7.0.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
130
- python_amazon_paapi-7.0.0.dist-info/licenses/LICENSE,sha256=pA7Z3pwvEEHJgQ2d9o8RTVUMxc_GMJNosLRWVwue7PQ,1068
131
- python_amazon_paapi-7.0.0.dist-info/RECORD,,
129
+ python_amazon_paapi-7.1.0.dist-info/METADATA,sha256=EacVxEthhomPBetvMmKBfae_LMTOH-yGhBGMud1BA10,15971
130
+ python_amazon_paapi-7.1.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
131
+ python_amazon_paapi-7.1.0.dist-info/licenses/LICENSE,sha256=pA7Z3pwvEEHJgQ2d9o8RTVUMxc_GMJNosLRWVwue7PQ,1068
132
+ python_amazon_paapi-7.1.0.dist-info/RECORD,,