storage_backend/storage_thumbnail/migrations/14.0.2.1.0/pre-migration.py

58 lines
1.7 KiB
Python
Raw Normal View History

2024-11-08 03:21:56 +07:00
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
import logging
from psycopg2.extensions import AsIs
from odoo.tools.sql import column_exists
_logger = logging.getLogger(__name__)
def migrate(cr, version):
# Get all related tables using thumb mixin
_logger.info("Pre-computing new thumbs relations")
cr.execute("SELECT DISTINCT res_model FROM storage_thumbnail")
res = [x[0] for x in cr.fetchall()]
for model in res:
# assume table has std name
table = model.replace(".", "_")
for scale in ("medium", "small"):
if not column_exists(cr, table, "thumb_%s_id" % scale):
cr.execute(
"""
ALTER TABLE
%s
ADD COLUMN
thumb_%s_id int4
REFERENCES
storage_thumbnail(id)
""",
(AsIs(table), AsIs(scale)),
)
_logger.info("Added thumb %s column to %s", scale, table)
_store_relation(cr, table, model, scale)
_logger.info("Computed thumb %s relation for %s", scale, table)
def _store_relation(cr, table, model, scale):
scales = {
"medium": (128, 128),
"small": (64, 64),
}
size = scales[scale]
query = """
UPDATE
%s AS rel
SET
thumb_%s_id = th.id
FROM
storage_thumbnail AS th
WHERE
th.res_model = %s
AND th.size_x = %s
AND th.size_y = %s
AND th.res_id = rel.id
"""
cr.execute(query, (AsIs(table), AsIs(scale), model, size[0], size[1]))