[REF] *: rename assets 'glob' to 'path'

Rationale:
The majority of cases where an ir.asset is manually declared
outside of manifest files is to specifically add a single asset file.
This means developers are specifying a single asset *path*, and not a
glob expression. In this context, it seems better to name the filepath
field `path`, and document that it can be specified with a glob
expression when (seldom) needed, rather than making the exception appear
to be the norm - possibly puzzling many developers (What's a glob and
why do I need one?)

The doc is updated as well, and some spell-checking and wording
improvements were done too.

This required some adaptations to the existing `ir.asset` declarations:
- odoo/enterprise#17465
- odoo/design-themes#459

closes odoo/odoo#68695

Related: odoo/upgrade#2348
Signed-off-by: Olivier Dony (odo) <odo@openerp.com>
This commit is contained in:
Julien Mougenot
2021-04-07 20:39:10 +00:00
committed by Olivier Dony
parent 0af36ab87d
commit 3e3dce0eb8
55 changed files with 183 additions and 177 deletions
+1 -1
View File
@@ -111,7 +111,7 @@ class TestStaticInheritanceCommon(BaseCase):
# Private methods
def _get_module_names(self):
return ','.join([glob[1] for glob in self.asset_paths])
return ','.join([asset_path[1] for asset_path in self.asset_paths])
def _set_patchers(self):
def _patched_for_get_asset_paths(*args, **kwargs):
+1 -1
View File
@@ -4,7 +4,7 @@
<record id="web_editor.13_0_color_system_support_primary_variables_scss" model="ir.asset">
<field name="name">13 0 color system support primary variables SCSS</field>
<field name="bundle">web._assets_primary_variables</field>
<field name="glob">web_editor/static/src/scss/13_0_color_system_support_primary_variables.scss</field>
<field name="path">web_editor/static/src/scss/13_0_color_system_support_primary_variables.scss</field>
<field name="active" eval="False"/>
</record>
</data>
+2 -2
View File
@@ -185,7 +185,7 @@ class Assets(models.AbstractModel):
# Create an asset with the new attachment
IrAsset = self.env['ir.asset']
new_asset = {
'glob': custom_url,
'path': custom_url,
'target': url,
'directive': 'replace',
**self._save_asset_hook(),
@@ -229,7 +229,7 @@ class Assets(models.AbstractModel):
ir.asset()
"""
url = custom_url[1:] if custom_url.startswith(('/', '\\')) else custom_url
return self.env['ir.asset'].search([('glob', 'like', url)])
return self.env['ir.asset'].search([('path', 'like', url)])
def _save_asset_hook(self):
"""
+4 -4
View File
@@ -6,28 +6,28 @@
<field name="name">User custom bootstrap overridden SCSS</field>
<field name="bundle">web._assets_frontend_helpers</field>
<field name="directive">prepend</field>
<field name="glob">website/static/src/scss/user_custom_bootstrap_overridden.scss</field>
<field name="path">website/static/src/scss/user_custom_bootstrap_overridden.scss</field>
<field name="sequence" eval="99"/>
</record>
<record id="website.user_custom_rules_scss" model="ir.asset">
<field name="name">User custom rules SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/scss/user_custom_rules.scss</field>
<field name="path">website/static/src/scss/user_custom_rules.scss</field>
<field name="sequence" eval="99"/>
</record>
<record id="website.bs3_for_12_0_scss" model="ir.asset">
<field name="name">Bs3 for 12 0 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/scss/compatibility/bs3_for_12_0.scss</field>
<field name="path">website/static/src/scss/compatibility/bs3_for_12_0.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.configurator_tour" model="ir.asset">
<field name="name">website.configurator_tour</field>
<field name="bundle">website.assets_editor</field>
<field name="glob">website/static/src/js/tours/configurator_tour.js</field>
<field name="path">website/static/src/js/tours/configurator_tour.js</field>
<field name="active" eval="False"/>
</record>
+2 -2
View File
@@ -26,7 +26,7 @@ class ThemeAsset(models.Model):
(REMOVE_DIRECTIVE, 'Remove'),
(REPLACE_DIRECTIVE, 'Replace'),
(INCLUDE_DIRECTIVE, 'Include')], default=APPEND_DIRECTIVE)
glob = fields.Char(required=True)
path = fields.Char(required=True)
target = fields.Char()
active = fields.Boolean(default=True)
sequence = fields.Integer(default=DEFAULT_SEQUENCE, required=True)
@@ -39,7 +39,7 @@ class ThemeAsset(models.Model):
'key': self.key,
'bundle': self.bundle,
'directive': self.directive,
'glob': self.glob,
'path': self.path,
'target': self.target,
'active': self.active,
'sequence': self.sequence,
+1 -1
View File
@@ -157,7 +157,7 @@ class TestUi(odoo.tests.HttpCase):
self.env['ir.asset'].create({
'name': 'EditorExtension',
'bundle': 'website.assets_wysiwyg',
'glob': custom_url,
'path': custom_url,
'website_id': new_website.id,
})
+1 -1
View File
@@ -42,7 +42,7 @@
<record id="website.s_alert_000_scss" model="ir.asset">
<field name="name">Alert 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_alert/000.scss</field>
<field name="path">website/static/src/snippets/s_alert/000.scss</field>
</record>
</odoo>
+2 -2
View File
@@ -21,13 +21,13 @@
<record id="website.s_badge_000_variables_scss" model="ir.asset">
<field name="name">Badge 000 variables SCSS</field>
<field name="bundle">web._assets_primary_variables</field>
<field name="glob">website/static/src/snippets/s_badge/000_variables.scss</field>
<field name="path">website/static/src/snippets/s_badge/000_variables.scss</field>
</record>
<record id="website.s_badge_000_scss" model="ir.asset">
<field name="name">Badge 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_badge/000.scss</field>
<field name="path">website/static/src/snippets/s_badge/000.scss</field>
</record>
</odoo>
@@ -53,7 +53,7 @@
<record id="website.s_blockquote_000_scss" model="ir.asset">
<field name="name">Blockquote 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_blockquote/000.scss</field>
<field name="path">website/static/src/snippets/s_blockquote/000.scss</field>
</record>
</odoo>
+1 -1
View File
@@ -4,7 +4,7 @@
<record id="website.s_btn_000_scss" model="ir.asset">
<field name="name">Btn 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_btn/000.scss</field>
<field name="path">website/static/src/snippets/s_btn/000.scss</field>
</record>
</odoo>
+1 -1
View File
@@ -16,7 +16,7 @@
<record id="website.s_card_000_scss" model="ir.asset">
<field name="name">Card 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_card/000.scss</field>
<field name="path">website/static/src/snippets/s_card/000.scss</field>
</record>
+1 -1
View File
@@ -69,7 +69,7 @@
<record id="website.s_chart_000_js" model="ir.asset">
<field name="name">Chart 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_chart/000.js</field>
<field name="path">website/static/src/snippets/s_chart/000.js</field>
</record>
</odoo>
@@ -25,7 +25,7 @@
<record id="website.s_color_blocks_2_000_scss" model="ir.asset">
<field name="name">Color blocks 2 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_color_blocks_2/000.scss</field>
<field name="path">website/static/src/snippets/s_color_blocks_2/000.scss</field>
</record>
</odoo>
@@ -61,7 +61,7 @@
<record id="website.s_company_team_000_scss" model="ir.asset">
<field name="name">Company team 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_company_team/000.scss</field>
<field name="path">website/static/src/snippets/s_company_team/000.scss</field>
</record>
</odoo>
@@ -82,7 +82,7 @@
<record id="website.s_comparisons_000_scss" model="ir.asset">
<field name="name">Comparisons 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_comparisons/000.scss</field>
<field name="path">website/static/src/snippets/s_comparisons/000.scss</field>
</record>
</odoo>
@@ -70,7 +70,7 @@
<record id="website.s_countdown_000_js" model="ir.asset">
<field name="name">Countdown 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_countdown/000.js</field>
<field name="path">website/static/src/snippets/s_countdown/000.js</field>
</record>
</odoo>
@@ -55,13 +55,13 @@
<record id="website.s_dynamic_snippet_000_scss" model="ir.asset">
<field name="name">Dynamic snippet 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_dynamic_snippet/000.scss</field>
<field name="path">website/static/src/snippets/s_dynamic_snippet/000.scss</field>
</record>
<record id="website.s_dynamic_snippet_000_js" model="ir.asset">
<field name="name">Dynamic snippet 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_dynamic_snippet/000.js</field>
<field name="path">website/static/src/snippets/s_dynamic_snippet/000.js</field>
</record>
</odoo>
@@ -28,13 +28,13 @@
<record id="website.s_dynamic_snippet_carousel_000_scss" model="ir.asset">
<field name="name">Dynamic snippet carousel 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_dynamic_snippet_carousel/000.scss</field>
<field name="path">website/static/src/snippets/s_dynamic_snippet_carousel/000.scss</field>
</record>
<record id="website.s_dynamic_snippet_carousel_000_js" model="ir.asset">
<field name="name">Dynamic snippet carousel 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_dynamic_snippet_carousel/000.js</field>
<field name="path">website/static/src/snippets/s_dynamic_snippet_carousel/000.js</field>
</record>
</odoo>
@@ -25,7 +25,7 @@
<record id="website.s_facebook_page_000_js" model="ir.asset">
<field name="name">Facebook page 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_facebook_page/000.js</field>
<field name="path">website/static/src/snippets/s_facebook_page/000.js</field>
</record>
</odoo>
@@ -38,7 +38,7 @@
<record id="website.s_faq_collapse_000_scss" model="ir.asset">
<field name="name">Faq collapse 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_faq_collapse/000.scss</field>
<field name="path">website/static/src/snippets/s_faq_collapse/000.scss</field>
</record>
</odoo>
@@ -71,7 +71,7 @@
<record id="website.s_features_grid_000_scss" model="ir.asset">
<field name="name">Features grid 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_features_grid/000.scss</field>
<field name="path">website/static/src/snippets/s_features_grid/000.scss</field>
</record>
</odoo>
@@ -47,13 +47,13 @@
<record id="website.s_google_map_000_scss" model="ir.asset">
<field name="name">Google map 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_google_map/000.scss</field>
<field name="path">website/static/src/snippets/s_google_map/000.scss</field>
</record>
<record id="website.s_google_map_000_js" model="ir.asset">
<field name="name">Google map 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_google_map/000.js</field>
<field name="path">website/static/src/snippets/s_google_map/000.js</field>
</record>
</odoo>
+1 -1
View File
@@ -32,7 +32,7 @@
<record id="website.s_hr_000_scss" model="ir.asset">
<field name="name">Hr 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_hr/000.scss</field>
<field name="path">website/static/src/snippets/s_hr/000.scss</field>
</record>
</odoo>
@@ -133,20 +133,20 @@
<record id="website.s_image_gallery_000_js" model="ir.asset">
<field name="name">Image gallery 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_image_gallery/000.js</field>
<field name="path">website/static/src/snippets/s_image_gallery/000.js</field>
</record>
<record id="website.s_image_gallery_000_scss" model="ir.asset">
<field name="name">Image gallery 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_image_gallery/000.scss</field>
<field name="path">website/static/src/snippets/s_image_gallery/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_image_gallery_001_scss" model="ir.asset">
<field name="name">Image gallery 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_image_gallery/001.scss</field>
<field name="path">website/static/src/snippets/s_image_gallery/001.scss</field>
</record>
</odoo>
+1 -1
View File
@@ -63,7 +63,7 @@
<record id="website.s_map_000_scss" model="ir.asset">
<field name="name">Map 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_map/000.scss</field>
<field name="path">website/static/src/snippets/s_map/000.scss</field>
</record>
</odoo>
@@ -38,20 +38,20 @@
<record id="website.s_masonry_block_000_scss" model="ir.asset">
<field name="name">Masonry block 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_masonry_block/000.scss</field>
<field name="path">website/static/src/snippets/s_masonry_block/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_masonry_block_001_scss" model="ir.asset">
<field name="name">Masonry block 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_masonry_block/001.scss</field>
<field name="path">website/static/src/snippets/s_masonry_block/001.scss</field>
</record>
<record id="website.s_masonry_block_000_variables_scss" model="ir.asset">
<field name="name">Masonry block 000 variables SCSS</field>
<field name="bundle">web._assets_primary_variables</field>
<field name="glob">website/static/src/snippets/s_masonry_block/000_variables.scss</field>
<field name="path">website/static/src/snippets/s_masonry_block/000_variables.scss</field>
<field name="active" eval="False"/>
</record>
@@ -97,14 +97,14 @@
<record id="website.s_media_list_000_scss" model="ir.asset">
<field name="name">Media list 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_media_list/000.scss</field>
<field name="path">website/static/src/snippets/s_media_list/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_media_list_001_scss" model="ir.asset">
<field name="name">Media list 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_media_list/001.scss</field>
<field name="path">website/static/src/snippets/s_media_list/001.scss</field>
</record>
</odoo>
+3 -3
View File
@@ -71,20 +71,20 @@
<record id="website.s_popup_000_scss" model="ir.asset">
<field name="name">Popup 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_popup/000.scss</field>
<field name="path">website/static/src/snippets/s_popup/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_popup_000_js" model="ir.asset">
<field name="name">Popup 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_popup/000.js</field>
<field name="path">website/static/src/snippets/s_popup/000.js</field>
</record>
<record id="website.s_popup_001_scss" model="ir.asset">
<field name="name">Popup 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_popup/001.scss</field>
<field name="path">website/static/src/snippets/s_popup/001.scss</field>
</record>
</odoo>
@@ -57,7 +57,7 @@
<record id="website.s_process_steps_000_scss" model="ir.asset">
<field name="name">Process steps 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_process_steps/000.scss</field>
<field name="path">website/static/src/snippets/s_process_steps/000.scss</field>
</record>
</odoo>
@@ -77,7 +77,7 @@
<record id="website.s_product_catalog_001_scss" model="ir.asset">
<field name="name">Product catalog 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_product_catalog/001.scss</field>
<field name="path">website/static/src/snippets/s_product_catalog/001.scss</field>
</record>
</odoo>
@@ -61,13 +61,13 @@
<record id="website.s_product_list_000_variables_scss" model="ir.asset">
<field name="name">Product list 000 variables SCSS</field>
<field name="bundle">web._assets_primary_variables</field>
<field name="glob">website/static/src/snippets/s_product_list/000_variables.scss</field>
<field name="path">website/static/src/snippets/s_product_list/000_variables.scss</field>
</record>
<record id="website.s_product_list_000_scss" model="ir.asset">
<field name="name">Product list 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_product_list/000.scss</field>
<field name="path">website/static/src/snippets/s_product_list/000.scss</field>
</record>
</odoo>
@@ -74,14 +74,14 @@
<record id="website.s_quotes_carousel_000_scss" model="ir.asset">
<field name="name">Quotes carousel 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_quotes_carousel/000.scss</field>
<field name="path">website/static/src/snippets/s_quotes_carousel/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_quotes_carousel_001_scss" model="ir.asset">
<field name="name">Quotes carousel 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_quotes_carousel/001.scss</field>
<field name="path">website/static/src/snippets/s_quotes_carousel/001.scss</field>
</record>
</odoo>
+2 -2
View File
@@ -59,14 +59,14 @@
<record id="website.s_rating_000_scss" model="ir.asset">
<field name="name">Rating 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_rating/000.scss</field>
<field name="path">website/static/src/snippets/s_rating/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_rating_001_scss" model="ir.asset">
<field name="name">Rating 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_rating/001.scss</field>
<field name="path">website/static/src/snippets/s_rating/001.scss</field>
</record>
</odoo>
@@ -33,7 +33,7 @@
<record id="website.s_references_000_scss" model="ir.asset">
<field name="name">References 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_references/000.scss</field>
<field name="path">website/static/src/snippets/s_references/000.scss</field>
</record>
</odoo>
+2 -2
View File
@@ -53,13 +53,13 @@
<record id="website.s_share_000_scss" model="ir.asset">
<field name="name">Share 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_share/000.scss</field>
<field name="path">website/static/src/snippets/s_share/000.scss</field>
</record>
<record id="website.s_share_000_js" model="ir.asset">
<field name="name">Share 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_share/000.js</field>
<field name="path">website/static/src/snippets/s_share/000.js</field>
</record>
</odoo>
+3 -3
View File
@@ -65,21 +65,21 @@
<record id="website.s_showcase_000_scss" model="ir.asset">
<field name="name">Showcase 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_showcase/000.scss</field>
<field name="path">website/static/src/snippets/s_showcase/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_showcase_001_scss" model="ir.asset">
<field name="name">Showcase 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_showcase/001.scss</field>
<field name="path">website/static/src/snippets/s_showcase/001.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.s_showcase_002_scss" model="ir.asset">
<field name="name">Showcase 002 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_showcase/002.scss</field>
<field name="path">website/static/src/snippets/s_showcase/002.scss</field>
</record>
</odoo>
@@ -64,13 +64,13 @@
<record id="website.s_table_of_content_000_scss" model="ir.asset">
<field name="name">Table of content 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_table_of_content/000.scss</field>
<field name="path">website/static/src/snippets/s_table_of_content/000.scss</field>
</record>
<record id="website.s_table_of_content_000_js" model="ir.asset">
<field name="name">Table of content 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_table_of_content/000.js</field>
<field name="path">website/static/src/snippets/s_table_of_content/000.js</field>
</record>
</odoo>
+1 -1
View File
@@ -79,7 +79,7 @@
<record id="website.s_tabs_001_scss" model="ir.asset">
<field name="name">Tabs 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_tabs/001.scss</field>
<field name="path">website/static/src/snippets/s_tabs/001.scss</field>
</record>
</odoo>
@@ -13,7 +13,7 @@
<record id="website.s_text_highlight_000_scss" model="ir.asset">
<field name="name">Text highlight 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_text_highlight/000.scss</field>
<field name="path">website/static/src/snippets/s_text_highlight/000.scss</field>
</record>
</odoo>
@@ -40,7 +40,7 @@
<record id="website.s_three_columns_000_scss" model="ir.asset">
<field name="name">Three columns 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_three_columns/000.scss</field>
<field name="path">website/static/src/snippets/s_three_columns/000.scss</field>
<field name="active" eval="False"/>
</record>
+1 -1
View File
@@ -67,7 +67,7 @@
<record id="website.s_timeline_000_scss" model="ir.asset">
<field name="name">Timeline 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_timeline/000.scss</field>
<field name="path">website/static/src/snippets/s_timeline/000.scss</field>
</record>
</odoo>
+1 -1
View File
@@ -12,7 +12,7 @@
<record id="website.s_title_000_scss" model="ir.asset">
<field name="name">Title 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website/static/src/snippets/s_title/000.scss</field>
<field name="path">website/static/src/snippets/s_title/000.scss</field>
<field name="active" eval="False"/>
</record>
+2 -2
View File
@@ -1968,14 +1968,14 @@
<record id="website.ripple_effect_scss" model="ir.asset">
<field name="name">Ripple effect SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">/website/static/src/scss/options/ripple_effect.scss</field>
<field name="path">/website/static/src/scss/options/ripple_effect.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website.ripple_effect_js" model="ir.asset">
<field name="name">Ripple effect JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">/website/static/src/js/content/ripple_effect.js</field>
<field name="path">/website/static/src/js/content/ripple_effect.js</field>
<field name="active" eval="False"/>
</record>
+2 -2
View File
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="website_blog.s_latest_posts_000_scss" model="ir.asset">
<field name="name">Latest posts 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_blog/static/src/snippets/s_latest_posts/000.scss</field>
<field name="path">website_blog/static/src/snippets/s_latest_posts/000.scss</field>
<field name="active" eval="False"/>
</record>
@@ -135,13 +135,13 @@
<record id="website_blog.s_blog_posts_000_scss" model="ir.asset">
<field name="name">Blog posts 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_blog/static/src/snippets/s_blog_posts/000.scss</field>
<field name="path">website_blog/static/src/snippets/s_blog_posts/000.scss</field>
</record>
<record id="website_blog.s_blog_posts_000_js" model="ir.asset">
<field name="name">Blog posts 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_blog/static/src/snippets/s_blog_posts/000.js</field>
<field name="path">website_blog/static/src/snippets/s_blog_posts/000.js</field>
</record>
</odoo>
+1 -1
View File
@@ -5,7 +5,7 @@
<record id="website_form.s_website_form_000_scss" model="ir.asset">
<field name="name">Website form 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_form/static/src/snippets/s_website_form/000.scss</field>
<field name="path">website_form/static/src/snippets/s_website_form/000.scss</field>
<field name="active" eval="False"/>
</record>
@@ -161,20 +161,20 @@
<record id="website_form.s_website_form_000_scss" model="ir.asset">
<field name="name">Website form 000 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_form/static/src/snippets/s_website_form/000.scss</field>
<field name="path">website_form/static/src/snippets/s_website_form/000.scss</field>
<field name="active" eval="False"/>
</record>
<record id="website_form.s_website_form_001_scss" model="ir.asset">
<field name="name">Website form 001 SCSS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_form/static/src/snippets/s_website_form/001.scss</field>
<field name="path">website_form/static/src/snippets/s_website_form/001.scss</field>
</record>
<record id="website_form.s_website_form_000_js" model="ir.asset">
<field name="name">Website form 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_form/static/src/snippets/s_website_form/000.js</field>
<field name="path">website_form/static/src/snippets/s_website_form/000.js</field>
</record>
</odoo>
@@ -41,7 +41,7 @@
<record id="website_mail_channel.s_channel_000_js" model="ir.asset">
<field name="name">Channel 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_mail_channel/static/src/snippets/s_channel/000.js</field>
<field name="path">website_mail_channel/static/src/snippets/s_channel/000.js</field>
</record>
</odoo>
@@ -30,7 +30,7 @@
<record id="website_sale.s_dynamic_snippet_products_000_js" model="ir.asset">
<field name="name">Dynamic snippet products 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_sale/static/src/snippets/s_dynamic_snippet_products/000.js</field>
<field name="path">website_sale/static/src/snippets/s_dynamic_snippet_products/000.js</field>
</record>
</odoo>
@@ -48,7 +48,7 @@
<record id="website_sale.s_products_searchbar_000_js" model="ir.asset">
<field name="name">Products searchbar 000 JS</field>
<field name="bundle">web.assets_frontend</field>
<field name="glob">website_sale/static/src/snippets/s_products_searchbar/000.js</field>
<field name="path">website_sale/static/src/snippets/s_products_searchbar/000.js</field>
</record>
</odoo>
+48 -42
View File
@@ -80,21 +80,21 @@ Assets Management
=================
Managing assets in Odoo is not as straightforward as it is in some other apps.
One of the reason is that we have a variety of situations where some, but not all
the assets are required. For example, the needs of the web client, the point of
sale, the website or even the mobile application are different. Also, some
One of the reasons is that we have a variety of situations where some, but not all
of the assets are required. For example, the needs of the web client, the point of
sale app, the website or even the mobile application are different. Also, some
assets may be large, but are seldom needed. In that case, we sometimes want them
to be loaded lazily.
The main idea is that we define a set of **bundles** in the module manifest. A
bundle is here defined as a **list of file paths** (xml, javascript, css, scss).
Files are declared using `glob`_ syntax, meaning that you can declare several asset
files using a single line. Each file found using a glob will be appended to the
`<head>` of the page, at most once, in the order the globs are given.
files using a single line. Each matching file found will be appended to the
`<head>` of the page, at most once, in the order the glob patterns are given.
As mentionned, the bundles are declared in each module's `__manifest__.py`, under
a dedicated `assets` key which contains a dictionary. Said dictionary will declare
**bundles** (keys) with the **files** they contain (values). It looks like this:
As mentioned, the bundles are declared in each module's `__manifest__.py`, under
a dedicated `assets` key which contains a dictionary. The dictionary will map
**bundles** (keys) to the list of **files** they contain (values). It looks like this:
.. code-block:: py
@@ -173,7 +173,7 @@ be covered with the following operations.
a) Add one or multiple file(s): `append`
The proper way to add a file to a bundle in any addon is simple: it is just enough
to add a glob path to the bundle in the file `__manifest__.py` like so:
to add a glob pattern to the bundle in the file `__manifest__.py` like so:
.. code-block:: py
@@ -182,11 +182,13 @@ a) Add one or multiple file(s): `append`
],
By default, adding a simple string to a bundle will append the files matching the
glob at the end of the bundle.
glob pattern at the end of the bundle. Obviously, the pattern may also be directly
a single file path.
b) Add one or multiple file(s) at the beginning of the list: `prepend`
Sometimes you need to put a certain file before the others in a bundle, when
loading css file for example. In this case, you can use the `prepend` directive
loading css file, for example. In this case, you can use the `prepend` directive
by replacing the path with a pair `('prepend', <path>)`,
like so:
.. code-block:: py
@@ -197,8 +199,9 @@ b) Add one or multiple file(s) at the beginning of the list: `prepend`
c) Add one or multiple file(s) before a specific file: `before`
Prepending a file at the beginning of a bundle might not be precise enough. The
`before` directive can be used to add the given files right before the target
file.
`before` directive can be used to add the given file(s) right *before* the target
file. It is declared by replacing the normal path with a 3-element tuple
`('before', <target>, <path>)`, like so:
.. code-block:: py
@@ -206,8 +209,10 @@ c) Add one or multiple file(s) before a specific file: `before`
('before', 'web/static/src/css/bootstrap_overridden.scss', 'my_addon/static/src/css/bootstrap_overridden.scss'),
],
d) Add one or multiple file(s) after a specofic file: `after`
Same as `before`, with the resulting files appended after the target file.
d) Add one or multiple file(s) after a specific file: `after`
Same as `before`, with the matching file(s) appended right *after* the target file.
It is declared by replacing the normal path with a 3-element tuple
`('after', <target>, <path>)`, like so:
.. code-block:: py
@@ -218,8 +223,8 @@ d) Add one or multiple file(s) after a specofic file: `after`
e) Use nested bundles: `include`
The `include` directive is a way to use a same bundle in other bundles to minimize
the size of your manifest. In Odoo we use sub bundles (prefixed with an underscore
by convention) to batch glob files used in multiple other bundles. You can then
specify the sub bundle like this:
by convention) to batch files used in multiple other bundles. You can then
specify the sub bundle as a pair `('include', <bundle>)` like this:
.. code-block:: py
@@ -230,7 +235,7 @@ e) Use nested bundles: `include`
f) Remove one or multiple file(s): `remove`
In some additional module you may want to get rid of the call of a certain asset
in a bundle. Any file can be removed from an existing bundle using the `remove`
directive:
directive by specifying a pair `('remove', <target>)`:
.. code-block:: py
@@ -241,7 +246,7 @@ f) Remove one or multiple file(s): `remove`
g) Replace an asset file with one or multiple file(s): `replace`
Let us now say that an asset need not only to be removed, but you also want to insert
your new version of that asset at the same exact position. This can be done with
the `replace` directive, using a 3-element tuple:
the `replace` directive, using a 3-element tuple `('replace', <target>, <path>)`:
.. code-block:: py
@@ -249,7 +254,7 @@ g) Replace an asset file with one or multiple file(s): `replace`
('replace', 'web/static/src/js/boot.js', 'my_addon/static/src/js/boot.js'),
],
Note that directives targetting a certain file (i.e. `before`, `after`,
Note that all directives targeting a certain asset file (i.e. `before`, `after`,
`replace` and `remove`) need that file to be declared beforehand, either
in manifests higher up in the hierarchy or in ``ir.asset`` records with a lower
sequence.
@@ -262,7 +267,7 @@ g) Replace an asset file with one or multiple file(s): `replace`
better to lazyload some assets. For example, if a widget requires a large
library, and that widget is not a core part of the experience, then it may be
a good idea to only load the library when the widget is actually created. The
widget class has actually builtin support just for this use case. (see section
widget class has actually built-in support just for this use case. (see section
:ref:`reference/javascript_reference/qweb`)
Assets loading order
@@ -286,7 +291,7 @@ a file already present in the list, nothing is done for that file. In other word
only the first occurrence of a file is kept in the list.
4. The remaining ``ir.asset`` records (those with a sequence greater than or equal
to 16) are eventually processed and applied as well.
to 16) are then processed and applied as well.
Assets declared in the manifest may need to be loaded in a particular order, for
example `jquery.js` must be loaded before all other jquery scripts when loading the
@@ -313,11 +318,12 @@ in the list before all the others included in the glob.
The asset model (``ir.asset``)
------------------------------
In most cases the assets declared in the manifest will largely suffice. But Odoo
being highly customizable requires to modify things as critical as defining assets
to be editted in place. A model ``ir.asset`` exists to do such things. Records will
be associated to a `bundle` and apply their `glob` (and `target` if any) to the
list of assets using according to their `directive`.
In most cases the assets declared in the manifest will largely suffice. Yet for
more flexibility, the framework also supports dynamic assets declared in the
database.
This is done by creating ``ir.asset`` records. Those will be processed as if they
were found in a module manifest, and they give the same expressive power as their
manifest counterparts.
.. autoclass:: odoo.addons.base.models.ir_asset.IrAsset
@@ -328,24 +334,24 @@ list of assets using according to their `directive`.
Bundle in which the asset will be applied.
``directive`` (default= `append`)
This field determines how the `glob` (and `target` if needed) will be interpreted.
This field determines how the `path` (and `target` if needed) will be interpreted.
Here is the list of available directives along with their required arguments:
- **append**: `glob`
- **prepend**: `glob`
- **before**: `target`, `glob`
- **after**: `target`, `glob`
- **include**: `glob` (interpreted as a **bundle name**)
- **remove**: `target`
- **replace**: `target`, `glob`
- **append**: `path`
- **prepend**: `path`
- **before**: `target`, `path`
- **after**: `target`, `path`
- **include**: `path` (interpreted as a **bundle name**)
- **remove**: `path` (interpreted as a **target asset** to remove)
- **replace**: `target`, `path`
``glob``
Glob string defining one of the following:
``path``
A string defining one of the following:
- a **glob path** to a set of files in the Odoo file system;
- a **relative path** to a file in the Odoo file system;
- an **URL** to an attachment/external source;
- a **bundle name** if using the `include` directive.
- a **relative path** to an asset file in the addons file system;
- a **glob pattern** to a set of asset files in the addons file system;
- a **URL** to an attachment or external asset file;
- a **bundle name**, when using the `include` directive.
``target``
Target file to specify a position in the bundle. Can only be used with the
@@ -368,7 +374,7 @@ are a few things you can try to solve the issue:
modified. So, you can simply restart the server to regenerate the assets.
- check the console (in the dev tools, usually opened with F12) to make sure
there are no obvious errors
- try to add a console.log at the beginning of your file (before any module
- try to add a `console.log()` at the beginning of your file (before any module
definition), so you can see if a file has been loaded or not
- when in any debug mode, there is an option in the debug manager menu (bug icon)
to force the server to update its assets files.
+11 -11
View File
@@ -83,7 +83,7 @@ class IrAsset(models.Model):
(REMOVE_DIRECTIVE, 'Remove'),
(REPLACE_DIRECTIVE, 'Replace'),
(INCLUDE_DIRECTIVE, 'Include')], default=APPEND_DIRECTIVE)
glob = fields.Char(string='Path', required=True)
path = fields.Char(string='Path (or glob pattern)', required=True)
target = fields.Char(string='Target')
active = fields.Boolean(string='active', default=True)
sequence = fields.Integer(string="Sequence", default=DEFAULT_SEQUENCE, required=True)
@@ -200,7 +200,7 @@ class IrAsset(models.Model):
# 1. Process the first sequence of 'ir.asset' records
assets = self._get_related_assets([('bundle', '=', bundle)]).filtered('active')
for asset in assets.filtered(lambda a: a.sequence < DEFAULT_SEQUENCE):
process_path(asset.directive, asset.target, asset.glob)
process_path(asset.directive, asset.target, asset.path)
# 2. Process all addons' manifests.
for addon in self._topological_sort(tuple(addons)):
@@ -221,7 +221,7 @@ class IrAsset(models.Model):
# 3. Process the rest of 'ir.asset' records
for asset in assets.filtered(lambda a: a.sequence >= DEFAULT_SEQUENCE):
process_path(asset.directive, asset.target, asset.glob)
process_path(asset.directive, asset.target, asset.path)
def _get_related_assets(self, domain):
"""
@@ -301,15 +301,15 @@ class IrAsset(models.Model):
def _get_paths(self, path_def, installed, extensions=None):
"""
Returns a list of file paths matching a given glob (path_def) as well as
the addon targetted by the path definition. If no file matches that glob,
the path definition is returned as is. This is either because the glob is
not correctly written or because it points to an URL.
the addon targeted by the path definition. If no file matches that glob,
the path definition is returned as is. This is either because the path is
not correctly written or because it points to a URL.
:param path_def: the definition (glob) of file paths to match
:param installed: the list of installed addons
:param extensions: a list of extensions that found files must match
:returns: a tuple: the addon targetted by the path definition [0] and the
list of glob files matching the definition [1] (or the glob itself if
:returns: a tuple: the addon targeted by the path definition [0] and the
list of file paths matching the definition [1] (or the glob itself if
none). Note that these paths are filtered on the given `extensions`.
"""
paths = []
@@ -410,7 +410,7 @@ class AssetPaths:
self.memo.add(path)
self.list[index:index] = to_insert
def remove(self, paths, addon, bundle, glob=None):
def remove(self, paths, addon, bundle, path=None):
"""Removes the given paths from the current list."""
paths = {path for path in paths if path in self.memo}
if paths:
@@ -418,8 +418,8 @@ class AssetPaths:
self.memo.difference_update(paths)
return
if glob:
self._raise_not_found(glob, bundle)
if path:
self._raise_not_found(path, bundle)
def _raise_not_found(self, path, bundle):
raise ValueError("File %s not found in bundle %s" % (path, bundle))
+2 -2
View File
@@ -15,7 +15,7 @@
</group>
<group>
<field name="target" attrs="{ 'invisible': [('directive', '!=', 'replace')] }"/>
<field name="glob"/>
<field name="path"/>
</group>
</group>
</sheet>
@@ -43,7 +43,7 @@
<field name="bundle"/>
<field name="directive"/>
<field name="sequence"/>
<field name="glob"/>
<field name="path"/>
<filter string="Active" name="active" domain="[('active', '=', True)]"/>
</search>
</field>
@@ -4,7 +4,7 @@
<record id="test_assetsbundle.test_jsfile[!4]_js" model="ir.asset">
<field name="name">Test jsfile[!4] JS</field>
<field name="bundle">test_assetsbundle.bundle1</field>
<field name="glob">test_assetsbundle/static/src/js/test_jsfile[!4].js</field>
<field name="path">test_assetsbundle/static/src/js/test_jsfile[!4].js</field>
</record>
</data>
</odoo>
@@ -251,7 +251,7 @@ class TestJavascriptAssetsBundle(FileTouchable):
self.env['ir.asset'].create({
'name': 'test bundle inheritance',
'bundle': self.jsbundle_name,
'glob': 'test_assetsbundle/static/src/js/test_jsfile4.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile4.js',
})
bundle1 = self._get_asset(self.jsbundle_name)
@@ -370,7 +370,7 @@ class TestJavascriptAssetsBundle(FileTouchable):
self.env['ir.asset'].create({
'name': 'test bundle inheritance',
'bundle': self.cssbundle_name,
'glob': 'test_assetsbundle/static/src/css/test_cssfile2.css',
'path': 'test_assetsbundle/static/src/css/test_cssfile2.css',
})
bundle1 = self._get_asset(self.cssbundle_name)
@@ -562,7 +562,7 @@ class TestJavascriptAssetsBundle(FileTouchable):
self.env['ir.asset'].create({
'name': 'test bundle inheritance',
'bundle': self.cssbundle_name,
'glob': 'test_assetsbundle/static/src/css/test_cssfile3.css',
'path': 'test_assetsbundle/static/src/css/test_cssfile3.css',
})
ltr_bundle1 = self._get_asset(self.cssbundle_name)
@@ -732,7 +732,7 @@ class TestAssetsBundleInBrowser(HttpCase):
self.env['ir.asset'].create({
'name': 'lol',
'bundle': 'test_assetsbundle.bundle1',
'glob': custom_url,
'path': custom_url,
})
self.browser_js(
"/test_assetsbundle/js",
@@ -907,7 +907,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.manifest4',
'glob': 'test_assetsbundle/static/src/js/test_jsfile1.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile1.js',
})
view._render()
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.manifest4.min.js')], order='create_date DESC', limit=1)
@@ -928,7 +928,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.irasset1',
'glob': 'test_assetsbundle/static/src/js/test_jsfile1.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile1.js',
})
view._render()
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.irasset1.min.js')], order='create_date DESC', limit=1)
@@ -948,7 +948,7 @@ class TestAssetsManifest(AddonManifestPatched):
'bundle': 'test_assetsbundle.manifest1',
'directive': 'replace',
'target': 'test_assetsbundle/static/src/js/test_jsfile1.js',
'glob': 'http://external.link/external.js',
'path': 'http://external.link/external.js',
})
rendered = view._render()
html_tree = lxml.etree.fromstring(rendered)
@@ -978,7 +978,7 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.manifest4',
'directive': 'replace',
'glob': 'test_assetsbundle/static/src/js/test_jsfile1.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile1.js',
'target': 'test_assetsbundle/static/src/js/test_jsfile3.js',
})
view._render()
@@ -998,14 +998,14 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'directive': 'prepend',
'bundle': 'test_assetsbundle.manifest4',
'glob': 'test_assetsbundle/static/src/js/test_jsfile4.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile4.js',
})
# asset is now: js_file4 ; js_file3
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.manifest4',
'directive': 'replace',
'glob': 'test_assetsbundle/static/src/js/test_jsfile[12].js',
'path': 'test_assetsbundle/static/src/js/test_jsfile[12].js',
'target': 'test_assetsbundle/static/src/js/test_jsfile[45].js',
})
# asset is now: js_file1 ; js_file2 ; js_file3
@@ -1033,7 +1033,7 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.manifest5',
'directive': 'remove',
'glob': 'test_assetsbundle/static/src/js/test_jsfile2.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile2.js',
})
view._render()
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.manifest5')], order='create_date DESC', limit=1)
@@ -1056,7 +1056,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.remove_error',
'glob': '/test_assetsbundle/static/src/js/test_jsfile1.js',
'path': '/test_assetsbundle/static/src/js/test_jsfile1.js',
})
view = self.make_asset_view('test_assetsbundle.remove_error')
@@ -1064,7 +1064,7 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.remove_error',
'directive': 'remove',
'glob': 'test_assetsbundle/static/src/js/test_doesntexist.js',
'path': 'test_assetsbundle/static/src/js/test_doesntexist.js',
})
with self.assertRaises(Exception) as cm:
view._render()
@@ -1078,7 +1078,7 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.manifest2',
'directive': 'remove',
'glob': 'test_assetsbundle/static/src/**/*',
'path': 'test_assetsbundle/static/src/**/*',
})
view._render()
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.manifest2.js')], order='create_date DESC', limit=1)
@@ -1091,7 +1091,7 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'directive': 'prepend',
'bundle': 'test_assetsbundle.manifest4',
'glob': 'test_assetsbundle/static/src/js/test_jsfile1.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile1.js',
})
view._render()
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.manifest4')], order='create_date DESC', limit=1)
@@ -1113,7 +1113,7 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'directive': 'include',
'bundle': 'test_assetsbundle.irasset_include1',
'glob': 'test_assetsbundle.manifest6',
'path': 'test_assetsbundle.manifest6',
})
view._render()
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.irasset_include1')], order='create_date DESC', limit=1)
@@ -1145,13 +1145,13 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'directive': 'include',
'bundle': 'test_assetsbundle.irasset_include1',
'glob': 'test_assetsbundle.irasset_include2',
'path': 'test_assetsbundle.irasset_include2',
})
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'directive': 'include',
'bundle': 'test_assetsbundle.irasset_include2',
'glob': 'test_assetsbundle.irasset_include1',
'path': 'test_assetsbundle.irasset_include1',
})
with self.assertRaises(QWebException) as cm:
@@ -1168,30 +1168,30 @@ class TestAssetsManifest(AddonManifestPatched):
'name': 'test_jsfile4',
'directive': 'include',
'bundle': 'test_assetsbundle.irasset_include1',
'glob': 'test_assetsbundle.irasset_include2',
'path': 'test_assetsbundle.irasset_include2',
})
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'directive': 'include',
'bundle': 'test_assetsbundle.irasset_include2',
'glob': 'test_assetsbundle.irasset_include3',
'path': 'test_assetsbundle.irasset_include3',
})
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'directive': 'include',
'bundle': 'test_assetsbundle.irasset_include2',
'glob': 'test_assetsbundle.irasset_include4',
'path': 'test_assetsbundle.irasset_include4',
})
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'directive': 'include',
'bundle': 'test_assetsbundle.irasset_include4',
'glob': 'test_assetsbundle.irasset_include3',
'path': 'test_assetsbundle.irasset_include3',
})
self.env['ir.asset'].create({
'name': 'test_jsfile4',
'bundle': 'test_assetsbundle.irasset_include3',
'glob': 'test_assetsbundle/static/src/js/test_jsfile1.js',
'path': 'test_assetsbundle/static/src/js/test_jsfile1.js',
})
view._render()
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.irasset_include1')], order='create_date DESC', limit=1)
@@ -1372,12 +1372,12 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irasset2',
'glob': 'http://external.css/externalstyle.css',
'path': 'http://external.css/externalstyle.css',
})
self.env['ir.asset'].create({
'name': '2',
'bundle': 'test_assetsbundle.irasset2',
'glob': 'test_assetsbundle/static/src/css/test_cssfile1.css',
'path': 'test_assetsbundle/static/src/css/test_cssfile1.css',
})
view = self.make_asset_view('test_assetsbundle.irasset2', {
't-js': 'false',
@@ -1399,12 +1399,12 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irasset2',
'glob': 'http://external.css/externalstyle.css',
'path': 'http://external.css/externalstyle.css',
})
self.env['ir.asset'].create({
'name': '2',
'bundle': 'test_assetsbundle.irasset2',
'glob': 'test_assetsbundle/static/src/scss/test_file1.scss',
'path': 'test_assetsbundle/static/src/scss/test_file1.scss',
})
view = self.make_asset_view('test_assetsbundle.irasset2', {
't-js': 'false',
@@ -1561,7 +1561,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.bundle4',
'glob': '/test_assetsbundle/static/src/js/test_jsfile4.js',
'path': '/test_assetsbundle/static/src/js/test_jsfile4.js',
'target': '/test_assetsbundle/static/src/js/test_jsfile3.js',
'directive': 'before',
})
@@ -1590,7 +1590,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.bundle4',
'glob': '/test_assetsbundle/static/src/js/test_jsfile4.js',
'path': '/test_assetsbundle/static/src/js/test_jsfile4.js',
'target': '/test_assetsbundle/static/src/js/test_jsfile2.js',
'directive': 'after',
})
@@ -1619,14 +1619,14 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.bundle4',
'glob': '/test_assetsbundle/static/src/js/test_jsfile4.js',
'path': '/test_assetsbundle/static/src/js/test_jsfile4.js',
'target': '/test_assetsbundle/static/src/css/test_cssfile1.css',
'directive': 'after',
})
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.bundle4',
'glob': '/test_assetsbundle/static/src/css/test_cssfile3.css',
'path': '/test_assetsbundle/static/src/css/test_cssfile3.css',
'target': '/test_assetsbundle/static/src/js/test_jsfile2.js',
'directive': 'before',
})
@@ -1681,12 +1681,12 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.wrong_path',
'glob': '/test_assetsbundle/static/src/js/test_jsfile4.js',
'path': '/test_assetsbundle/static/src/js/test_jsfile4.js',
})
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.wrong_path',
'glob': '/test_assetsbundle/static/src/js/test_jsfile1.js',
'path': '/test_assetsbundle/static/src/js/test_jsfile1.js',
'target': '/test_assetsbundle/static/src/js/doesnt_exist.js',
'directive': 'after',
})
@@ -1701,7 +1701,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.manifest4',
'glob': '/test_assetsbundle/static/src/*/**',
'path': '/test_assetsbundle/static/src/*/**',
'target': '/test_assetsbundle/static/src/js/test_jsfile3.js',
'directive': 'after',
})
@@ -1730,7 +1730,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.manifest4',
'glob': '/test_assetsbundle/static/src/js/test_jsfile[124].js',
'path': '/test_assetsbundle/static/src/js/test_jsfile[124].js',
'target': '/test_assetsbundle/static/src/js/test_jsfile3.js',
'directive': 'before',
})
@@ -1765,7 +1765,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irassetsec',
'glob': '/test_assetsbundle/%s' % path_to_dummy,
'path': '/test_assetsbundle/%s' % path_to_dummy,
})
view = self.make_asset_view('test_assetsbundle.irassetsec')
view._render()
@@ -1782,7 +1782,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irassetsec',
'glob': '/test_assetsbundle/%s' % path_to_dummy,
'path': '/test_assetsbundle/%s' % path_to_dummy,
})
files = self.env['ir.asset']._get_asset_paths('test_assetsbundle.irassetsec', addons=self.installed_modules, xml=False)
@@ -1797,7 +1797,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irassetsec',
'glob': '/notinstalled_module/somejsfile.js',
'path': '/notinstalled_module/somejsfile.js',
})
view = self.make_asset_view('test_assetsbundle.irassetsec')
with self.assertRaises(QWebException) as cm:
@@ -1809,7 +1809,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irassetsec',
'glob': '/notinstalled_module/somejsfile.js',
'path': '/notinstalled_module/somejsfile.js',
})
self.make_asset_view('test_assetsbundle.irassetsec')
attach = self.env['ir.attachment'].search([('name', 'ilike', 'test_assetsbundle.irassetsec')], order='create_date DESC', limit=1)
@@ -1820,7 +1820,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irassetsec',
'glob': '/test_assetsbundle/__manifest__.py',
'path': '/test_assetsbundle/__manifest__.py',
})
view = self.make_asset_view('test_assetsbundle.irassetsec')
view._render()
@@ -1832,7 +1832,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irassetsec',
'glob': '/test_assetsbundle/data/ir_asset.xml',
'path': '/test_assetsbundle/data/ir_asset.xml',
})
files = self.env['ir.asset']._get_asset_paths('test_assetsbundle.irassetsec', addons=self.installed_modules, xml=False)
self.assertFalse(files)
@@ -1841,7 +1841,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irassetsec',
'glob': '/test_assetsbundle/static/accessible.xml',
'path': '/test_assetsbundle/static/accessible.xml',
})
files = self.env['ir.asset']._get_asset_paths('test_assetsbundle.irassetsec', addons=self.installed_modules, xml=False)
self.assertEqual(len(files), 1)
@@ -1866,7 +1866,7 @@ class TestAssetsManifest(AddonManifestPatched):
self.env['ir.asset'].create({
'name': '1',
'bundle': 'test_assetsbundle.irasset_custom_attach',
'glob': 'test_assetsbundle/my_style_attach.scss',
'path': 'test_assetsbundle/my_style_attach.scss',
})
view = self.make_asset_view('test_assetsbundle.irasset_custom_attach', {'t-css': True})
view._render()