[IMP] reimplement t-field using new converters
bzr revid: xmo@openerp.com-20130926145126-21hlubvs39a0z68j
This commit is contained in:
parent
2707b17771
commit
c741c0eeb1
|
@ -475,11 +475,11 @@ class selection(_column):
|
||||||
|
|
||||||
translation_filter = "%s,%s" % (model._name, field_name)
|
translation_filter = "%s,%s" % (model._name, field_name)
|
||||||
translate = functools.partial(
|
translate = functools.partial(
|
||||||
(model.pool['ir.translation'])._get_source,
|
model.pool['ir.translation']._get_source,
|
||||||
cr, uid, translation_filter, 'selection', context['lang'])
|
cr, uid, translation_filter, 'selection', context['lang'])
|
||||||
|
|
||||||
return [
|
return [
|
||||||
(value, translate(source=label))
|
(value, translate(label))
|
||||||
for value, label in field.selection
|
for value, label in field.selection
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from collections import namedtuple
|
||||||
from xml.dom import minidom as dom
|
from xml.dom import minidom as dom
|
||||||
|
|
||||||
import common
|
import common
|
||||||
|
@ -8,6 +9,13 @@ from ..tools import qweb
|
||||||
impl = dom.getDOMImplementation()
|
impl = dom.getDOMImplementation()
|
||||||
document = impl.createDocument(None, None, None)
|
document = impl.createDocument(None, None, None)
|
||||||
|
|
||||||
|
Request = namedtuple('Request', 'cr uid registry')
|
||||||
|
class RegistryProxy(object):
|
||||||
|
def __init__(self, func):
|
||||||
|
self.func = func
|
||||||
|
def __getitem__(self, name):
|
||||||
|
return self.func(name)
|
||||||
|
|
||||||
class TestQWebTField(common.TransactionCase):
|
class TestQWebTField(common.TransactionCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestQWebTField, self).setUp()
|
super(TestQWebTField, self).setUp()
|
||||||
|
@ -23,7 +31,10 @@ class TestQWebTField(common.TransactionCase):
|
||||||
})
|
})
|
||||||
root_company = Companies.browse(self.cr, self.uid, company_id)
|
root_company = Companies.browse(self.cr, self.uid, company_id)
|
||||||
|
|
||||||
result = self.engine.render_node(field, {'company': root_company})
|
result = self.engine.render_node(field, {
|
||||||
|
'company': root_company,
|
||||||
|
'request': Request(self.cr, self.uid, RegistryProxy(self.registry))
|
||||||
|
})
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
result,
|
result,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import cgi
|
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
import werkzeug.utils
|
||||||
#from openerp.tools.safe_eval import safe_eval as eval
|
#from openerp.tools.safe_eval import safe_eval as eval
|
||||||
|
|
||||||
import xml # FIXME use lxml
|
import xml # FIXME use lxml
|
||||||
|
@ -183,7 +183,7 @@ class QWebXml(object):
|
||||||
t_render = an[2:]
|
t_render = an[2:]
|
||||||
t_att[an[2:]] = av
|
t_att[an[2:]] = av
|
||||||
else:
|
else:
|
||||||
g_att += ' %s="%s"' % (an, cgi.escape(av, 1))
|
g_att += ' %s="%s"' % (an, werkzeug.utils.escape(av))
|
||||||
|
|
||||||
if 'debug' in t_att:
|
if 'debug' in t_att:
|
||||||
debugger = t_att.get('debug', 'pdb')
|
debugger = t_att.get('debug', 'pdb')
|
||||||
|
@ -193,6 +193,8 @@ class QWebXml(object):
|
||||||
r = self._render_tag[t_render](self, e, t_att, g_att, v)
|
r = self._render_tag[t_render](self, e, t_att, g_att, v)
|
||||||
else:
|
else:
|
||||||
r = self.render_element(e, t_att, g_att, v)
|
r = self.render_element(e, t_att, g_att, v)
|
||||||
|
if isinstance(r, unicode):
|
||||||
|
return r.encode('utf-8')
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def render_element(self, e, t_att, g_att, v, inner=None):
|
def render_element(self, e, t_att, g_att, v, inner=None):
|
||||||
|
@ -235,7 +237,7 @@ class QWebXml(object):
|
||||||
val = val.encode("utf8")
|
val = val.encode("utf8")
|
||||||
else:
|
else:
|
||||||
att, val = self.eval_object(av, v)
|
att, val = self.eval_object(av, v)
|
||||||
return val and ' %s="%s"' % (att, cgi.escape(str(val), 1)) or " "
|
return val and ' %s="%s"' % (att, werkzeug.utils.escape(val)) or " "
|
||||||
|
|
||||||
def render_att_href(self, e, an, av, v):
|
def render_att_href(self, e, an, av, v):
|
||||||
return self.url_for(e, an, av, v)
|
return self.url_for(e, an, av, v)
|
||||||
|
@ -259,11 +261,11 @@ class QWebXml(object):
|
||||||
return self.render_element(e, t_att, g_att, v, inner)
|
return self.render_element(e, t_att, g_att, v, inner)
|
||||||
|
|
||||||
def render_tag_esc(self, e, t_att, g_att, v):
|
def render_tag_esc(self, e, t_att, g_att, v):
|
||||||
inner = cgi.escape(self.eval_str(t_att["esc"], v))
|
inner = werkzeug.utils.escape(self.eval_str(t_att["esc"], v))
|
||||||
return self.render_element(e, t_att, g_att, v, inner)
|
return self.render_element(e, t_att, g_att, v, inner)
|
||||||
|
|
||||||
def render_tag_escf(self, e, t_att, g_att, v):
|
def render_tag_escf(self, e, t_att, g_att, v):
|
||||||
inner = cgi.escape(self.eval_format(t_att["escf"], v))
|
inner = werkzeug.utils.escape(self.eval_format(t_att["escf"], v))
|
||||||
return self.render_element(e, t_att, g_att, v, inner)
|
return self.render_element(e, t_att, g_att, v, inner)
|
||||||
|
|
||||||
def render_tag_foreach(self, e, t_att, g_att, v):
|
def render_tag_foreach(self, e, t_att, g_att, v):
|
||||||
|
@ -336,32 +338,34 @@ class QWebXml(object):
|
||||||
record, field = t_att["field"].rsplit('.', 1)
|
record, field = t_att["field"].rsplit('.', 1)
|
||||||
record = self.eval_object(record, v)
|
record = self.eval_object(record, v)
|
||||||
|
|
||||||
inner = None
|
column = record._model._all_columns[field].column
|
||||||
field_type = record._model._all_columns[field].column._type
|
field_type = column._type
|
||||||
|
|
||||||
|
req = v['request']
|
||||||
|
converter = req.registry['ir.fields.converter'].from_field(
|
||||||
|
req.cr, req.uid, record._model, column, totype='html')
|
||||||
|
|
||||||
|
content = None
|
||||||
try:
|
try:
|
||||||
if field_type == 'many2one':
|
value = record[field]
|
||||||
field_data = record.read([field])[0].get(field)
|
if value:
|
||||||
inner = field_data and field_data[1]
|
content, warnings = converter(value)
|
||||||
else:
|
assert not warnings
|
||||||
inner = getattr(record, field)
|
except KeyError:
|
||||||
|
|
||||||
if isinstance(inner, unicode):
|
|
||||||
inner = inner.encode("utf8")
|
|
||||||
|
|
||||||
g_att += ''.join(
|
|
||||||
' %s="%s"' % (name, cgi.escape(str(value), True))
|
|
||||||
for name, value in [
|
|
||||||
('data-oe-model', record._model._name),
|
|
||||||
('data-oe-id', str(record.id)),
|
|
||||||
('data-oe-field', field),
|
|
||||||
('data-oe-type', column._type),
|
|
||||||
('data-oe-translate', '1' if column.translate else '0'),
|
|
||||||
('data-oe-expression', t_att['field']),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
except AttributeError:
|
|
||||||
_logger.warning("t-field no field %s for model %s", field, record._model._name)
|
_logger.warning("t-field no field %s for model %s", field, record._model._name)
|
||||||
|
|
||||||
return self.render_element(e, t_att, g_att, v, str(inner or ""))
|
g_att += ''.join(
|
||||||
|
' %s="%s"' % (name, werkzeug.utils.escape(value))
|
||||||
|
for name, value in [
|
||||||
|
('data-oe-model', record._model._name),
|
||||||
|
('data-oe-id', record.id),
|
||||||
|
('data-oe-field', field),
|
||||||
|
('data-oe-type', field_type),
|
||||||
|
('data-oe-translate', '1' if column.translate else '0'),
|
||||||
|
('data-oe-expression', t_att['field']),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
return self.render_element(e, t_att, g_att, v, content or "")
|
||||||
|
|
||||||
# leave this, al.
|
# leave this, al.
|
||||||
|
|
Loading…
Reference in New Issue