[IMP] Removed print.
[odoo/odoo.git] / bin / tools / yaml_tag.py
1 import yaml
2 import logging
3
4 class YamlTag(object):
5     """
6     Superclass for constructors of custom tags defined in yaml file.
7     """
8     def __init__(self, **kwargs):
9         self.__dict__.update(kwargs)
10     def __getitem__(self, key):
11         return getattr(self, key)
12     def __getattr__(self, attr):
13         return None
14     def __repr__(self):
15         return "<%s %s>" % (self.__class__.__name__, sorted(self.__dict__.items()))
16
17 class Assert(YamlTag):
18     def __init__(self, model, id, severity=logging.ERROR, string="NONAME", **kwargs):
19         self.model = model
20         self.id = id
21         self.severity = severity
22         self.string = string
23         super(Assert, self).__init__(**kwargs)
24     
25 class Record(YamlTag):
26     def __init__(self, model, id, use='id', **kwargs):
27         self.model = model
28         self.id = id
29         super(Record, self).__init__(**kwargs)
30     
31 class Python(YamlTag):
32     def __init__(self, model, severity=logging.ERROR, name="", **kwargs):
33         self.model= model
34         self.severity = severity
35         self.name = name
36         super(Python, self).__init__(**kwargs)
37
38 class Menuitem(YamlTag):
39     def __init__(self, id, name, **kwargs):
40         self.id = id
41         self.name = name
42         super(Menuitem, self).__init__(**kwargs)
43
44 class Workflow(YamlTag):
45     def __init__(self, model, action, **kwargs):
46         self.model = model
47         self.action = action
48         super(Workflow, self).__init__(**kwargs)
49
50 class ActWindow(YamlTag):
51     def __init__(self, model, action, **kwargs):
52         self.model = model
53         self.action = action
54         super(ActWindow, self).__init__(**kwargs)
55
56 class Function(YamlTag):
57     def __init__(self, model, name, **kwargs):
58         self.model = model
59         self.name = name
60         super(Function, self).__init__(**kwargs)
61
62 class Report(YamlTag):
63     def __init__(self, model, name, string, **kwargs):
64         self.model = model
65         self.name = name
66         self.string = string
67         super(Report, self).__init__(**kwargs)
68
69 class Delete(YamlTag):
70     def __init__(self, model, id, search, **kwargs):
71         self.model = model
72         self.id = id
73         self.search = search
74         super(Delete, self).__init__(**kwargs)
75
76 class Context(YamlTag):
77     def __init__(self, **kwargs):
78         super(Context, self).__init__(**kwargs)
79
80 class Url(YamlTag):
81     def __init__(self, **kwargs):
82         super(Url, self).__init__(**kwargs)
83
84 class Eval(YamlTag):
85     def __init__(self, expression):
86         self.expression = expression
87         super(Eval, self).__init__()
88     
89 class Ref(YamlTag):
90     def __init__(self, *args, **kwargs):
91         super(Ref, self).__init__(*args, **kwargs)
92     
93 class IrSet(YamlTag):
94     def __init__(self):
95         super(IrSet, self).__init__()
96
97 def assert_constructor(loader, node):
98     kwargs = loader.construct_mapping(node)
99     return Assert(**kwargs)
100
101 def record_constructor(loader, node):
102     kwargs = loader.construct_mapping(node)
103     return Record(**kwargs)
104
105 def python_constructor(loader, node):
106     kwargs = loader.construct_mapping(node)
107     return Python(**kwargs)
108
109 def menuitem_constructor(loader, node):
110     kwargs = loader.construct_mapping(node)
111     return Menuitem(**kwargs)
112
113 def workflow_constructor(loader, node):
114     kwargs = loader.construct_mapping(node)
115     return Workflow(**kwargs)
116
117 def act_window_constructor(loader, node):
118     kwargs = loader.construct_mapping(node)
119     return ActWindow(**kwargs)
120
121 def function_constructor(loader, node):
122     kwargs = loader.construct_mapping(node)
123     return Function(**kwargs)
124
125 def report_constructor(loader, node):
126     kwargs = loader.construct_mapping(node)
127     return Report(**kwargs)
128
129 def delete_constructor(loader, node):
130     kwargs = loader.construct_mapping(node)
131     return Delete(**kwargs)
132
133 def context_constructor(loader, node):
134     kwargs = loader.construct_mapping(node)
135     return Context(**kwargs)
136
137 def url_constructor(loader, node):
138     kwargs = loader.construct_mapping(node)
139     return Url(**kwargs)
140
141 def eval_constructor(loader, node):
142     expression = loader.construct_scalar(node)
143     return Eval(expression)
144     
145 def ref_constructor(loader, tag_suffix, node):
146     if tag_suffix == "id":
147         kwargs = {"id": loader.construct_scalar(node)}
148     else:
149         kwargs = loader.construct_mapping(node)
150     return Ref(**kwargs)
151     
152 def ir_set_constructor(loader, node):
153     kwargs = loader.construct_mapping(node)
154     return IrSet(**kwargs)
155     
156 # Registers constructors for custom tags.
157 # Constructors are actually defined globally: do not redefined them in another
158 # class/file/package.  This means that module recorder need import this file.
159 yaml.add_constructor(u"!assert", assert_constructor)
160 yaml.add_constructor(u"!record", record_constructor)
161 yaml.add_constructor(u"!python", python_constructor)
162 yaml.add_constructor(u"!menuitem", menuitem_constructor)
163 yaml.add_constructor(u"!workflow", workflow_constructor)
164 yaml.add_constructor(u"!act_window", act_window_constructor)
165 yaml.add_constructor(u"!function", function_constructor)
166 yaml.add_constructor(u"!report", report_constructor)
167 yaml.add_constructor(u"!context", context_constructor)
168 yaml.add_constructor(u"!delete", delete_constructor)
169 yaml.add_constructor(u"!url", url_constructor)
170 yaml.add_constructor(u"!eval", eval_constructor)
171 yaml.add_multi_constructor(u"!ref", ref_constructor)
172 yaml.add_constructor(u"!ir_set", ir_set_constructor)