From 8f902ed7ea74bb51aeaabd7800a48dcb1f5d733e Mon Sep 17 00:00:00 2001 From: Akim Juillerat Date: Thu, 12 Dec 2019 14:42:59 +0100 Subject: [PATCH] attachment_s3: Add set ACL function --- attachment_s3/models/ir_attachment.py | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/attachment_s3/models/ir_attachment.py b/attachment_s3/models/ir_attachment.py index 09c357d..c2263c5 100644 --- a/attachment_s3/models/ir_attachment.py +++ b/attachment_s3/models/ir_attachment.py @@ -106,6 +106,34 @@ class IrAttachment(models.Model): }) return bucket + @api.multi + def _store_file_set_acl(self, acl): + self.ensure_one() + fname = self.store_fname + if fname.startswith('s3://'): + s3uri = S3Uri(fname) + try: + bucket = self._get_s3_bucket(name=s3uri.bucket()) + except exceptions.UserError: + _logger.exception( + "error getting bucket from object storage" + ) + key = s3uri.item() + try: + obj = bucket.Object(key=key) + obj.Acl().put(ACL=acl) + _logger.info( + "ACL public-read successfully set on object %s" % fname + ) + return True + except ClientError: + _logger.exception( + "Cannot set ACL %s on object %s" % (acl, fname) + ) + else: + _logger.warning("Cannot set ACL on object not stored on S3") + return False + @api.model def _store_file_read(self, fname, bin_size=False): if fname.startswith('s3://'):