boto3 1.41.4__tar.gz → 1.42.0__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.
- {boto3-1.41.4 → boto3-1.42.0}/PKG-INFO +3 -3
- {boto3-1.41.4 → boto3-1.42.0}/boto3/__init__.py +1 -1
- {boto3-1.41.4 → boto3-1.42.0}/boto3/compat.py +5 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/crt.py +53 -3
- {boto3-1.41.4 → boto3-1.42.0}/boto3/exceptions.py +4 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/s3/constants.py +1 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/s3/transfer.py +101 -28
- {boto3-1.41.4 → boto3-1.42.0}/boto3.egg-info/PKG-INFO +3 -3
- {boto3-1.41.4 → boto3-1.42.0}/boto3.egg-info/requires.txt +2 -2
- {boto3-1.41.4 → boto3-1.42.0}/setup.cfg +2 -2
- {boto3-1.41.4 → boto3-1.42.0}/setup.py +2 -2
- {boto3-1.41.4 → boto3-1.42.0}/CONTRIBUTING.rst +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/LICENSE +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/MANIFEST.in +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/NOTICE +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/README.rst +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/cloudformation/2010-05-15/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/cloudwatch/2010-08-01/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/dynamodb/2012-08-10/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/ec2/2014-10-01/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/ec2/2015-03-01/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/ec2/2015-04-15/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/ec2/2015-10-01/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/ec2/2016-04-01/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/ec2/2016-09-15/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/ec2/2016-11-15/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/glacier/2012-06-01/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/iam/2010-05-08/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/s3/2006-03-01/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/sns/2010-03-31/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/data/sqs/2012-11-05/resources-1.json +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/__init__.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/action.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/attr.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/base.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/client.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/collection.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/docstring.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/method.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/resource.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/service.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/subresource.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/utils.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/docs/waiter.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/dynamodb/__init__.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/dynamodb/conditions.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/dynamodb/table.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/dynamodb/transform.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/dynamodb/types.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/ec2/__init__.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/ec2/createtags.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/ec2/deletetags.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/examples/cloudfront.rst +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/examples/s3.rst +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/__init__.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/action.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/base.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/collection.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/factory.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/model.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/params.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/resources/response.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/s3/__init__.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/s3/inject.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/session.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3/utils.py +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3.egg-info/SOURCES.txt +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3.egg-info/dependency_links.txt +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/boto3.egg-info/top_level.txt +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/pyproject.toml +0 -0
- {boto3-1.41.4 → boto3-1.42.0}/requirements.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: boto3
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.42.0
|
|
4
4
|
Summary: The AWS SDK for Python
|
|
5
5
|
Home-page: https://github.com/boto/boto3
|
|
6
6
|
Author: Amazon Web Services
|
|
@@ -22,9 +22,9 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
22
22
|
Requires-Python: >= 3.9
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
License-File: NOTICE
|
|
25
|
-
Requires-Dist: botocore<1.42.0,>=1.41.
|
|
25
|
+
Requires-Dist: botocore<1.42.0,>=1.41.6
|
|
26
26
|
Requires-Dist: jmespath<2.0.0,>=0.7.1
|
|
27
|
-
Requires-Dist: s3transfer<0.
|
|
27
|
+
Requires-Dist: s3transfer<0.17.0,>=0.16.0
|
|
28
28
|
Provides-Extra: crt
|
|
29
29
|
Requires-Dist: botocore[crt]<2.0a0,>=1.21.0; extra == "crt"
|
|
30
30
|
|
|
@@ -18,6 +18,8 @@ import warnings
|
|
|
18
18
|
|
|
19
19
|
from boto3.exceptions import PythonDeprecationWarning
|
|
20
20
|
|
|
21
|
+
from s3transfer.manager import TransferConfig
|
|
22
|
+
|
|
21
23
|
# In python3, socket.error is OSError, which is too general
|
|
22
24
|
# for what we want (i.e FileNotFoundError is a subclass of OSError).
|
|
23
25
|
# In py3 all the socket related errors are in a newly created
|
|
@@ -29,6 +31,9 @@ _APPEND_MODE_CHAR = 'a'
|
|
|
29
31
|
import collections.abc as collections_abc
|
|
30
32
|
|
|
31
33
|
|
|
34
|
+
TRANSFER_CONFIG_SUPPORTS_CRT = hasattr(TransferConfig, 'UNSET_DEFAULT')
|
|
35
|
+
|
|
36
|
+
|
|
32
37
|
if sys.platform.startswith('win'):
|
|
33
38
|
def rename_file(current_filename, new_filename):
|
|
34
39
|
try:
|
|
@@ -19,6 +19,7 @@ project and is not intended for external consumption. All interfaces
|
|
|
19
19
|
contained within are subject to abrupt breaking changes.
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
+
import logging
|
|
22
23
|
import threading
|
|
23
24
|
|
|
24
25
|
import botocore.exceptions
|
|
@@ -31,6 +32,12 @@ from s3transfer.crt import (
|
|
|
31
32
|
create_s3_crt_client,
|
|
32
33
|
)
|
|
33
34
|
|
|
35
|
+
from boto3.compat import TRANSFER_CONFIG_SUPPORTS_CRT
|
|
36
|
+
from boto3.exceptions import InvalidCrtTransferConfigError
|
|
37
|
+
from boto3.s3.constants import CRT_TRANSFER_CLIENT
|
|
38
|
+
|
|
39
|
+
logger = logging.getLogger(__name__)
|
|
40
|
+
|
|
34
41
|
# Singletons for CRT-backed transfers
|
|
35
42
|
CRT_S3_CLIENT = None
|
|
36
43
|
BOTOCORE_CRT_SERIALIZER = None
|
|
@@ -39,6 +46,15 @@ CLIENT_CREATION_LOCK = threading.Lock()
|
|
|
39
46
|
PROCESS_LOCK_NAME = 'boto3'
|
|
40
47
|
|
|
41
48
|
|
|
49
|
+
_ALLOWED_CRT_TRANSFER_CONFIG_OPTIONS = {
|
|
50
|
+
'multipart_threshold',
|
|
51
|
+
'max_concurrency',
|
|
52
|
+
'max_request_concurrency',
|
|
53
|
+
'multipart_chunksize',
|
|
54
|
+
'preferred_transfer_client',
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
42
58
|
def _create_crt_client(session, config, region_name, cred_provider):
|
|
43
59
|
"""Create a CRT S3 Client for file transfer.
|
|
44
60
|
|
|
@@ -157,11 +173,45 @@ def compare_identity(boto3_creds, crt_s3_creds):
|
|
|
157
173
|
return is_matching_identity
|
|
158
174
|
|
|
159
175
|
|
|
176
|
+
def _validate_crt_transfer_config(config):
|
|
177
|
+
if config is None:
|
|
178
|
+
return
|
|
179
|
+
# CRT client can also be configured via `AUTO_RESOLVE_TRANSFER_CLIENT`
|
|
180
|
+
# but it predates this validation. We only validate against CRT client
|
|
181
|
+
# configured via `CRT_TRANSFER_CLIENT` to preserve compatibility.
|
|
182
|
+
if config.preferred_transfer_client != CRT_TRANSFER_CLIENT:
|
|
183
|
+
return
|
|
184
|
+
invalid_crt_args = []
|
|
185
|
+
for param in config.DEFAULTS.keys():
|
|
186
|
+
val = config.get_deep_attr(param)
|
|
187
|
+
if (
|
|
188
|
+
param not in _ALLOWED_CRT_TRANSFER_CONFIG_OPTIONS
|
|
189
|
+
and val is not config.UNSET_DEFAULT
|
|
190
|
+
):
|
|
191
|
+
invalid_crt_args.append(param)
|
|
192
|
+
if len(invalid_crt_args) > 0:
|
|
193
|
+
raise InvalidCrtTransferConfigError(
|
|
194
|
+
"The following transfer config options are invalid "
|
|
195
|
+
"when preferred_transfer_client is set to crt: "
|
|
196
|
+
f"{', '.join(invalid_crt_args)}`"
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
|
|
160
200
|
def create_crt_transfer_manager(client, config):
|
|
161
201
|
"""Create a CRTTransferManager for optimized data transfer."""
|
|
162
202
|
crt_s3_client = get_crt_s3_client(client, config)
|
|
163
203
|
if is_crt_compatible_request(client, crt_s3_client):
|
|
164
|
-
|
|
165
|
-
crt_s3_client.crt_client,
|
|
166
|
-
|
|
204
|
+
crt_transfer_manager_kwargs = {
|
|
205
|
+
'crt_s3_client': crt_s3_client.crt_client,
|
|
206
|
+
'crt_request_serializer': BOTOCORE_CRT_SERIALIZER,
|
|
207
|
+
}
|
|
208
|
+
if TRANSFER_CONFIG_SUPPORTS_CRT:
|
|
209
|
+
_validate_crt_transfer_config(config)
|
|
210
|
+
crt_transfer_manager_kwargs['config'] = config
|
|
211
|
+
if not TRANSFER_CONFIG_SUPPORTS_CRT and config:
|
|
212
|
+
logger.warning(
|
|
213
|
+
'Using TransferConfig with CRT client requires '
|
|
214
|
+
's3transfer >= 0.16.0, configured values will be ignored.'
|
|
215
|
+
)
|
|
216
|
+
return CRTTransferManager(**crt_transfer_manager_kwargs)
|
|
167
217
|
return None
|
|
@@ -128,7 +128,7 @@ import threading
|
|
|
128
128
|
from os import PathLike, fspath, getpid
|
|
129
129
|
|
|
130
130
|
from botocore.compat import HAS_CRT
|
|
131
|
-
from botocore.exceptions import ClientError
|
|
131
|
+
from botocore.exceptions import ClientError, MissingDependencyException
|
|
132
132
|
from s3transfer.exceptions import (
|
|
133
133
|
RetriesExceededError as S3TransferRetriesExceededError,
|
|
134
134
|
)
|
|
@@ -139,7 +139,11 @@ from s3transfer.subscribers import BaseSubscriber
|
|
|
139
139
|
from s3transfer.utils import OSUtils
|
|
140
140
|
|
|
141
141
|
import boto3.s3.constants as constants
|
|
142
|
-
from boto3.
|
|
142
|
+
from boto3.compat import TRANSFER_CONFIG_SUPPORTS_CRT
|
|
143
|
+
from boto3.exceptions import (
|
|
144
|
+
RetriesExceededError,
|
|
145
|
+
S3UploadFailedError,
|
|
146
|
+
)
|
|
143
147
|
|
|
144
148
|
if HAS_CRT:
|
|
145
149
|
import awscrt.s3
|
|
@@ -184,16 +188,26 @@ def create_transfer_manager(client, config, osutil=None):
|
|
|
184
188
|
|
|
185
189
|
def _should_use_crt(config):
|
|
186
190
|
# This feature requires awscrt>=0.19.18
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
else:
|
|
190
|
-
is_optimized_instance = False
|
|
191
|
+
has_min_crt = HAS_CRT and has_minimum_crt_version((0, 19, 18))
|
|
192
|
+
is_optimized_instance = has_min_crt and awscrt.s3.is_optimized_for_system()
|
|
191
193
|
pref_transfer_client = config.preferred_transfer_client.lower()
|
|
192
194
|
|
|
195
|
+
if (
|
|
196
|
+
pref_transfer_client == constants.CRT_TRANSFER_CLIENT
|
|
197
|
+
and not has_min_crt
|
|
198
|
+
):
|
|
199
|
+
msg = (
|
|
200
|
+
"CRT transfer client is configured but is missing minimum CRT "
|
|
201
|
+
f"version. CRT installed: {HAS_CRT}"
|
|
202
|
+
)
|
|
203
|
+
if HAS_CRT:
|
|
204
|
+
msg += f", with version: {awscrt.__version__}"
|
|
205
|
+
raise MissingDependencyException(msg=msg)
|
|
206
|
+
|
|
193
207
|
if (
|
|
194
208
|
is_optimized_instance
|
|
195
209
|
and pref_transfer_client == constants.AUTO_RESOLVE_TRANSFER_CLIENT
|
|
196
|
-
):
|
|
210
|
+
) or pref_transfer_client == constants.CRT_TRANSFER_CLIENT:
|
|
197
211
|
logger.debug(
|
|
198
212
|
"Attempting to use CRTTransferManager. Config settings may be ignored."
|
|
199
213
|
)
|
|
@@ -235,18 +249,31 @@ class TransferConfig(S3TransferConfig):
|
|
|
235
249
|
'max_concurrency': 'max_request_concurrency',
|
|
236
250
|
'max_io_queue': 'max_io_queue_size',
|
|
237
251
|
}
|
|
252
|
+
DEFAULTS = {
|
|
253
|
+
'multipart_threshold': 8 * MB,
|
|
254
|
+
'max_concurrency': 10,
|
|
255
|
+
'max_request_concurrency': 10,
|
|
256
|
+
'multipart_chunksize': 8 * MB,
|
|
257
|
+
'num_download_attempts': 5,
|
|
258
|
+
'max_io_queue': 100,
|
|
259
|
+
'max_io_queue_size': 100,
|
|
260
|
+
'io_chunksize': 256 * KB,
|
|
261
|
+
'use_threads': True,
|
|
262
|
+
'max_bandwidth': None,
|
|
263
|
+
'preferred_transfer_client': constants.AUTO_RESOLVE_TRANSFER_CLIENT,
|
|
264
|
+
}
|
|
238
265
|
|
|
239
266
|
def __init__(
|
|
240
267
|
self,
|
|
241
|
-
multipart_threshold=
|
|
242
|
-
max_concurrency=
|
|
243
|
-
multipart_chunksize=
|
|
244
|
-
num_download_attempts=
|
|
245
|
-
max_io_queue=
|
|
246
|
-
io_chunksize=
|
|
247
|
-
use_threads=
|
|
268
|
+
multipart_threshold=None,
|
|
269
|
+
max_concurrency=None,
|
|
270
|
+
multipart_chunksize=None,
|
|
271
|
+
num_download_attempts=None,
|
|
272
|
+
max_io_queue=None,
|
|
273
|
+
io_chunksize=None,
|
|
274
|
+
use_threads=None,
|
|
248
275
|
max_bandwidth=None,
|
|
249
|
-
preferred_transfer_client=
|
|
276
|
+
preferred_transfer_client=None,
|
|
250
277
|
):
|
|
251
278
|
"""Configuration object for managed S3 transfers
|
|
252
279
|
|
|
@@ -270,23 +297,30 @@ class TransferConfig(S3TransferConfig):
|
|
|
270
297
|
Other retryable exceptions such as throttling errors and 5xx
|
|
271
298
|
errors are already retried by botocore (this default is 5). This
|
|
272
299
|
does not take into account the number of exceptions retried by
|
|
273
|
-
botocore.
|
|
300
|
+
botocore. Note: This value is ignored when resolved transfer
|
|
301
|
+
manager type is CRTTransferManager.
|
|
274
302
|
|
|
275
303
|
:param max_io_queue: The maximum amount of read parts that can be
|
|
276
304
|
queued in memory to be written for a download. The size of each
|
|
277
305
|
of these read parts is at most the size of ``io_chunksize``.
|
|
306
|
+
Note: This value is ignored when resolved transfer manager type
|
|
307
|
+
is CRTTransferManager.
|
|
278
308
|
|
|
279
309
|
:param io_chunksize: The max size of each chunk in the io queue.
|
|
280
310
|
Currently, this is size used when ``read`` is called on the
|
|
281
|
-
downloaded stream as well.
|
|
311
|
+
downloaded stream as well. Note: This value is ignored when
|
|
312
|
+
resolved transfer manager type is CRTTransferManager.
|
|
282
313
|
|
|
283
314
|
:param use_threads: If True, threads will be used when performing
|
|
284
315
|
S3 transfers. If False, no threads will be used in
|
|
285
316
|
performing transfers; all logic will be run in the current thread.
|
|
317
|
+
Note: This value is ignored when resolved transfer manager type is
|
|
318
|
+
CRTTransferManager.
|
|
286
319
|
|
|
287
320
|
:param max_bandwidth: The maximum bandwidth that will be consumed
|
|
288
321
|
in uploading and downloading file content. The value is an integer
|
|
289
|
-
in terms of bytes per second.
|
|
322
|
+
in terms of bytes per second. Note: This value is ignored when
|
|
323
|
+
resolved transfer manager type is CRTTransferManager.
|
|
290
324
|
|
|
291
325
|
:param preferred_transfer_client: String specifying preferred transfer
|
|
292
326
|
client for transfer operations.
|
|
@@ -296,23 +330,40 @@ class TransferConfig(S3TransferConfig):
|
|
|
296
330
|
are made with supported environment and settings.
|
|
297
331
|
* classic - Only use the origin S3TransferManager with
|
|
298
332
|
requests. Disables possible CRT upgrade on requests.
|
|
333
|
+
* crt - Only use the CRTTransferManager with requests.
|
|
299
334
|
"""
|
|
335
|
+
init_args = {
|
|
336
|
+
'multipart_threshold': multipart_threshold,
|
|
337
|
+
'max_concurrency': max_concurrency,
|
|
338
|
+
'multipart_chunksize': multipart_chunksize,
|
|
339
|
+
'num_download_attempts': num_download_attempts,
|
|
340
|
+
'max_io_queue': max_io_queue,
|
|
341
|
+
'io_chunksize': io_chunksize,
|
|
342
|
+
'use_threads': use_threads,
|
|
343
|
+
'max_bandwidth': max_bandwidth,
|
|
344
|
+
'preferred_transfer_client': preferred_transfer_client,
|
|
345
|
+
}
|
|
346
|
+
resolved = self._resolve_init_args(init_args)
|
|
300
347
|
super().__init__(
|
|
301
|
-
multipart_threshold=multipart_threshold,
|
|
302
|
-
max_request_concurrency=max_concurrency,
|
|
303
|
-
multipart_chunksize=multipart_chunksize,
|
|
304
|
-
num_download_attempts=num_download_attempts,
|
|
305
|
-
max_io_queue_size=max_io_queue,
|
|
306
|
-
io_chunksize=io_chunksize,
|
|
307
|
-
max_bandwidth=max_bandwidth,
|
|
348
|
+
multipart_threshold=resolved['multipart_threshold'],
|
|
349
|
+
max_request_concurrency=resolved['max_concurrency'],
|
|
350
|
+
multipart_chunksize=resolved['multipart_chunksize'],
|
|
351
|
+
num_download_attempts=resolved['num_download_attempts'],
|
|
352
|
+
max_io_queue_size=resolved['max_io_queue'],
|
|
353
|
+
io_chunksize=resolved['io_chunksize'],
|
|
354
|
+
max_bandwidth=resolved['max_bandwidth'],
|
|
308
355
|
)
|
|
309
356
|
# Some of the argument names are not the same as the inherited
|
|
310
357
|
# S3TransferConfig so we add aliases so you can still access the
|
|
311
358
|
# old version of the names.
|
|
312
359
|
for alias in self.ALIAS:
|
|
313
|
-
setattr(
|
|
314
|
-
|
|
315
|
-
|
|
360
|
+
setattr(
|
|
361
|
+
self,
|
|
362
|
+
alias,
|
|
363
|
+
object.__getattribute__(self, self.ALIAS[alias]),
|
|
364
|
+
)
|
|
365
|
+
self.use_threads = resolved['use_threads']
|
|
366
|
+
self.preferred_transfer_client = resolved['preferred_transfer_client']
|
|
316
367
|
|
|
317
368
|
def __setattr__(self, name, value):
|
|
318
369
|
# If the alias name is used, make sure we set the name that it points
|
|
@@ -322,6 +373,28 @@ class TransferConfig(S3TransferConfig):
|
|
|
322
373
|
# Always set the value of the actual name provided.
|
|
323
374
|
super().__setattr__(name, value)
|
|
324
375
|
|
|
376
|
+
def __getattribute__(self, item):
|
|
377
|
+
value = object.__getattribute__(self, item)
|
|
378
|
+
if not TRANSFER_CONFIG_SUPPORTS_CRT:
|
|
379
|
+
return value
|
|
380
|
+
defaults = object.__getattribute__(self, 'DEFAULTS')
|
|
381
|
+
if item not in defaults:
|
|
382
|
+
return value
|
|
383
|
+
if value is self.UNSET_DEFAULT:
|
|
384
|
+
return defaults[item]
|
|
385
|
+
return value
|
|
386
|
+
|
|
387
|
+
def _resolve_init_args(self, init_args):
|
|
388
|
+
resolved = {}
|
|
389
|
+
for init_arg, val in init_args.items():
|
|
390
|
+
if val is not None:
|
|
391
|
+
resolved[init_arg] = val
|
|
392
|
+
elif TRANSFER_CONFIG_SUPPORTS_CRT:
|
|
393
|
+
resolved[init_arg] = self.UNSET_DEFAULT
|
|
394
|
+
else:
|
|
395
|
+
resolved[init_arg] = self.DEFAULTS[init_arg]
|
|
396
|
+
return resolved
|
|
397
|
+
|
|
325
398
|
|
|
326
399
|
class S3Transfer:
|
|
327
400
|
ALLOWED_DOWNLOAD_ARGS = TransferManager.ALLOWED_DOWNLOAD_ARGS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: boto3
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.42.0
|
|
4
4
|
Summary: The AWS SDK for Python
|
|
5
5
|
Home-page: https://github.com/boto/boto3
|
|
6
6
|
Author: Amazon Web Services
|
|
@@ -22,9 +22,9 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
22
22
|
Requires-Python: >= 3.9
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
License-File: NOTICE
|
|
25
|
-
Requires-Dist: botocore<1.42.0,>=1.41.
|
|
25
|
+
Requires-Dist: botocore<1.42.0,>=1.41.6
|
|
26
26
|
Requires-Dist: jmespath<2.0.0,>=0.7.1
|
|
27
|
-
Requires-Dist: s3transfer<0.
|
|
27
|
+
Requires-Dist: s3transfer<0.17.0,>=0.16.0
|
|
28
28
|
Provides-Extra: crt
|
|
29
29
|
Requires-Dist: botocore[crt]<2.0a0,>=1.21.0; extra == "crt"
|
|
30
30
|
|
|
@@ -14,9 +14,9 @@ VERSION_RE = re.compile(r'''__version__ = ['"]([0-9.]+)['"]''')
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
requires = [
|
|
17
|
-
'botocore>=1.41.
|
|
17
|
+
'botocore>=1.41.6,<1.42.0',
|
|
18
18
|
'jmespath>=0.7.1,<2.0.0',
|
|
19
|
-
's3transfer>=0.
|
|
19
|
+
's3transfer>=0.16.0,<0.17.0',
|
|
20
20
|
]
|
|
21
21
|
|
|
22
22
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|