58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
|
# 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]))
|