|
20 | 20 | from servicelib.progress_bar import ProgressBarData |
21 | 21 | from servicelib.utils import limited_gather |
22 | 22 | from servicelib.zip_stream import DEFAULT_READ_CHUNK_SIZE, FileSize, FileStream |
| 23 | +from servicelib.zip_stream._file_like import FileLikeFileStreamReader |
23 | 24 | from servicelib.zip_stream._types import StreamData |
24 | 25 | from settings_library.s3 import S3Settings |
25 | 26 | from types_aiobotocore_s3 import S3Client |
@@ -516,42 +517,9 @@ async def upload_object_from_file_stream( |
516 | 517 | self, |
517 | 518 | bucket_name: S3BucketName, |
518 | 519 | object_key: S3ObjectKey, |
519 | | - file_stream: FileStream, |
| 520 | + file_like_reader: FileLikeFileStreamReader, |
520 | 521 | ) -> None: |
521 | | - # Create a multipart upload |
522 | | - multipart_response = await self._client.create_multipart_upload( |
523 | | - Bucket=bucket_name, Key=object_key |
524 | | - ) |
525 | | - upload_id = multipart_response["UploadId"] |
526 | | - |
527 | | - try: |
528 | | - parts = [] |
529 | | - part_number = 1 |
530 | | - |
531 | | - async for chunk in file_stream: |
532 | | - part_response = await self._client.upload_part( |
533 | | - Bucket=bucket_name, |
534 | | - Key=object_key, |
535 | | - PartNumber=part_number, |
536 | | - UploadId=upload_id, |
537 | | - Body=chunk, |
538 | | - ) |
539 | | - parts.append({"ETag": part_response["ETag"], "PartNumber": part_number}) |
540 | | - part_number += 1 |
541 | | - |
542 | | - # Complete the multipart upload |
543 | | - await self._client.complete_multipart_upload( |
544 | | - Bucket=bucket_name, |
545 | | - Key=object_key, |
546 | | - UploadId=upload_id, |
547 | | - MultipartUpload={"Parts": parts}, # type: ignore[typeddict-item] |
548 | | - ) |
549 | | - except Exception: |
550 | | - # Abort the multipart upload if something goes wrong |
551 | | - await self._client.abort_multipart_upload( |
552 | | - Bucket=bucket_name, Key=object_key, UploadId=upload_id |
553 | | - ) |
554 | | - raise |
| 522 | + await self._client.upload_fileobj(file_like_reader, bucket_name, object_key) # type: ignore[arg-type] |
555 | 523 |
|
556 | 524 | @staticmethod |
557 | 525 | def is_multipart(file_size: ByteSize) -> bool: |
|
0 commit comments