# -*- coding: utf-8 -*-
from odoo import tools, _
from odoo.modules.module import get_resource_path
from odoo.tools import view_validation
from odoo.tools.view_validation import validate, _validators
from lxml import etree
import logging
_logger = logging.getLogger(__name__)
_relaxng_cache = view_validation._relaxng_cache
_relaxng_cache['tree'] = None
with tools.file_open(get_resource_path('app_common', 'rng', 'tree_view.rng')) as frng:
try:
text = frng.read()
# with tools.file_open('addons/base/rng/common.rng') as common_rng:
# common_txt = common_rng.read()
# start_pos = common_txt.find('', start_pos)
# end_pos = common_txt.find('')
# common_content = common_txt[start_pos + 1: end_pos]
#
# # 从14中学习,最新 common
# #
# old_content = '''
#
# '''
# new_content = '''
#
#
#
#
#
#
#
#
#
#
#
#
#
# '''
# common_content = common_content.replace(old_content, new_content)
# # common 替代
# text = text.replace('', common_content)
# # tree 替代
# old_content = ''''''
# new_content = '''
#
#
#
#
# '''
# text = text.replace(old_content, new_content)
# # 增加 fx_tree_table 支持
# text = text.replace('',
# '')
tmp_doc = etree.fromstring(text.encode('utf-8'))
_relaxng_cache['tree'] = etree.RelaxNG(tmp_doc)
_logger.warning('=========new tree done: %s' % _relaxng_cache['tree'])
except Exception as error:
_logger.error('Failed to load RelaxNG XML schema for views validation, {error}'.format(
error=error))
_relaxng_cache['tree'] = None
@validate('tree')
def app_valid_field_in_tree(arch, **kwargs):
# 增加 header
return all(
child.tag in ('field', 'button', 'control', 'groupby', 'header')
for child in arch.xpath('/tree/*')
)
view_validation.valid_field_in_tree = app_valid_field_in_tree