~openerp-dev/openobject-server/trunk-missing-default-values-pza

« back to all changes in this revision

Viewing changes to openerp/addons/base/ir/ir_qweb.py

  • Committer: Antony Lesuisse
  • Date: 2014-01-31 01:08:02 UTC
  • mto: This revision was merged to the branch mainline in revision 5025.
  • Revision ID: al@openerp.com-20140131010802-5zh9m5jc1ajnp5wj
[REV] never change exceptions types

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#--------------------------------------------------------------------
25
25
# QWeb template engine
26
26
#--------------------------------------------------------------------
 
27
 
27
28
class QWebException(Exception):
28
 
    def __init__(self, message, **kw):
 
29
    def __init__(self, message, template=None, node=None, expression=None, inner=None):
29
30
        Exception.__init__(self, message)
30
 
        self.qweb = dict(kw)
 
31
        self.template = template
 
32
        self.node = node
 
33
        self.expression = expression
 
34
        self.inner = inner
31
35
 
32
36
class QWebTemplateNotFound(QWebException):
33
37
    pass
34
38
 
35
 
def convert_to_qweb_exception(etype=None, **kw):
36
 
    if etype is None:
37
 
        etype = QWebException
38
 
    orig_type, original, tb = sys.exc_info()
39
 
    try:
40
 
        raise etype, original, tb
41
 
    except etype, e:
42
 
        for k, v in kw.items():
43
 
            e.qweb[k] = v
44
 
        e.qweb['inner'] = original
45
 
        return e
46
 
 
47
39
class QWebContext(dict):
48
40
    def __init__(self, cr, uid, data, loader=None, templates=None, context=None):
49
41
        self.cr = cr
164
156
        if qwebcontext.loader and name not in qwebcontext.templates:
165
157
            try:
166
158
                xml_doc = qwebcontext.loader(name)
167
 
            except ValueError:
168
 
                raise convert_to_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template)
 
159
            except ValueError, e:
 
160
                raise QWebTemplateNotFound("Loader could not find template %r" % name, template=origin_template, inner=e)
169
161
            self.load_document(xml_doc, qwebcontext=qwebcontext)
170
162
 
171
163
        if name in qwebcontext.templates:
172
164
            return qwebcontext.templates[name]
173
165
 
174
 
        raise convert_to_qweb_exception(QWebTemplateNotFound, message="Template %r not found" % name, template=origin_template)
 
166
        raise QWebTemplateNotFound("Template %r not found" % name, template=origin_template)
175
167
 
176
168
    def eval(self, expr, qwebcontext):
177
169
        try:
178
170
            return qwebcontext.safe_eval(expr)
179
 
        except Exception:
 
171
        except Exception, e:
180
172
            template = qwebcontext.get('__template__')
181
 
            raise convert_to_qweb_exception(message="Could not evaluate expression %r" % expr, expression=expr, template=template)
 
173
            raise QWebException("Could not evaluate expression %r" % expr, expression=expr, template=template, inner=e)
182
174
 
183
175
    def eval_object(self, expr, qwebcontext):
184
176
        return self.eval(expr, qwebcontext)
204
196
 
205
197
        try:
206
198
            return str(expr % qwebcontext)
207
 
        except Exception:
 
199
        except Exception, e:
208
200
            template = qwebcontext.get('__template__')
209
 
            raise convert_to_qweb_exception(message="Format error for expression %r" % expr, expression=expr, template=template)
 
201
            raise QWebException("Format error for expression %r" % expr, expression=expr, template=template, inner=e)
210
202
 
211
203
    def eval_bool(self, expr, qwebcontext):
212
204
        return int(bool(self.eval(expr, qwebcontext)))
289
281
                    g_inner.append(self.render_node(current_node, qwebcontext))
290
282
                except QWebException:
291
283
                    raise
292
 
                except Exception:
 
284
                except Exception, e:
293
285
                    template = qwebcontext.get('__template__')
294
 
                    raise convert_to_qweb_exception(message="Could not render element %r" % element.nodeName, node=element, template=template)
 
286
                    raise QWebException("Could not render element %r -- %s" % (element.nodeName, e.message), node=element, template=template, inner=e), None, sys.exc_info()[2]
295
287
        name = str(element.nodeName)
296
288
        inner = "".join(g_inner)
297
289
        trim = template_attributes.get("trim", 0)