diff --git a/app_common/__manifest__.py b/app_common/__manifest__.py index 376bf4da..e5e118cf 100644 --- a/app_common/__manifest__.py +++ b/app_common/__manifest__.py @@ -33,7 +33,7 @@ { 'name': "Sunpop Odooapp Common Func", - 'version': '13.21.08.03', + 'version': '13.21.06.13', 'author': 'Sunpop.cn', 'category': 'Base', 'website': 'https://www.sunpop.cn', diff --git a/app_common/models/ir_ui_view.py b/app_common/models/ir_ui_view.py index bed01195..a864de21 100644 --- a/app_common/models/ir_ui_view.py +++ b/app_common/models/ir_ui_view.py @@ -22,7 +22,7 @@ def app_relaxng(view_type): """ Return a validator for the given view type, or None. """ if view_type not in _relaxng_cache: # tree, search 特殊 - if view_type in ['tree', 'search']: + if view_type in ['tree', 'search', 'pivot']: _file = get_resource_path('app_common', 'rng', '%s_view.rng' % view_type) else: _file = get_resource_path('base', 'rng', '%s_view.rng' % view_type) diff --git a/app_common/models/view_validation.py b/app_common/models/view_validation.py index 7bfa746e..e6bac36e 100644 --- a/app_common/models/view_validation.py +++ b/app_common/models/view_validation.py @@ -3,6 +3,7 @@ import ast from odoo.tools import view_validation from odoo.tools.view_validation import get_attrs_field_names as old_gafn +from odoo.tools.view_validation import _get_attrs_symbols import logging _logger = logging.getLogger(__name__) @@ -18,25 +19,42 @@ ATTRS_WITH_FIELD_NAMES2 = { 'decoration-primary', 'decoration-success', 'decoration-warning', + 'decoration-black', + 'decoration-white', 'bg-danger', 'bg-info', 'bg-muted', 'bg-primary', 'bg-success', 'bg-warning', + 'bg-black', + 'bg-white', } def app_get_attrs_field_names(env, arch, model, editable): + symbols = _get_attrs_symbols() | {None} result = [] - def add_bg(node, model, editable, get=old_gafn.get_name): + def get_name(node): + """ return the name from an AST node, or None """ + if isinstance(node, ast.Name): + return node.id + + def process_expr(expr, get, key, val): + """ parse `expr` and collect triples """ + for node in ast.walk(ast.parse(expr.strip(), mode='eval')): + name = get(node) + if name not in symbols: + result.append((name, key, val)) + + def add_bg(node, model, editable, get=get_name): for key, val in node.items(): if not val: continue if key in ATTRS_WITH_FIELD_NAMES2: - old_gafn.process_expr(val, get, key, val) + process_expr(val, get, key, val) - res = old_gafn(arch, model, editable) + res = old_gafn(env, arch, model, editable) add_bg(arch, model, editable) res += result return res diff --git a/app_common/rng/common.rng b/app_common/rng/common.rng index 75914955..5aff83fc 100644 --- a/app_common/rng/common.rng +++ b/app_common/rng/common.rng @@ -277,12 +277,16 @@ + + + + diff --git a/app_common/rng/tree_view.rng b/app_common/rng/tree_view.rng index 5a6ab2fb..fd800c55 100644 --- a/app_common/rng/tree_view.rng +++ b/app_common/rng/tree_view.rng @@ -46,12 +46,16 @@ + + + +