MCPcopy Create free account
hub / github.com/aws/aws-cli / _submit_multipart_request

Method _submit_multipart_request

awscli/s3transfer/copies.py:177–287  ·  view source on GitHub ↗
(
        self, client, config, osutil, request_executor, transfer_future
    )

Source from the content-addressed store, hash-verified

175 )
176
177 def _submit_multipart_request(
178 self, client, config, osutil, request_executor, transfer_future
179 ):
180 call_args = transfer_future.meta.call_args
181
182 # Submit the request to create a multipart upload and make sure it
183 # does not include any of the arguments used for copy part.
184 create_multipart_extra_args = {}
185 for param, val in call_args.extra_args.items():
186 if param not in self.CREATE_MULTIPART_ARGS_BLACKLIST:
187 create_multipart_extra_args[param] = val
188
189 create_multipart_future = self._transfer_coordinator.submit(
190 request_executor,
191 CreateMultipartUploadTask(
192 transfer_coordinator=self._transfer_coordinator,
193 main_kwargs={
194 'client': client,
195 'bucket': call_args.bucket,
196 'key': call_args.key,
197 'extra_args': create_multipart_extra_args,
198 },
199 ),
200 )
201
202 # Determine how many parts are needed based on filesize and
203 # desired chunksize.
204 part_size = config.multipart_chunksize
205 adjuster = ChunksizeAdjuster()
206 part_size = adjuster.adjust_chunksize(
207 part_size, transfer_future.meta.size
208 )
209 num_parts = int(
210 math.ceil(transfer_future.meta.size / float(part_size))
211 )
212
213 # Submit requests to upload the parts of the file.
214 part_futures = []
215 progress_callbacks = get_callbacks(transfer_future, 'progress')
216
217 for part_number in range(1, num_parts + 1):
218 extra_part_args = self._extra_upload_part_args(
219 call_args.extra_args
220 )
221 # The part number for upload part starts at 1 while the
222 # range parameter starts at zero, so just subtract 1 off of
223 # the part number
224 extra_part_args['CopySourceRange'] = calculate_range_parameter(
225 part_size,
226 part_number - 1,
227 num_parts,
228 transfer_future.meta.size,
229 )
230 if transfer_future.meta.etag is not None:
231 extra_part_args['CopySourceIfMatch'] = (
232 transfer_future.meta.etag
233 )
234 # Get the size of the part copy as well for the progress

Callers 1

_submitMethod · 0.95

Calls 11

adjust_chunksizeMethod · 0.95
_get_transfer_sizeMethod · 0.95
ChunksizeAdjusterClass · 0.90
get_callbacksFunction · 0.90
CopyPartTaskClass · 0.85
submitMethod · 0.45

Tested by

no test coverage detected