-# -*- encoding: utf-8 -*-
+# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
from lxml import etree
import netsvc
import tools
+from tools.safe_eval import safe_eval
import print_fnc
import copy
from osv.orm import browse_null, browse_record
#Pinky: Why not this ? eval(expr, browser) ?
# name = browser.name
# data_dict = browser._data[self.get_value(browser, 'id')]
- return eval(expr, {}, {'obj': record})
+ return safe_eval(expr, {}, {'obj': record})
def parse_node(self, node, parent, browser, datas=None):
attrs = self.node_attrs_get(node)
#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():
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(',')
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)
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)):
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:
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):