[FIX] website: svg preview has been moved in theme repo

Now, iap only return images urls needed to process the svg.
We don't need to 'download' svg preprocess, we use the svg locally and make
the substitution ourself.

It simplify the maintenance:
   Preview of theme are in theme repository
It make it blazing fast:
   Response contains a list of string, and not more a big string, the svg.

closes odoo/odoo#77199

X-original-commit: 103ec4debb539b04b1783be20f1ccf3e18ab377e
Related: odoo/design-themes#503
Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
This commit is contained in:
Jeremy Kersten
2021-09-27 07:12:02 +00:00
parent 0e293f1b7e
commit 653e49695e
3 changed files with 45 additions and 7 deletions
@@ -27,7 +27,7 @@ class TestConfigurator(odoo.tests.HttpCase):
{"id": 4, "label": "abortion clinic"},
{"id": 5, "label": "abrasives supplier"},
{"id": 6, "label": "abundant life church"}]}
elif '/api/website/1/configurator/recommended_themes' in endpoint:
elif '/api/website/2/configurator/recommended_themes' in endpoint:
return []
elif '/api/website/1/configurator/custom_resources/' in endpoint:
return {
+8 -5
View File
@@ -333,11 +333,14 @@ class Website(models.Model):
domain = [('name', '=like', 'theme%'), ('name', 'not in', ['theme_default', 'theme_common'])]
client_themes = request.env['ir.module.module'].search(domain).mapped('name')
client_themes_img = dict([(t, http.addons_manifest[t].get('images_preview_theme', {})) for t in client_themes])
params = {
'palette': palette,
'client_themes': client_themes_img,
}
return self._website_api_rpc('/api/website/1/configurator/recommended_themes/%s' % industry_id, params)
themes_suggested = self._website_api_rpc(
'/api/website/2/configurator/recommended_themes/%s' % industry_id,
{'client_themes': client_themes_img}
)
process_svg = self.env['website.configurator.feature']._process_svg
for theme in themes_suggested:
theme['svg'] = process_svg(theme['name'], palette, theme.pop('image_urls'))
return themes_suggested
@api.model
def configurator_skip(self):
@@ -1,8 +1,11 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
import re
from odoo import api, fields, models, tools, _
from odoo.exceptions import ValidationError
from odoo.modules.module import get_resource_path
class WebsiteConfiguratorFeature(models.Model):
@@ -27,3 +30,35 @@ class WebsiteConfiguratorFeature(models.Model):
def _check_module_xor_page_view(self):
if bool(self.module_id) == bool(self.page_view_id):
raise ValidationError(_("One and only one of the two fields 'page_view_id' and 'module_id' should be set"))
@staticmethod
def _process_svg(theme, colors, image_mapping):
svg = None
preview_svg = get_resource_path(theme, 'static', 'description', theme + '.svg')
if not preview_svg:
return False
with tools.file_open(preview_svg, 'r') as file:
svg = file.read()
default_colors = {
'color1': '#3AADAA',
'color2': '#7C6576',
'color3': '#F6F6F6',
'color4': '#FFFFFF',
'color5': '#383E45',
'menu': '#MENU_COLOR',
'footer': '#FOOTER_COLOR',
}
color_mapping = {default_colors[color_key]: color_value for color_key, color_value in colors.items() if color_key in default_colors.keys()}
color_regex = '(?i)%s' % '|'.join('(%s)' % color for color in color_mapping.keys())
image_regex = '(?i)%s' % '|'.join('(%s)' % image for image in image_mapping.keys())
def subber_maker(mapping):
def subber(match):
key = match.group()
return mapping[key] if key in mapping else key
return subber
svg = re.sub(color_regex, subber_maker(color_mapping), svg)
svg = re.sub(image_regex, subber_maker(image_mapping), svg)
return svg