From 1b40e9265f88f57aaaf311bb8fae3d1fd1966d7d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 6 Aug 2013 13:36:26 +0200 Subject: [PATCH] [FIX] Replace views string interpolation by manual replacement. No need to double % in views anymore bzr revid: fme@openerp.com-20130806113626-t7y3v1trtfdtitar --- openerp/tools/convert.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py index 47503d9a634..deed121604f 100644 --- a/openerp/tools/convert.py +++ b/openerp/tools/convert.py @@ -151,11 +151,22 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None): 'Could not eval(%s) for %s in %s', a_eval, node.get('name'), context) raise def _process(s, idref): - m = re.findall('[^%]%\((.*?)\)[ds]', s) - for id in m: + matches = re.finditer('[^%]%\((.*?)\)[ds]', s) + done = [] + for m in matches: + found = m.group()[1:] + if found in done: + continue + done.append(found) + id = m.groups()[0] if not id in idref: - idref[id]=self.id_get(cr, id) - return s % idref + idref[id] = self.id_get(cr, id) + s = s.replace(found, str(idref[id])) + + s = s.replace('%%', '%') # Quite wierd but it's for (somewhat) backward compatibility sake + + return s + if t == 'xml': _fix_multiple_roots(node) return '\n'\