mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
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.
61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
# 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()
|