mirror of
https://github.com/camptocamp/odoo-cloud-platform.git
synced 2026-06-23 18:04:34 +00:00
[IMP]: Allow to pass storage as a context key
This commit is contained in:
@@ -131,7 +131,8 @@ class IrAttachment(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _store_file_write(self, key, bin_data):
|
def _store_file_write(self, key, bin_data):
|
||||||
if self._storage() == 's3':
|
location = self.env.context.get('storage_location') or self._storage()
|
||||||
|
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()
|
file = io.BytesIO()
|
||||||
|
|||||||
@@ -42,8 +42,9 @@ class IrAttachment(models.Model):
|
|||||||
@api.cr
|
@api.cr
|
||||||
def _register_hook(self):
|
def _register_hook(self):
|
||||||
super(IrAttachment, self)._register_hook()
|
super(IrAttachment, self)._register_hook()
|
||||||
|
location = self.env.context.get('storage_location') or self._storage()
|
||||||
# ignore if we are not using an object storage
|
# ignore if we are not using an object storage
|
||||||
if self._storage() not in self._get_stores():
|
if location not in self._get_stores():
|
||||||
return
|
return
|
||||||
curframe = inspect.currentframe()
|
curframe = inspect.currentframe()
|
||||||
calframe = inspect.getouterframes(curframe, 2)
|
calframe = inspect.getouterframes(curframe, 2)
|
||||||
@@ -102,7 +103,7 @@ class IrAttachment(models.Model):
|
|||||||
def _inverse_datas(self):
|
def _inverse_datas(self):
|
||||||
# override in order to store files that need fast access,
|
# override in order to store files that need fast access,
|
||||||
# we keep them in the database instead of the object storage
|
# we keep them in the database instead of the object storage
|
||||||
location = self._storage()
|
location = self.env.context.get('storage_location') or self._storage()
|
||||||
for attach in self:
|
for attach in self:
|
||||||
if location in self._get_stores() and attach._save_in_db_anyway():
|
if location in self._get_stores() and attach._save_in_db_anyway():
|
||||||
# compute the fields that depend on datas
|
# compute the fields that depend on datas
|
||||||
@@ -152,7 +153,8 @@ class IrAttachment(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _file_write(self, value, checksum):
|
def _file_write(self, value, checksum):
|
||||||
if self._storage() in self._get_stores():
|
location = self.env.context.get('storage_location') or self._storage()
|
||||||
|
if location in self._get_stores():
|
||||||
bin_data = base64.b64decode(value)
|
bin_data = base64.b64decode(value)
|
||||||
key = self._compute_checksum(bin_data)
|
key = self._compute_checksum(bin_data)
|
||||||
filename = self._store_file_write(key, bin_data)
|
filename = self._store_file_write(key, bin_data)
|
||||||
@@ -233,15 +235,15 @@ class IrAttachment(models.Model):
|
|||||||
if not self.env['res.users'].browse(self.env.uid)._is_admin():
|
if not self.env['res.users'].browse(self.env.uid)._is_admin():
|
||||||
raise exceptions.AccessError(
|
raise exceptions.AccessError(
|
||||||
_('Only administrators can execute this action.'))
|
_('Only administrators can execute this action.'))
|
||||||
storage = self._storage()
|
location = self.env.context.get('storage_location') or self._storage()
|
||||||
if storage not in self._get_stores():
|
if location not in self._get_stores():
|
||||||
return super(IrAttachment, self).force_storage()
|
return super(IrAttachment, self).force_storage()
|
||||||
self._force_storage_to_object_storage()
|
self._force_storage_to_object_storage()
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _force_storage_to_object_storage(self, new_cr=False):
|
def _force_storage_to_object_storage(self, new_cr=False):
|
||||||
_logger.info('migrating files to the object storage')
|
_logger.info('migrating files to the object storage')
|
||||||
storage = self._storage()
|
storage = self.env.context.get('storage_location') or self._storage()
|
||||||
# The weird "res_field = False OR res_field != False" domain
|
# The weird "res_field = False OR res_field != False" domain
|
||||||
# is required! It's because of an override of _search in ir.attachment
|
# is required! It's because of an override of _search in ir.attachment
|
||||||
# which adds ('res_field', '=', False) when the domain does not
|
# which adds ('res_field', '=', False) when the domain does not
|
||||||
|
|||||||
Reference in New Issue
Block a user