[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
This commit is contained in:
Xavier Morel
2009-11-28 11:48:10 +01:00
parent ce28b92c9e
commit 44a11226fe
5 changed files with 50 additions and 109 deletions
+17 -37
View File
@@ -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'],
+9 -18
View File
@@ -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):
+8 -16
View File
@@ -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'],
+12 -32
View File
@@ -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'],
+4 -6
View File
@@ -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:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: