From e1ab8233cdea255f8b0df58b7456c42f369d01ff Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Tue, 28 Sep 2021 16:56:04 +0300 Subject: [PATCH] Add S3 Bucket Registry to store clients. Each time _store_file functions are called a new S3 Bucket object was created. Instead of creating a new one, we store the client in a Bucket Registry to avoid checking if the Bucket exists every time. --- attachment_s3/models/ir_attachment.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/attachment_s3/models/ir_attachment.py b/attachment_s3/models/ir_attachment.py index 97c3763..b61966d 100644 --- a/attachment_s3/models/ir_attachment.py +++ b/attachment_s3/models/ir_attachment.py @@ -23,6 +23,18 @@ except ImportError: _logger.debug("Cannot 'import boto3'.") +class S3BucketClientRegistry(object): + bucket_dict = {} + + @classmethod + def get_bucket_client(cls, bucket_name): + return cls.bucket_dict.get(bucket_name) + + @classmethod + def set_bucket_client(cls, bucket_name, bucket_obj): + cls.bucket_dict[bucket_name] = bucket_obj + + class IrAttachment(models.Model): _inherit = "ir.attachment" @@ -81,6 +93,10 @@ class IrAttachment(models.Model): raise exceptions.UserError(msg) # try: + # get instanciated bucket from bucket_dict + bucket = S3BucketClientRegistry.get_bucket_client(bucket_name) + if bucket: + return bucket s3 = boto3.resource('s3', **params) bucket = s3.Bucket(bucket_name) exists = True @@ -106,6 +122,8 @@ class IrAttachment(models.Model): CreateBucketConfiguration={ 'LocationConstraint': region_name }) + # store instanciated bucket to bucket_dict + S3BucketClientRegistry.set_bucket_client(bucket_name, bucket) return bucket @api.model