mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[IMP] attachment_minio: add post migration script to move some views out of attachment storage
Every database I've run the search (for s3 attachments for specific fields or models) on has not returned any attachments, but it seems safe enough in general, and presumably happens when migrating from older versions.
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