[IMP] assetsbundle: cleanup api and dead code

Extrac a method to generate the "language extra part", redundant in
this file.

Also removes some dead code about html_url

Part-of: odoo/odoo#131353
This commit is contained in:
Xavier-Do
2023-10-27 11:34:52 +00:00
parent d988030134
commit b0a4451c19
+23 -29
View File
@@ -118,7 +118,7 @@ class AssetsBundle(object):
css_attachments = self.css(is_minified=not self.is_debug_assets) or []
for attachment in css_attachments:
if self.is_debug_assets:
href = self.get_debug_asset_url(extra='rtl' if self.rtl else 'ltr',
href = self.get_debug_asset_url(extra=self.extra('css'),
name=css_attachments.name,
extension='')
else:
@@ -189,7 +189,15 @@ class AssetsBundle(object):
for fpath in to_delete:
attachments._file_delete(fpath)
def clean_attachments(self, extension, keep_url):
def extra(self, extension):
if self.is_css(extension):
return 'rtl' if self.rtl else 'ltr'
return '-'
def is_css(self, extension):
return extension in ['css', 'min.css', 'css.map']
def clean_attachments(self, extension, keep_url, extra):
""" Takes care of deleting any outdated ir.attachment records associated to a bundle before
saving a fresh one.
@@ -200,15 +208,16 @@ class AssetsBundle(object):
must exclude the current bundle.
"""
ira = self.env['ir.attachment']
is_css = extension in ['css', 'min.css', 'css.map']
to_clean_pattern = self.get_asset_url(
extra='rtl' if is_css and self.rtl else 'ltr' if is_css else '-',
unique='%',
extra=extra,
name=self.name,
extension=extension,
)
domain = [
('url', '=like', to_clean_pattern),
('url', '!=', keep_url)
('url', '!=', keep_url),
('public', '=', True),
]
attachments = ira.sudo().search(domain)
# avoid to invalidate cache if it's already empty (mainly useful for test)
@@ -233,9 +242,8 @@ class AssetsBundle(object):
else: the url contains a version equal to that of the self.get_version(type)
=> web/assets/self.get_version(type)/name.extension.
"""
is_css = extension in ['css', 'min.css', 'css.map']
unique = "%" if ignore_version else self.get_version('css' if is_css else 'js')
extra = 'rtl' if is_css and self.rtl else 'ltr' if is_css else '-'
unique = "%" if ignore_version else self.get_version('css' if self.is_css(extension) else 'js')
extra = self.extra(extension)
url_pattern = self.get_asset_url(
unique=unique,
extra=extra, # not sure about css.map
@@ -318,16 +326,17 @@ class AssetsBundle(object):
# and allow to only clear the current direction bundle
# (this applies to css bundles only)
fname = '%s.%s' % (self.name, extension)
is_css = extension in ['css', 'min.css', 'css.map']
mimetype = (
'text/css' if extension in ['css', 'min.css'] else
'text/xml' if extension in ['xml', 'min.xml'] else
'application/json' if extension in ['js.map', 'css.map'] else
'application/javascript'
)
extra = self.extra(extension)
unique = self.get_version('css' if self.is_css(extension) else 'js')
url = self.get_asset_url(
unique=self.get_version('css' if is_css else 'js'),
extra='rtl' if is_css and self.rtl else 'ltr' if is_css else '-',
unique=unique,
extra=extra,
name=self.name,
extension=extension,
)
@@ -347,7 +356,7 @@ class AssetsBundle(object):
if self.env.context.get('commit_assetsbundle') is True:
self.env.cr.commit()
self.clean_attachments(extension, url)
self.clean_attachments(extension, url, extra)
# For end-user assets (common and backend), send a message on the bus
# to invite the user to refresh their browser
@@ -355,7 +364,7 @@ class AssetsBundle(object):
self.env['bus.bus']._sendone('broadcast', 'bundle_changed', {
'server_version': release.version # Needs to be dynamically imported
})
_logger.debug('Asset Changed: bundle: %s -- version: %s', self.name, self.get_version('css' if is_css else 'js'))
_logger.debug('Asset Changed: bundle: %s -- version: %s', self.name, unique)
return attachment
@@ -599,7 +608,7 @@ class AssetsBundle(object):
sourcemap_attachment = self.get_attachments('css.map') \
or self.save_attachment('css.map', '')
debug_asset_url = self.get_debug_asset_url(name=self.name,
extra='rtl' if self.rtl else 'ltr')
extra=self.extra('css'))
generator = SourceMapGenerator(
source_root="/".join(
[".." for i in range(0, len(debug_asset_url.split("/")) - 2)]
@@ -767,7 +776,6 @@ class AssetsBundle(object):
class WebAsset(object):
html_url_format = '%s'
_content = None
_filename = None
_ir_attach = None
@@ -778,7 +786,6 @@ class WebAsset(object):
self.inline = inline
self._filename = filename
self.url = url
self.html_url_args = url
self._last_modified = last_modified
if not inline and not url:
raise Exception("An asset should either be inlined or url linked, defined in bundle '%s'" % bundle.name)
@@ -796,10 +803,6 @@ class WebAsset(object):
def name(self):
return '<inline asset>' if self.inline else self.url
@property
def html_url(self):
return self.html_url_format % self.html_url_args
def stat(self):
if not (self.inline or self._filename or self._ir_attach):
try:
@@ -966,10 +969,6 @@ class StylesheetAsset(WebAsset):
def __init__(self, *args, rtl=False, **kw):
self.rtl = rtl
super().__init__(*args, **kw)
if self.rtl and self.url:
self.html_url_args = self.url.rsplit('.', 1)
self.html_url_format = '%%s/%s/%s.%%s' % ('rtl', self.bundle.name)
self.html_url_args = tuple(self.html_url_args)
@property
def bundle_version(self):
@@ -1024,11 +1023,6 @@ class StylesheetAsset(WebAsset):
class PreprocessedCSS(StylesheetAsset):
rx_import = None
def __init__(self, *args, **kw):
super().__init__(*args, **kw)
self.html_url_args = tuple(self.url.rsplit('/', 1))
self.html_url_format = '%%s/%s%s/%%s.css' % ('rtl' if self.rtl else 'ltr', self.bundle.name)
def get_command(self):
raise NotImplementedError