Merge pull request #246 from grindtildeath/12.0-fix-base_fileurl_field_demo_test

[12.0] base_fileurl_field: Consider test mode and installation of demo data
This commit is contained in:
Yannick Vaucher
2021-08-10 11:06:56 +02:00
committed by GitHub
co-authored by GitHub
+19 -7
View File
@@ -3,6 +3,7 @@
import unicodedata import unicodedata
from odoo import fields from odoo import fields
from odoo.tools import config
fields.Field.__doc__ += """ fields.Field.__doc__ += """
@@ -35,6 +36,7 @@ class FileURL(fields.Binary):
'filename': '', # Field to use to store the filename on ir.attachment 'filename': '', # Field to use to store the filename on ir.attachment
} }
# pylint: disable=method-required-super
def create(self, record_values): def create(self, record_values):
assert self.attachment assert self.attachment
if not record_values: if not record_values:
@@ -63,7 +65,7 @@ class FileURL(fields.Binary):
storage_key = False storage_key = False
env['ir.attachment'].sudo().with_context( env['ir.attachment'].sudo().with_context(
binary_field_real_user=env.user, binary_field_real_user=env.user,
storage_location=self.storage_location, storage_location=self._storage_location(),
force_storage_key=storage_key, force_storage_key=storage_key,
).create(vals) ).create(vals)
@@ -76,24 +78,34 @@ class FileURL(fields.Binary):
storage_key = self._build_storage_key(fname) storage_key = self._build_storage_key(fname)
super().write( super().write(
records.with_context( records.with_context(
storage_location=self.storage_location, storage_location=self._storage_location(),
force_storage_key=storage_key, force_storage_key=storage_key,
), ),
value value,
) )
return True return True
def _setup_regular_base(self, model): def _setup_regular_base(self, model):
super()._setup_regular_base(model) super()._setup_regular_base(model)
if self.storage_path: if self.storage_path:
assert self.filename is not None, \ assert self.filename is not None, (
"Field %s defines storage_path without filename" % self "Field %s defines storage_path without filename" % self
)
def _build_storage_key(self, filename): def _build_storage_key(self, filename):
return '/'.join([ return '/'.join(
[
self.storage_path.rstrip('/'), self.storage_path.rstrip('/'),
unicodedata.normalize('NFKC', filename) unicodedata.normalize('NFKC', filename),
]) ]
)
def _storage_location(self):
# Avoid pushing to s3 in test mode or installation of demo data
force_file_storage = (
config['test_enable'] or config['init'] and config['demo']
)
return 'file' if force_file_storage else self.storage_location
fields.FileURL = FileURL fields.FileURL = FileURL