[FIX] Export & Synchronize Translations Corrected
[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.WARNING, 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.WARNING, 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, **kwargs):
52         super(ActWindow, self).__init__(**kwargs)
53
54 class Function(YamlTag):
55     def __init__(self, model, name, **kwargs):
56         self.model = model
57         self.name = name
58         super(Function, self).__init__(**kwargs)
59
60 class Report(YamlTag):
61     def __init__(self, model, name, string, **kwargs):
62         self.model = model
63         self.name = name
64         self.string = string
65         super(Report, self).__init__(**kwargs)
66
67 class Delete(YamlTag):
68     def __init__(self, **kwargs):
69         super(Delete, self).__init__(**kwargs)
70
71 class Context(YamlTag):
72     def __init__(self, **kwargs):
73         super(Context, self).__init__(**kwargs)
74
75 class Url(YamlTag):
76     def __init__(self, **kwargs):
77         super(Url, self).__init__(**kwargs)
78
79 class Eval(YamlTag):
80     def __init__(self, expression):
81         self.expression = expression
82         super(Eval, self).__init__()
83     
84 class Ref(YamlTag):
85     def __init__(self, *args, **kwargs):
86         super(Ref, self).__init__(*args, **kwargs)
87     
88 class IrSet(YamlTag):
89     def __init__(self):
90         super(IrSet, self).__init__()
91
92 def assert_constructor(loader, node):
93     kwargs = loader.construct_mapping(node)
94     return Assert(**kwargs)
95
96 def record_constructor(loader, node):
97     kwargs = loader.construct_mapping(node)
98     return Record(**kwargs)
99
100 def python_constructor(loader, node):
101     kwargs = loader.construct_mapping(node)
102     return Python(**kwargs)
103
104 def menuitem_constructor(loader, node):
105     kwargs = loader.construct_mapping(node)
106     return Menuitem(**kwargs)
107
108 def workflow_constructor(loader, node):
109     kwargs = loader.construct_mapping(node)
110     return Workflow(**kwargs)
111
112 def act_window_constructor(loader, node):
113     kwargs = loader.construct_mapping(node)
114     return ActWindow(**kwargs)
115
116 def function_constructor(loader, node):
117     kwargs = loader.construct_mapping(node)
118     return Function(**kwargs)
119
120 def report_constructor(loader, node):
121     kwargs = loader.construct_mapping(node)
122     return Report(**kwargs)
123
124 def delete_constructor(loader, node):
125     kwargs = loader.construct_mapping(node)
126     return Delete(**kwargs)
127
128 def context_constructor(loader, node):
129     kwargs = loader.construct_mapping(node)
130     return Context(**kwargs)
131
132 def url_constructor(loader, node):
133     kwargs = loader.construct_mapping(node)
134     return Url(**kwargs)
135
136 def eval_constructor(loader, node):
137     expression = loader.construct_scalar(node)
138     return Eval(expression)
139     
140 def ref_constructor(loader, tag_suffix, node):
141     if tag_suffix == "id":
142         kwargs = {"id": loader.construct_scalar(node)}
143     else:
144         kwargs = loader.construct_mapping(node)
145     return Ref(**kwargs)
146     
147 def ir_set_constructor(loader, node):
148     kwargs = loader.construct_mapping(node)
149     return IrSet(**kwargs)
150     
151 # Registers constructors for custom tags.
152 # Constructors are actually defined globally: do not redefined them in another
153 # class/file/package.  This means that module recorder need import this file.
154 def add_constructors():
155     yaml.add_constructor(u"!assert", assert_constructor)
156     yaml.add_constructor(u"!record", record_constructor)
157     yaml.add_constructor(u"!python", python_constructor)
158     yaml.add_constructor(u"!menuitem", menuitem_constructor)
159     yaml.add_constructor(u"!workflow", workflow_constructor)
160     yaml.add_constructor(u"!act_window", act_window_constructor)
161     yaml.add_constructor(u"!function", function_constructor)
162     yaml.add_constructor(u"!report", report_constructor)
163     yaml.add_constructor(u"!context", context_constructor)
164     yaml.add_constructor(u"!delete", delete_constructor)
165     yaml.add_constructor(u"!url", url_constructor)
166     yaml.add_constructor(u"!eval", eval_constructor)
167     yaml.add_multi_constructor(u"!ref", ref_constructor)
168     yaml.add_constructor(u"!ir_set", ir_set_constructor)
169 add_constructors()