From 44a11226fe23c693c65036f8a94ba70bad154bcf Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Sat, 28 Nov 2009 11:48:10 +0100 Subject: [PATCH] [IMP] improve usage of the ET API, use SubElement instead of Element/append, kwarg attributes setting instead of node.set bzr revid: xmo@tinyerp.com-20091128104810-52uhz28fiw53joaz --- bin/report/custom.py | 54 ++++++++------------------ bin/report/print_xml.py | 27 +++++-------- bin/report/printscreen/ps_form.py | 24 ++++-------- bin/report/printscreen/ps_list.py | 44 ++++++--------------- bin/report/render/rml2html/rml2html.py | 10 ++--- 5 files changed, 50 insertions(+), 109 deletions(-) diff --git a/bin/report/custom.py b/bin/report/custom.py index c773de3ffaf..bb1b32c0e43 100644 --- a/bin/report/custom.py +++ b/bin/report/custom.py @@ -287,12 +287,11 @@ class report_custom(report_int): new_doc = etree.Element('report') - config = etree.Element('config') + config = etree.SubElement(new_doc, 'config') def _append_node(name, text): - n = etree.Element(name) + n = etree.SubElement(config, name) t.text = text - config.append(n) _append_node('date', time.strftime('%d/%m/%Y')) _append_node('PageFormat', '%s' % report['print_format']) @@ -312,36 +311,28 @@ class report_custom(report_int): _append_node('report-header', '%s' % (report['title'],)) _append_node('report-footer', '%s' % (report['footer'],)) - new_doc.append(config) - header = etree.Element('header') - + header = etree.SubElement(new_doc, 'header') for f in fields: - field = etree.Element('field') + field = etree.SubElement(header, 'field') field.text = f['name'] - header.append(field) - new_doc.append(header) - lines = etree.Element('lines') + lines = etree.SubElement(new_doc, 'lines') level.reverse() for line in results: shift = level.pop() - node_line = etree.Element('row') + node_line = etree.SubElement(lines, 'row') prefix = '+' for f in range(len(fields)): - col = etree.Element('col') + col = etree.SubElement(node_line, 'col') if f == 0: - col.set('para','yes') - col.set('tree','yes') - col.set('space',str(3*shift)+'mm') + col.attrib.update(para='yes', + tree='yes', + space=str(3*shift)+'mm') if line[f] != None: col.text = prefix+str(line[f]) or '' else: col.text = '/' - node_line.append(col) prefix = '' - lines.append(node_line) - - new_doc.append(lines) transform = etree.XSLT( etree.parse(os.path.join(tools.config['root_path'], @@ -584,12 +575,11 @@ class report_custom(report_int): pageSize=[pageSize[1],pageSize[0]] new_doc = etree.Element('report') - config = etree.Element('config') + config = etree.SubElement(new_doc, 'config') def _append_node(name, text): - n = etree.Element(name) + n = etree.SubElement(config, name) n.text = text - config.appendChild(n) _append_node('date', time.strftime('%d/%m/%Y')) _append_node('PageSize', '%.2fmm,%.2fmm' % tuple(pageSize)) @@ -609,30 +599,20 @@ class report_custom(report_int): _append_node('report-header', '%s' % (report['title'],)) _append_node('report-footer', '%s' % (report['footer'],)) - new_doc.append(config) - header = etree.Element("header") - + header = etree.SubElement(new_doc, 'header') for f in fields: - field = etree.Element("field") + field = etree.SubElement(header, 'field') field.text = f['name'] - header.append(field) - - new_doc.append(header) - lines = etree.Element("lines") + lines = etree.SubElement(new_doc, 'lines') for line in results: - node_line = etree.Element("row") + node_line = etree.SubElement(lines, 'row') for f in range(len(fields)): - col = etree.Element("col") - col.set('tree','no') + col = etree.SubElement(node_line, 'col', tree='no') if line[f] != None: col.text = line[f] or '' else: col.text = '/' - node_line.appendChild(col) - lines.append(node_line) - - new_doc.append(lines) transform = etree.XSLT( etree.parse(os.path.join(tools.config['root_path'], diff --git a/bin/report/print_xml.py b/bin/report/print_xml.py index 912fdad00a3..9eb038e7463 100644 --- a/bin/report/print_xml.py +++ b/bin/report/print_xml.py @@ -122,8 +122,7 @@ class document(object): #TODO: test this if value == '' and 'default' in attrs: value = attrs['default'] - el = etree.Element(node.tag) - parent.append(el) + el = etree.SubElement(parent, node.tag) el.text = tounicode(value) #TODO: test this for key, value in attrs.iteritems(): @@ -155,31 +154,27 @@ class document(object): fp.write(dt) i = str(len(self.bin_datas)) self.bin_datas[i] = fp - el = etree.Element(node.tag) + el = etree.SubElement(parent, node.tag) el.text = i - parent.append(el) elif attrs['type']=='data': #TODO: test this txt = self.datas.get('form', {}).get(attrs['name'], '') - el = etree.Element(node.tag) + el = etree.SubElement(parent, node.tag) el.text = txt - parent.append(el) elif attrs['type']=='function': if attrs['name'] in self.func: txt = self.func[attrs['name']](node) else: txt = print_fnc.print_fnc(attrs['name'], node) - el = etree.Element(node.tag) + el = etree.SubElement(parent, node.tag) el.text = txt - parent.append(el) elif attrs['type']=='eval': value = self.eval(browser, attrs['expr']) - el = etree.Element(node.tag) + el = etree.SubElement(parent, node.tag) el.text = str(value) - parent.append(el) elif attrs['type']=='fields': fields = attrs['name'].split(',') @@ -197,8 +192,7 @@ class document(object): v_list = [vals[k] for k in keys] for v in v_list: - el = etree.Element(node.tag) - parent.append(el) + el = etree.SubElement(parent, node.tag) for el_cld in node: self.parse_node(el_cld, el, v) @@ -232,8 +226,7 @@ class document(object): def parse_result_tree(node, parent, datas): if not node.tag == etree.Comment: - el = etree.Element(node.tag) - parent.append(el) + el = etree.SubElement(parent, node.tag) atr = self.node_attrs_get(node) if 'value' in atr: if not isinstance(datas[atr['value']], (str, unicode)): @@ -257,8 +250,7 @@ class document(object): else: v_list = value for v in v_list: - el = etree.Element(node.tag) - parent.append(el) + el = etree.SubElement(parent, node.tag) for el_cld in node: self.parse_node(el_cld, el, v) else: @@ -267,8 +259,7 @@ class document(object): if node.tag == parent.tag: el = parent else: - el = etree.Element(node.tag) - parent.append(el) + el = etree.SubElement(parent, node.tag) for el_cld in node: self.parse_node(el_cld,el, browser) def xml_get(self): diff --git a/bin/report/printscreen/ps_form.py b/bin/report/printscreen/ps_form.py index ca848ac6521..5e2c7285206 100644 --- a/bin/report/printscreen/ps_form.py +++ b/bin/report/printscreen/ps_form.py @@ -77,19 +77,17 @@ class report_printscreen_list(report_int): pageSize=[297.0,210.0] new_doc = etree.Element("report") - config = etree.Element("config") + config = etree.SubElement(new_doc, 'config') # build header def _append_node(name, text): - n = etree.Element(name) + n = etree.SubElement(config, name) n.text = text - config.append(n) _append_node('date', time.strftime('%d/%m/%Y')) _append_node('PageSize', '%.2fmm,%.2fmm' % tuple(pageSize)) _append_node('PageWidth', '%.2f' % (pageSize[0] * 2.8346,)) _append_node('PageHeight', '%.2f' %(pageSize[1] * 2.8346,)) - _append_node('report-header', title) l = [] @@ -108,17 +106,15 @@ class report_printscreen_list(report_int): s = fields[fields_order[pos]].get('size', 56) / 28 + 1 l[pos] = strmax * s / t _append_node('tableSize', ','.join(map(str,l)) ) - new_doc.append(config) - header=etree.Element("header") + header = etree.SubElement(new_doc, 'header') for f in fields_order: - field = etree.Element("field") + field = etree.SubElement(header, 'field') field.text = fields[f]['string'] or '' - header.append(field) - new_doc.append(header) - lines = etree.Element("lines") + + lines = etree.SubElement(new_doc, 'lines') for line in results: - node_line = etree.Element("row") + node_line = etree.SubElement(lines, 'row') for f in fields_order: if fields[f]['type']=='many2one' and line[f]: line[f] = line[f][1] @@ -127,15 +123,11 @@ class report_printscreen_list(report_int): if fields[f]['type'] == 'float': precision=(('digits' in fields[f]) and fields[f]['digits'][1]) or 2 line[f]=round(line[f],precision) - col = etree.Element("col") - col.set('tree','no') + col = etree.SubElement(node_line, 'col', tree='no') if line[f] != None: col.text = tools.ustr(line[f] or '') else: col.text = '/' - node_line.append(col) - lines.append(node_line) - new_doc.append(node_line) transform = etree.XSLT( etree.parse(os.path.join(tools.config['root_path'], diff --git a/bin/report/printscreen/ps_list.py b/bin/report/printscreen/ps_list.py index e20262a7897..744c2d21709 100644 --- a/bin/report/printscreen/ps_list.py +++ b/bin/report/printscreen/ps_list.py @@ -89,30 +89,28 @@ class report_printscreen_list(report_int): def _create_table(self, uid, ids, fields, fields_order, results, context, title=''): pageSize=[297.0, 210.0] - new_doc = etree.Element("report") - config = etree.Element("config") - # build header + new_doc = etree.Element("report") + config = etree.SubElement(new_doc, 'config') def _append_node(name, text): - n = etree.Element(name) + n = etree.SubElement(config, name) n.text = text - config.append(n) #_append_node('date', time.strftime('%d/%m/%Y')) _append_node('date', time.strftime(str(locale.nl_langinfo(locale.D_FMT).replace('%y', '%Y')))) _append_node('PageSize', '%.2fmm,%.2fmm' % tuple(pageSize)) _append_node('PageWidth', '%.2f' % (pageSize[0] * 2.8346,)) _append_node('PageHeight', '%.2f' %(pageSize[1] * 2.8346,)) - _append_node('report-header', title) + l = [] t = 0 rowcount=0; strmax = (pageSize[0]-40) * 2.8346 temp = [] count = len(fields_order) - for i in range(0,count): + for i in range(0, count): temp.append(0) ince = -1; @@ -134,24 +132,20 @@ class report_printscreen_list(report_int): l[pos] = strmax * s / t _append_node('tableSize', ','.join(map(str,l)) ) - new_doc.append(config) - header=etree.Element("header") - + header = etree.SubElement(new_doc, 'header') for f in fields_order: - field = etree.Element("field") + field = etree.SubElement(header, 'field') field.text = tools.ustr(fields[f]['string'] or '') - header.append(field) - new_doc.append(header) - lines = etree.Element("lines") + lines = etree.SubElement(new_doc, 'lines') tsum = [] count = len(fields_order) for i in range(0,count): tsum.append(0) for line in results: - node_line = etree.Element("row") + node_line = etree.SubElement(lines, 'row') count = -1 for f in fields_order: float_flag = 0 @@ -193,28 +187,19 @@ class report_printscreen_list(report_int): new_d1 = d1.strftime(format) line[f] = new_d1 - col = etree.Element("col") - col.set('para','yes') - col.set('tree','no') + col = etree.SubElement(node_line, 'col', para='yes', tree='no') if line[f] != None: col.text = tools.ustr(line[f] or '') if float_flag: col.set('tree','float') if temp[count] == 1: tsum[count] = float(tsum[count]) + float(line[f]); - - else: col.text = '/' - node_line.append(col) - lines.append(node_line) - node_line = etree.Element("row") - lines.append(node_line) + node_line = etree.SubElement(lines, 'row') for f in range(0,count+1): - col = etree.Element("col") - col.set('para','yes') - col.set('tree','no') + col = etree.SubElement(node_line, 'col', para='yes', tree='no') if tsum[f] != None: if tsum[f] >= 0.01 : prec = '%.' + str(tools.config['price_accuracy']) + 'f' @@ -229,11 +214,6 @@ class report_printscreen_list(report_int): txt ='Total' col.text = tools.ustr(txt or '') - node_line.append(col) - - lines.append(node_line) - - new_doc.append(lines) transform = etree.XSLT( etree.parse(os.path.join(tools.config['root_path'], diff --git a/bin/report/render/rml2html/rml2html.py b/bin/report/render/rml2html/rml2html.py index 5e7bb5cf4e9..ea2a5583250 100644 --- a/bin/report/render/rml2html/rml2html.py +++ b/bin/report/render/rml2html/rml2html.py @@ -104,12 +104,10 @@ class _flowable(object): process(node,new_node) if new_node.get('colWidths',False): sizes = map(lambda x: utils.unit_get(x), new_node.get('colWidths').split(',')) - tr = etree.Element('tr') + tr = etree.SubElement(new_node, 'tr') for s in sizes: - td = etree.Element('td') - td.set("width", str(s)) - tr.append(td) - new_node.append(tr) + etree.SubElement(tr, 'td', width=str(s)) + return etree.tostring(new_node) def _tag_para(self, node): @@ -458,4 +456,4 @@ if __name__=="__main__": print 'Usage: trml2pdf input.rml >output.pdf' print 'Try \'trml2pdf --help\' for more information.' -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: