From 4e6c15ef6b534250406fe3e3372bd627e9745506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Thu, 27 Sep 2012 13:19:06 +0200 Subject: [PATCH] Allow to override rng file review446001 --- trytond/ir/ui/view.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/trytond/ir/ui/view.py b/trytond/ir/ui/view.py index 4d5ff37e08..6d04ba41d2 100644 --- a/trytond/ir/ui/view.py +++ b/trytond/ir/ui/view.py @@ -11,6 +11,7 @@ from trytond.tools import safe_eval, file_open from trytond.transaction import Transaction from trytond.wizard import Wizard, StateView, StateAction, Button from trytond.pool import Pool +from trytond.cache import Cache from trytond.rpc import RPC __all__ = [ @@ -52,6 +53,7 @@ class View(ModelSQL, ModelView): domain = fields.Char('Domain', states={ 'invisible': ~Eval('inherit'), }, depends=['inherit']) + _get_rng_cache = Cache('ir_ui_view.get_rng') @classmethod def __setup__(cls): @@ -97,6 +99,16 @@ class View(ModelSQL, ModelView): def show(cls, views): pass + @classmethod + def get_rng(cls, type_): + key = (cls.__name__, type_) + rng = cls._get_rng_cache.get(key) + if not rng: + rng_name = os.path.join(os.path.dirname(__file__), type_ + '.rng') + rng = etree.fromstring(open(rng_name).read()) + cls._get_rng_cache.set(key, rng) + return rng + @classmethod def check_xml(cls, views): "Check XML" @@ -120,11 +132,9 @@ class View(ModelSQL, ModelView): continue tree = etree.fromstring(xml) - # validate the tree using RelaxNG - rng_name = os.path.join(os.path.dirname(__file__), - (view.inherit and view.inherit.type or view.type) + '.rng') if hasattr(etree, 'RelaxNG'): - validator = etree.RelaxNG(file=rng_name) + rng_type = view.inherit.type if view.inherit else view.type + validator = etree.RelaxNG(etree=cls.get_rng(rng_type)) if not validator.validate(tree): logger = logging.getLogger('ir') error_log = reduce(lambda x, y: str(x) + '\n' + str(y),