mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Merge branch 'mig/13.0/attachment_minio' into '13.0'
mig/13.0/attachment_minio into 13.0 See merge request hibou-io/hibou-odoo/suite!410
This commit is contained in:
60
attachment_minio/migrations/13.0.0.0.1/post-migration.py
Normal file
60
attachment_minio/migrations/13.0.0.0.1/post-migration.py
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# Copyright 2020 Hibou Corp.
|
||||||
|
# Copyright 2016-2019 Camptocamp SA
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from contextlib import closing
|
||||||
|
|
||||||
|
import odoo
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def migrate(cr, version):
|
||||||
|
if not version:
|
||||||
|
return
|
||||||
|
cr.execute("""
|
||||||
|
SELECT value FROM ir_config_parameter
|
||||||
|
WHERE key = 'ir_attachment.location'
|
||||||
|
""")
|
||||||
|
row = cr.fetchone()
|
||||||
|
|
||||||
|
if row[0] == 's3':
|
||||||
|
uid = odoo.SUPERUSER_ID
|
||||||
|
registry = odoo.modules.registry.RegistryManager.get(cr.dbname)
|
||||||
|
new_cr = registry.cursor()
|
||||||
|
with closing(new_cr):
|
||||||
|
with odoo.api.Environment.manage():
|
||||||
|
env = odoo.api.Environment(new_cr, uid, {})
|
||||||
|
store_local = env['ir.attachment'].search(
|
||||||
|
[('store_fname', '=like', 's3://%'),
|
||||||
|
'|', ('res_model', '=', 'ir.ui.view'),
|
||||||
|
('res_field', 'in', ['image_small',
|
||||||
|
'image_medium',
|
||||||
|
'web_icon_data'])
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
_logger.info(
|
||||||
|
'Moving %d attachments from S3 to DB for fast access',
|
||||||
|
len(store_local)
|
||||||
|
)
|
||||||
|
for attachment_id in store_local.ids:
|
||||||
|
# force re-storing the document, will move
|
||||||
|
# it from the object storage to the database
|
||||||
|
|
||||||
|
# This is a trick to avoid having the 'datas' function
|
||||||
|
# fields computed for every attachment on each
|
||||||
|
# iteration of the loop. The former issue being that
|
||||||
|
# it reads the content of the file of ALL the
|
||||||
|
# attachments on each loop.
|
||||||
|
try:
|
||||||
|
env.clear()
|
||||||
|
attachment = env['ir.attachment'].browse(attachment_id)
|
||||||
|
_logger.info('Moving attachment %s (id: %s)',
|
||||||
|
attachment.name, attachment.id)
|
||||||
|
attachment.write({'datas': attachment.datas})
|
||||||
|
new_cr.commit()
|
||||||
|
except:
|
||||||
|
new_cr.rollback()
|
||||||
Reference in New Issue
Block a user