[REM] website_links: remove favicon, icon_src for performance
The link tracker model (link.tracker) contained favicon (store)
and icon_src computed fields. Computing favicon took
{3-6.5%} of installing odoo (with demo data) due to syncronous http
call to a external link (google).
Moreover, these fields had no sense to be store in odoo
and only used in one template. This template was modified to
display the same information (icon) as before but without storing fields
and with a lazy loading of icons.
TASK_ID: 2083715
closes odoo/odoo#38405
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
@@ -44,8 +44,6 @@ class LinkTracker(models.Model):
|
||||
redirected_url = fields.Char(string='Redirected URL', compute='_compute_redirected_url')
|
||||
short_url_host = fields.Char(string='Host of the short URL', compute='_compute_short_url_host')
|
||||
title = fields.Char(string='Page Title', store=True)
|
||||
favicon = fields.Char(string='Favicon', compute='_compute_favicon', store=True)
|
||||
icon_src = fields.Char(string='Favicon Source', compute='_compute_icon_src')
|
||||
# Tracking
|
||||
link_code_ids = fields.One2many('link.tracker.code', 'link_id', string='Codes')
|
||||
code = fields.Char(string='Short URL code', compute='_compute_code')
|
||||
@@ -72,11 +70,6 @@ class LinkTracker(models.Model):
|
||||
record = self.env['link.tracker.code'].search([('link_id', '=', tracker.id)], limit=1, order='id DESC')
|
||||
tracker.code = record.code
|
||||
|
||||
@api.depends('favicon')
|
||||
def _compute_icon_src(self):
|
||||
for tracker in self:
|
||||
tracker.icon_src = 'data:image/png;base64,' + tracker.favicon
|
||||
|
||||
@api.depends('url')
|
||||
def _compute_redirected_url(self):
|
||||
for tracker in self:
|
||||
@@ -101,16 +94,6 @@ class LinkTracker(models.Model):
|
||||
|
||||
return title
|
||||
|
||||
@api.depends('url')
|
||||
def _compute_favicon(self):
|
||||
for tracker in self:
|
||||
try:
|
||||
icon = requests.get('http://www.google.com/s2/favicons', params={'domain': tracker.url}, timeout=5).content
|
||||
icon_base64 = base64.b64encode(icon).replace(b"\n", b"").decode('ascii')
|
||||
except:
|
||||
icon_base64 = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACiElEQVQ4EaVTzU8TURCf2tJuS7tQtlRb6UKBIkQwkRRSEzkQgyEc6lkOKgcOph78Y+CgjXjDs2i44FXY9AMTlQRUELZapVlouy3d7kKtb0Zr0MSLTvL2zb75eL838xtTvV6H/xELBptMJojeXLCXyobnyog4YhzXYvmCFi6qVSfaeRdXdrfaU1areV5KykmX06rcvzumjY/1ggkR3Jh+bNf1mr8v1D5bLuvR3qDgFbvbBJYIrE1mCIoCrKxsHuzK+Rzvsi29+6DEbTZz9unijEYI8ObBgXOzlcrx9OAlXyDYKUCzwwrDQx1wVDGg089Dt+gR3mxmhcUnaWeoxwMbm/vzDFzmDEKMMNhquRqduT1KwXiGt0vre6iSeAUHNDE0d26NBtAXY9BACQyjFusKuL2Ry+IPb/Y9ZglwuVscdHaknUChqLF/O4jn3V5dP4mhgRJgwSYm+gV0Oi3XrvYB30yvhGa7BS70eGFHPoTJyQHhMK+F0ZesRVVznvXw5Ixv7/C10moEo6OZXbWvlFAF9FVZDOqEABUMRIkMd8GnLwVWg9/RkJF9sA4oDfYQAuzzjqzwvnaRUFxn/X2ZlmGLXAE7AL52B4xHgqAUqrC1nSNuoJkQtLkdqReszz/9aRvq90NOKdOS1nch8TpL555WDp49f3uAMXhACRjD5j4ykuCtf5PP7Fm1b0DIsl/VHGezzP1KwOiZQobFF9YyjSRYQETRENSlVzI8iK9mWlzckpSSCQHVALmN9Az1euDho9Xo8vKGd2rqooA8yBcrwHgCqYR0kMkWci08t/R+W4ljDCanWTg9TJGwGNaNk3vYZ7VUdeKsYJGFNkfSzjXNrSX20s4/h6kB81/271ghG17l+rPTAAAAAElFTkSuQmCC'
|
||||
tracker.favicon = icon_base64
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
create_vals = vals.copy()
|
||||
|
||||
@@ -23,16 +23,9 @@ class TestMassMailingShortener(common.TransactionCase):
|
||||
def _get_title_from_url(u):
|
||||
return "Hello"
|
||||
|
||||
def _compute_favicon():
|
||||
# 1px to avoid real request
|
||||
return 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=='
|
||||
|
||||
patcher = patch('odoo.addons.link_tracker.models.link_tracker.LinkTracker._compute_favicon', wraps=_compute_favicon)
|
||||
patcher2 = patch('odoo.addons.link_tracker.models.link_tracker.LinkTracker._get_title_from_url', wraps=_get_title_from_url)
|
||||
patcher = patch('odoo.addons.link_tracker.models.link_tracker.LinkTracker._get_title_from_url', wraps=_get_title_from_url)
|
||||
patcher.start()
|
||||
patcher2.start()
|
||||
self.addCleanup(patcher.stop)
|
||||
self.addCleanup(patcher2.stop)
|
||||
|
||||
def test_00_test_mass_mailing_shortener(self):
|
||||
mailing_list_A = self.env['mailing.list'].create({
|
||||
|
||||
@@ -18,20 +18,13 @@ class LinkTrackerMock(common.BaseCase):
|
||||
def setUp(self):
|
||||
super(LinkTrackerMock, self).setUp()
|
||||
|
||||
def _compute_favicon():
|
||||
# 1px to avoid real request
|
||||
return 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=='
|
||||
|
||||
def _get_title_from_url(u):
|
||||
return "Test_TITLE"
|
||||
|
||||
self.env['ir.config_parameter'].sudo().set_param('web.base.url', 'https://test.odoo.com')
|
||||
|
||||
link_tracker_favicon_patch = patch('odoo.addons.link_tracker.models.link_tracker.LinkTracker._compute_favicon', wraps=_compute_favicon)
|
||||
link_tracker_title_patch = patch('odoo.addons.link_tracker.models.link_tracker.LinkTracker._get_title_from_url', wraps=_get_title_from_url)
|
||||
link_tracker_favicon_patch.start()
|
||||
link_tracker_title_patch.start()
|
||||
self.addCleanup(link_tracker_favicon_patch.stop)
|
||||
self.addCleanup(link_tracker_title_patch.stop)
|
||||
|
||||
self.utm_c = self.env.ref('utm.utm_campaign_fall_drive')
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 492 B |
@@ -8,9 +8,8 @@
|
||||
<p class="text-muted" style="margin-top: -5px;">clicks</p>
|
||||
</div>
|
||||
<div class="col-md-7 col-7">
|
||||
|
||||
<h4 class="truncate_text">
|
||||
<img t-att-src="widget.link_obj.icon_src" alt="Icon"/>
|
||||
<img t-attf-src="http://www.google.com/s2/favicons?domain={{ widget.link_obj.url }}" loading="lazy" alt="Icon" onerror="this.src='/website_links/static/img/default_favicon.png'"/>
|
||||
<a class="no-link-style" t-att-href="widget.link_obj.url"><t t-esc="widget.link_obj.title"/></a>
|
||||
</h4>
|
||||
<p class="text-muted mb0" style="margin-top: -5px;">
|
||||
|
||||
Reference in New Issue
Block a user