From 425b2fef610cc865c1d30041da25df72cdd7efa4 Mon Sep 17 00:00:00 2001 From: Julien Thewys Date: Tue, 30 Mar 2010 17:20:31 +0200 Subject: [PATCH] [REF] Splitted YAML custom tags definition in itw own file (needed by module recorder). bzr revid: jth@openerp.com-20100330152031-xvq4ve15ju51u7cy --- bin/tools/yaml_import.py | 188 ++++----------------------------------- bin/tools/yaml_tag.py | 157 ++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+), 171 deletions(-) create mode 100644 bin/tools/yaml_tag.py diff --git a/bin/tools/yaml_import.py b/bin/tools/yaml_import.py index fed3e81299e..8808a92820d 100644 --- a/bin/tools/yaml_import.py +++ b/bin/tools/yaml_import.py @@ -7,6 +7,7 @@ import pooler import netsvc import misc from config import config +import yaml_tag import yaml @@ -18,161 +19,6 @@ class YamlImportException(Exception): class YamlImportAbortion(Exception): pass -class YamlTag(object): - """ - Superclass for constructors of custom tags defined in yaml file. - """ - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - def __getitem__(self, key): - return getattr(self, key) - def __getattr__(self, attr): - return None - def __repr__(self): - return "<%s %s>" % (self.__class__.__name__, sorted(self.__dict__.items())) - -class Assert(YamlTag): - def __init__(self, model, id, severity=logging.ERROR, string="NONAME", **kwargs): - self.model = model - self.id = id - self.severity = severity - self.string = string - super(Assert, self).__init__(**kwargs) - -class Record(YamlTag): - def __init__(self, model, id, **kwargs): - self.model = model - self.id = id - super(Record, self).__init__(**kwargs) - -class Python(YamlTag): - def __init__(self, model, severity=logging.ERROR, name="", **kwargs): - self.model= model - self.severity = severity - self.name = name - super(Python, self).__init__(**kwargs) - -class Menuitem(YamlTag): - def __init__(self, id, name, **kwargs): - self.id = id - self.name = name - super(Menuitem, self).__init__(**kwargs) - -class Workflow(YamlTag): - def __init__(self, model, action, **kwargs): - self.model = model - self.action = action - super(Workflow, self).__init__(**kwargs) - -class ActWindow(YamlTag): - def __init__(self, model, action, **kwargs): - self.model = model - self.action = action - super(ActWindow, self).__init__(**kwargs) - -class Function(YamlTag): - def __init__(self, model, name, **kwargs): - self.model = model - self.name = name - super(Function, self).__init__(**kwargs) - -class Report(YamlTag): - def __init__(self, model, name, string, **kwargs): - self.model = model - self.name = name - self.string = string - super(Report, self).__init__(**kwargs) - -class Delete(YamlTag): - def __init__(self, model, id, search, **kwargs): - self.model = model - self.id = id - self.search = search - super(Delete, self).__init__(**kwargs) - -class Context(YamlTag): - def __init__(self, **kwargs): - super(Context, self).__init__(**kwargs) - -class Url(YamlTag): - def __init__(self, **kwargs): - super(Url, self).__init__(**kwargs) - -class Eval(YamlTag): - def __init__(self, expression): - self.expression = expression - super(Eval, self).__init__() - -class IrSet(YamlTag): - def __init__(self): - super(IrSet, self).__init__() - -def assert_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Assert(**kwargs) - -def record_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Record(**kwargs) - -def python_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Python(**kwargs) - -def menuitem_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Menuitem(**kwargs) - -def workflow_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Workflow(**kwargs) - -def act_window_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return ActWindow(**kwargs) - -def function_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Function(**kwargs) - -def report_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Report(**kwargs) - -def delete_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Delete(**kwargs) - -def context_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Context(**kwargs) - -def url_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return Url(**kwargs) - -def eval_constructor(loader, node): - expression = loader.construct_scalar(node) - return Eval(expression) - -def ir_set_constructor(loader, node): - kwargs = loader.construct_mapping(node) - return IrSet(**kwargs) - -yaml.add_constructor(u"!assert", assert_constructor) -yaml.add_constructor(u"!record", record_constructor) -yaml.add_constructor(u"!python", python_constructor) -yaml.add_constructor(u"!menuitem", menuitem_constructor) -yaml.add_constructor(u"!workflow", workflow_constructor) -yaml.add_constructor(u"!act_window", act_window_constructor) -yaml.add_constructor(u"!function", function_constructor) -yaml.add_constructor(u"!report", report_constructor) -yaml.add_constructor(u"!context", context_constructor) -yaml.add_constructor(u"!delete", delete_constructor) -yaml.add_constructor(u"!url", url_constructor) -yaml.add_constructor(u"!eval", eval_constructor) -yaml.add_constructor(u"!ir_set", ir_set_constructor) - def _is_yaml_mapping(node, tag_constructor): value = isinstance(node, types.DictionaryType) \ and len(node.keys()) == 1 \ @@ -183,45 +29,45 @@ def is_comment(node): return isinstance(node, types.StringTypes) def is_assert(node): - return _is_yaml_mapping(node, Assert) + return _is_yaml_mapping(node, yaml_tag.Assert) def is_record(node): - return _is_yaml_mapping(node, Record) + return _is_yaml_mapping(node, yaml_tag.Record) def is_python(node): - return _is_yaml_mapping(node, Python) + return _is_yaml_mapping(node, yaml_tag.Python) def is_menuitem(node): - return isinstance(node, Menuitem) \ - or _is_yaml_mapping(node, Menuitem) + return isinstance(node, yaml_tag.Menuitem) \ + or _is_yaml_mapping(node, yaml_tag.Menuitem) def is_function(node): - return isinstance(node, Function) \ - or _is_yaml_mapping(node, Function) + return isinstance(node, yaml_tag.Function) \ + or _is_yaml_mapping(node, yaml_tag.Function) def is_report(node): - return isinstance(node, Report) + return isinstance(node, yaml_tag.Report) def is_workflow(node): - return isinstance(node, Workflow) + return isinstance(node, yaml_tag.Workflow) def is_act_window(node): - return isinstance(node, ActWindow) + return isinstance(node, yaml_tag.ActWindow) def is_delete(node): - return isinstance(node, Delete) + return isinstance(node, yaml_tag.Delete) def is_context(node): - return isinstance(node, Context) + return isinstance(node, yaml_tag.Context) def is_url(node): - return isinstance(node, Url) + return isinstance(node, yaml_tag.Url) def is_eval(node): - return isinstance(node, Eval) + return isinstance(node, yaml_tag.Eval) def is_ir_set(node): - return _is_yaml_mapping(node, IrSet) + return _is_yaml_mapping(node, yaml_tag.IrSet) class TestReport(object): @@ -410,7 +256,7 @@ class YamlInterpreter(object): ids = [self.get_id(xml_id) for xml_id in expression] value= [(6, 0, ids)] else: # scalar field - if isinstance(expression, Eval): + if isinstance(expression, yaml_tag.Eval): value = eval(expression.expression) else: value = expression diff --git a/bin/tools/yaml_tag.py b/bin/tools/yaml_tag.py new file mode 100644 index 00000000000..0a5286882ed --- /dev/null +++ b/bin/tools/yaml_tag.py @@ -0,0 +1,157 @@ +import yaml +import logging + +class YamlTag(object): + """ + Superclass for constructors of custom tags defined in yaml file. + """ + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + def __getitem__(self, key): + return getattr(self, key) + def __getattr__(self, attr): + return None + def __repr__(self): + return "<%s %s>" % (self.__class__.__name__, sorted(self.__dict__.items())) + +class Assert(YamlTag): + def __init__(self, model, id, severity=logging.ERROR, string="NONAME", **kwargs): + self.model = model + self.id = id + self.severity = severity + self.string = string + super(Assert, self).__init__(**kwargs) + +class Record(YamlTag): + def __init__(self, model, id, **kwargs): + self.model = model + self.id = id + super(Record, self).__init__(**kwargs) + +class Python(YamlTag): + def __init__(self, model, severity=logging.ERROR, name="", **kwargs): + self.model= model + self.severity = severity + self.name = name + super(Python, self).__init__(**kwargs) + +class Menuitem(YamlTag): + def __init__(self, id, name, **kwargs): + self.id = id + self.name = name + super(Menuitem, self).__init__(**kwargs) + +class Workflow(YamlTag): + def __init__(self, model, action, **kwargs): + self.model = model + self.action = action + super(Workflow, self).__init__(**kwargs) + +class ActWindow(YamlTag): + def __init__(self, model, action, **kwargs): + self.model = model + self.action = action + super(ActWindow, self).__init__(**kwargs) + +class Function(YamlTag): + def __init__(self, model, name, **kwargs): + self.model = model + self.name = name + super(Function, self).__init__(**kwargs) + +class Report(YamlTag): + def __init__(self, model, name, string, **kwargs): + self.model = model + self.name = name + self.string = string + super(Report, self).__init__(**kwargs) + +class Delete(YamlTag): + def __init__(self, model, id, search, **kwargs): + self.model = model + self.id = id + self.search = search + super(Delete, self).__init__(**kwargs) + +class Context(YamlTag): + def __init__(self, **kwargs): + super(Context, self).__init__(**kwargs) + +class Url(YamlTag): + def __init__(self, **kwargs): + super(Url, self).__init__(**kwargs) + +class Eval(YamlTag): + def __init__(self, expression): + self.expression = expression + super(Eval, self).__init__() + +class IrSet(YamlTag): + def __init__(self): + super(IrSet, self).__init__() + +def assert_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Assert(**kwargs) + +def record_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Record(**kwargs) + +def python_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Python(**kwargs) + +def menuitem_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Menuitem(**kwargs) + +def workflow_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Workflow(**kwargs) + +def act_window_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return ActWindow(**kwargs) + +def function_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Function(**kwargs) + +def report_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Report(**kwargs) + +def delete_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Delete(**kwargs) + +def context_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Context(**kwargs) + +def url_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return Url(**kwargs) + +def eval_constructor(loader, node): + expression = loader.construct_scalar(node) + return Eval(expression) + +def ir_set_constructor(loader, node): + kwargs = loader.construct_mapping(node) + return IrSet(**kwargs) + +yaml.add_constructor(u"!assert", assert_constructor) +yaml.add_constructor(u"!record", record_constructor) +yaml.add_constructor(u"!python", python_constructor) +yaml.add_constructor(u"!menuitem", menuitem_constructor) +yaml.add_constructor(u"!workflow", workflow_constructor) +yaml.add_constructor(u"!act_window", act_window_constructor) +yaml.add_constructor(u"!function", function_constructor) +yaml.add_constructor(u"!report", report_constructor) +yaml.add_constructor(u"!context", context_constructor) +yaml.add_constructor(u"!delete", delete_constructor) +yaml.add_constructor(u"!url", url_constructor) +yaml.add_constructor(u"!eval", eval_constructor) +yaml.add_constructor(u"!ir_set", ir_set_constructor)