02-arcadia.patch 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. --- contrib/python/moto/py3/moto/s3/models.py (index)
  2. +++ contrib/python/moto/py3/moto/s3/models.py (working tree)
  3. @@ -339,11 +339,12 @@ class FakeKey(BaseModel):
  4. class FakeMultipart(BaseModel):
  5. - def __init__(self, key_name, metadata, storage=None, tags=None):
  6. + def __init__(self, key_name, metadata, storage=None, tags=None, acl=None):
  7. self.key_name = key_name
  8. self.metadata = metadata
  9. self.storage = storage
  10. self.tags = tags
  11. + self.acl = acl
  12. self.parts = {}
  13. self.partlist = [] # ordered list of part ID's
  14. rand_b64 = base64.b64encode(os.urandom(UPLOAD_ID_BYTES))
  15. @@ -1865,13 +1866,6 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
  16. pub_block_config.get("RestrictPublicBuckets"),
  17. )
  18. - def initiate_multipart(self, bucket_name, key_name, metadata):
  19. - bucket = self.get_bucket(bucket_name)
  20. - new_multipart = FakeMultipart(key_name, metadata)
  21. - bucket.multiparts[new_multipart.id] = new_multipart
  22. -
  23. - return new_multipart
  24. -
  25. def complete_multipart(self, bucket_name, multipart_id, body):
  26. bucket = self.get_bucket(bucket_name)
  27. multipart = bucket.multiparts[multipart_id]
  28. @@ -1908,9 +1902,11 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
  29. return len(bucket.multiparts[multipart_id].parts) > next_part_number_marker
  30. def create_multipart_upload(
  31. - self, bucket_name, key_name, metadata, storage_type, tags
  32. + self, bucket_name, key_name, metadata, storage_type, tags, acl
  33. ):
  34. - multipart = FakeMultipart(key_name, metadata, storage=storage_type, tags=tags)
  35. + multipart = FakeMultipart(
  36. + key_name, metadata, storage=storage_type, tags=tags, acl=acl
  37. + )
  38. bucket = self.get_bucket(bucket_name)
  39. bucket.multiparts[multipart.id] = multipart
  40. --- contrib/python/moto/py3/moto/s3/responses.py (index)
  41. +++ contrib/python/moto/py3/moto/s3/responses.py (working tree)
  42. @@ -1946,8 +1946,11 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
  43. metadata = metadata_from_headers(request.headers)
  44. tagging = self._tagging_from_headers(request.headers)
  45. storage_type = request.headers.get("x-amz-storage-class", "STANDARD")
  46. + acl = self._acl_from_headers(request.headers)
  47. + if acl is None:
  48. + acl = self.backend.get_bucket(bucket_name).acl
  49. multipart_id = self.backend.create_multipart_upload(
  50. - bucket_name, key_name, metadata, storage_type, tagging
  51. + bucket_name, key_name, metadata, storage_type, tagging, acl
  52. )
  53. template = self.response_template(S3_MULTIPART_INITIATE_RESPONSE)
  54. @@ -1976,6 +1979,7 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
  55. )
  56. key.set_metadata(multipart.metadata)
  57. self.backend.set_key_tags(key, multipart.tags)
  58. + self.backend.put_object_acl(bucket_name, key.name, multipart.acl)
  59. template = self.response_template(S3_MULTIPART_COMPLETE_RESPONSE)
  60. headers = {}