From f566d20c74de365020ea06ec581ced85d14b8484 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Thu, 23 Jan 2014 13:46:51 +0100 Subject: [PATCH] [REF] Replace g_att -> generated_att, t_att template_att, an -> att_name, av -> att_value, v = qcontext bzr revid: stw@openerp.com-20140123124651-wi4l32q0x4cy5o6s --- openerp/addons/base/ir/ir_qweb.py | 326 +++++++++++++++--------------- 1 file changed, 163 insertions(+), 163 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 77a3c8435d6..c0b68d463b3 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -116,30 +116,32 @@ class QWeb(orm.AbstractModel): :param str prefix: :return: dict """ + n_prefix = len(prefix) return dict( - (name[len(prefix):].replace('_', '-'), getattr(type(self), name)) + (name[n_prefix:].replace('_', '-'), getattr(type(self), name)) for name in dir(self) - if name.startswith(prefix)) + if name.startswith(prefix) + ) def register_tag(self, tag, func): self._render_tag[tag] = func - def load_document(self, x, qcontext): + def load_document(self, document, qcontext): """ Loads an XML document and installs any contained template in the engine """ - if hasattr(x, 'documentElement'): - dom = x - elif x.startswith("%s" % tuple( - v if isinstance(v, str) else v.encode('utf-8') - for v in (name, g_att, inner, name)) + qwebcontext if isinstance(qwebcontext, str) else qwebcontext.encode('utf-8') + for qwebcontext in (name, generated_attributes, inner, name) + ) else: - return "<%s%s/>" % (name, g_att) + return "<%s%s/>" % (name, generated_attributes) # Attributes - def render_att_att(self, e, an, av, v): - if an.startswith("t-attf-"): - att, val = an[7:], self.eval_format(av, v) - elif an.startswith("t-att-"): - att, val = an[6:], self.eval(av, v) + def render_att_att(self, element, attribute_name, attribute_value, qwebcontext): + if attribute_name.startswith("t-attf-"): + att, val = attribute_name[7:], self.eval_format(attribute_value, qwebcontext) + elif attribute_name.startswith("t-att-"): + att, val = attribute_name[6:], self.eval(attribute_value, qwebcontext) if isinstance(val, unicode): val = val.encode("utf8") else: - att, val = self.eval_object(av, v) + att, val = self.eval_object(attribute_value, qwebcontext) return val and ' %s="%s"' % (att, werkzeug.utils.escape(val)) or " " - def render_att_href(self, e, an, av, v): - return self.url_for(e, an, av, v) + def render_att_href(self, element, attribute_name, attribute_value, qwebcontext): + return self.url_for(element, attribute_name, attribute_value, qwebcontext) - def render_att_src(self, e, an, av, v): - return self.url_for(e, an, av, v) + def render_att_src(self, element, attribute_name, attribute_value, qwebcontext): + return self.url_for(element, attribute_name, attribute_value, qwebcontext) - def render_att_action(self, e, an, av, v): - return self.url_for(e, an, av, v) + def render_att_action(self, element, attribute_name, attribute_value, qwebcontext): + return self.url_for(element, attribute_name, attribute_value, qwebcontext) - def url_for(self, e, an, av, v): - if 'url_for' not in v: + def url_for(self, element, attribute_name, attribute_value, qwebcontext): + if 'url_for' not in qwebcontext: raise KeyError("qweb: no 'url_for' found in context") # Temporary implementation of t-keep-query until qweb py v2 - keep_query = e.attributes.get('t-keep-query') + keep_query = element.attributes.get('t-keep-query') if keep_query: - params = self.eval_format(keep_query.value, v) + params = self.eval_format(keep_query.value, qwebcontext) keep_query = [q.strip() for q in params.split(',')] - path = str(v['url_for'](self.eval_format(av, v), keep_query=keep_query)) - return ' %s="%s"' % (an[2:], werkzeug.utils.escape(path)) + path = str(qwebcontext['url_for'](self.eval_format(attribute_value, qwebcontext), keep_query=keep_query)) + return ' %s="%s"' % (attribute_name[2:], werkzeug.utils.escape(path)) # Tags - def render_tag_raw(self, e, t_att, g_att, v): - inner = self.eval_str(t_att["raw"], v) - return self.render_element(e, t_att, g_att, v, inner) + def render_tag_raw(self, element, template_attributes, generated_attributes, qwebcontext): + inner = self.eval_str(template_attributes["raw"], qwebcontext) + return self.render_element(element, template_attributes, generated_attributes, qwebcontext, inner) - def render_tag_esc(self, e, t_att, g_att, v): - inner = werkzeug.utils.escape(self.eval_str(t_att["esc"], v)) - return self.render_element(e, t_att, g_att, v, inner) + def render_tag_esc(self, element, template_attributes, generated_attributes, qwebcontext): + inner = werkzeug.utils.escape(self.eval_str(template_attributes["esc"], qwebcontext)) + return self.render_element(element, template_attributes, generated_attributes, qwebcontext, inner) - def render_tag_foreach(self, e, t_att, g_att, v): - expr = t_att["foreach"] - enum = self.eval_object(expr, v) + def render_tag_foreach(self, element, template_attributes, generated_attributes, qwebcontext): + expr = template_attributes["foreach"] + enum = self.eval_object(expr, qwebcontext) if enum is not None: - var = t_att.get('as', expr).replace('.', '_') - d = v.copy() + var = template_attributes.get('as', expr).replace('.', '_') + copy_qwebcontext = qwebcontext.copy() size = -1 if isinstance(enum, (list, tuple)): size = len(enum) elif hasattr(enum, 'count'): size = enum.count() - d["%s_size" % var] = size - d["%s_all" % var] = enum + copy_qwebcontext["%s_size" % var] = size + copy_qwebcontext["%s_all" % var] = enum index = 0 ru = [] for i in enum: - d["%s_value" % var] = i - d["%s_index" % var] = index - d["%s_first" % var] = index == 0 - d["%s_even" % var] = index % 2 - d["%s_odd" % var] = (index + 1) % 2 - d["%s_last" % var] = index + 1 == size + copy_qwebcontext["%s_value" % var] = i + copy_qwebcontext["%s_index" % var] = index + copy_qwebcontext["%s_first" % var] = index == 0 + copy_qwebcontext["%s_even" % var] = index % 2 + copy_qwebcontext["%s_odd" % var] = (index + 1) % 2 + copy_qwebcontext["%s_last" % var] = index + 1 == size if index % 2: - d["%s_parity" % var] = 'odd' + copy_qwebcontext["%s_parity" % var] = 'odd' else: - d["%s_parity" % var] = 'even' - if 'as' in t_att: - d[var] = i + copy_qwebcontext["%s_parity" % var] = 'even' + if 'as' in template_attributes: + copy_qwebcontext[var] = i elif isinstance(i, dict): - d.update(i) - ru.append(self.render_element(e, t_att, g_att, d)) + copy_qwebcontext.update(i) + ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext)) index += 1 return "".join(ru) else: - template = v.get('__template__') - e = NameError("QWeb: foreach enumerator %r is not defined while rendering template %r" % (expr, template)) - e.qweb_template = template - raise e + template = qwebcontext.get('__template__') + exception_to_raise = NameError("QWeb: foreach enumerator %r is not defined while rendering template %r" % (expr, template)) + exception_to_raise.qweb_template = template + raise exception_to_raise - def render_tag_if(self, e, t_att, g_att, v): - if self.eval_bool(t_att["if"], v): - return self.render_element(e, t_att, g_att, v) - else: - return "" - - def render_tag_call(self, e, t_att, g_att, v): - d = v.copy() - d[0] = self.render_element(e, t_att, g_att, d) - - return self.render(None, None, self.eval_format(t_att["call"], d), d) - - def render_tag_set(self, e, t_att, g_att, v): - if "value" in t_att: - v[t_att["set"]] = self.eval_object(t_att["value"], v) - elif "valuef" in t_att: - v[t_att["set"]] = self.eval_format(t_att["valuef"], v) - else: - v[t_att["set"]] = self.render_element(e, t_att, g_att, v) + def render_tag_if(self, element, template_attributes, generated_attributes, qwebcontext): + if self.eval_bool(template_attributes["if"], qwebcontext): + return self.render_element(element, template_attributes, generated_attributes, qwebcontext) return "" - def render_tag_field(self, e, t_att, g_att, v): + def render_tag_call(self, element, template_attributes, generated_attributes, qwebcontext): + d = qwebcontext.copy() + d[0] = self.render_element(element, template_attributes, generated_attributes, d) + + return self.render(None, None, self.eval_format(template_attributes["call"], d), d) + + def render_tag_set(self, element, template_attributes, generated_attributes, qwebcontext): + if "value" in template_attributes: + qwebcontext[template_attributes["set"]] = self.eval_object(template_attributes["value"], qwebcontext) + elif "valuef" in template_attributes: + qwebcontext[template_attributes["set"]] = self.eval_format(template_attributes["valuef"], qwebcontext) + else: + qwebcontext[template_attributes["set"]] = self.render_element(element, template_attributes, generated_attributes, qwebcontext) + return "" + + def render_tag_field(self, element, template_attributes, generated_attributes, qwebcontext): """ eg: +1 555 555 8069""" - node_name = e.nodeName + node_name = element.nodeName assert node_name not in ("table", "tbody", "thead", "tfoot", "tr", "td", "li", "ul", "ol", "dl", "dt", "dd"),\ "RTE widgets do not work correctly on %r elements" % node_name assert node_name != 't',\ "t-field can not be used on a t element, provide an actual HTML node" - record, field_name = t_att["field"].rsplit('.', 1) - record = self.eval_object(record, v) + record, field_name = template_attributes["field"].rsplit('.', 1) + record = self.eval_object(record, qwebcontext) column = record._model._all_columns[field_name].column - options = json.loads(t_att.get('field-options') or '{}') + options = json.loads(template_attributes.get('field-options') or '{}') field_type = get_field_type(column, options) converter = self.get_converter_for(field_type) - return converter.to_html(v.cr, v.uid, field_name, record, options, - e, t_att, g_att, v, context=v.context) + return converter.to_html(qwebcontext.cr, qwebcontext.uid, field_name, record, options, + element, template_attributes, generated_attributes, qwebcontext, context=qwebcontext.context) def get_converter_for(self, field_type): return self.pool.get('ir.qweb.field.' + field_type,