Merge pull request #174 from grindtildeath/12.0_attachment_s3_bin_size_close

[12.0] attachment_s3: Improvements
This commit is contained in:
Guewen Baconnier
2020-06-22 07:45:26 +02:00
committed by GitHub
co-authored by GitHub
+20 -18
View File
@@ -122,10 +122,12 @@ class IrAttachment(models.Model):
bucket.meta.client.head_object( bucket.meta.client.head_object(
Bucket=bucket.name, Key=key Bucket=bucket.name, Key=key
) )
res = io.BytesIO() if bin_size:
bucket.download_fileobj(key, res) return bucket.Object(key).content_length
res.seek(0) with io.BytesIO() as res:
read = base64.b64encode(res.read()) bucket.download_fileobj(key, res)
res.seek(0)
read = base64.b64encode(res.read())
except ClientError: except ClientError:
read = '' read = ''
_logger.info( _logger.info(
@@ -141,20 +143,20 @@ class IrAttachment(models.Model):
if location == 's3': if location == 's3':
bucket = self._get_s3_bucket() bucket = self._get_s3_bucket()
obj = bucket.Object(key=key) obj = bucket.Object(key=key)
file = io.BytesIO() with io.BytesIO() as file:
file.write(bin_data) file.write(bin_data)
file.seek(0) file.seek(0)
filename = 's3://%s/%s' % (bucket.name, key) filename = 's3://%s/%s' % (bucket.name, key)
try: try:
obj.upload_fileobj(file) obj.upload_fileobj(file)
except ClientError as error: except ClientError as error:
# log verbose error from s3, return short message for user # log verbose error from s3, return short message for user
_logger.exception( _logger.exception(
'Error during storage of the file %s' % filename 'Error during storage of the file %s' % filename
) )
raise exceptions.UserError( raise exceptions.UserError(
_('The file could not be stored: %s') % str(error) _('The file could not be stored: %s') % str(error)
) )
else: else:
_super = super(IrAttachment, self) _super = super(IrAttachment, self)
filename = _super._store_file_write(key, bin_data) filename = _super._store_file_write(key, bin_data)