@@ -194,6 +194,7 @@ def upload_file(
194194
195195 S3ClientWrapper ._attempt_import_boto3 ()
196196 import boto3 .s3 .transfer
197+ from boto3 .exceptions import S3UploadFailedError
197198
198199 transfer_config = boto3 .s3 .transfer .TransferConfig (
199200 ** (transfer_config_kwargs or {})
@@ -222,13 +223,27 @@ def upload_file(
222223 )
223224
224225 # automatically determines whether to perform multi-part upload
225- s3 .Bucket (bucket ).upload_file (
226- upload_file_path ,
227- remote_file_key ,
228- Callback = progress_callback ,
229- Config = transfer_config ,
230- ExtraArgs = {"ACL" : "bucket-owner-full-control" },
231- )
226+ try :
227+ s3 .Bucket (bucket ).upload_file (
228+ upload_file_path ,
229+ remote_file_key ,
230+ Callback = progress_callback ,
231+ Config = transfer_config ,
232+ ExtraArgs = {"ACL" : "bucket-owner-full-control" },
233+ )
234+ except S3UploadFailedError as upload_error :
235+ if "Invalid canned ACL" in str (upload_error ):
236+ s3 .Bucket (bucket ).upload_file (
237+ upload_file_path ,
238+ remote_file_key ,
239+ Callback = progress_callback ,
240+ Config = transfer_config ,
241+ # https://sagebionetworks.jira.com/browse/SYNPY-1198
242+ # IBM Based buckets enforce this by default, and does not support this additional setting
243+ # ExtraArgs={"ACL": "bucket-owner-full-control"},
244+ )
245+ else :
246+ raise upload_error
232247 if progress_bar is not None :
233248 progress_bar .close ()
234249 return upload_file_path
0 commit comments