Merge lp:~camptocamp/ocb-addons/7.0-fix-1319109 into lp:ocb-addons

Proposed by Yannick Vaucher @ Camptocamp
Status: Merged
Approved by: Leonardo Pistone
Approved revision: no longer in the source branch.
Merged at revision: 10207
Proposed branch: lp:~camptocamp/ocb-addons/7.0-fix-1319109
Merge into: lp:ocb-addons
Diff against target: 131 lines (+25/-24)
1 file modified
report_webkit/webkit_report.py (+25/-24)
To merge this branch: bzr merge lp:~camptocamp/ocb-addons/7.0-fix-1319109
Reviewer Review Type Date Requested Status
Leonardo Pistone Approve
Alexandre Fayolle - camptocamp code review, no test Approve
Nicolas Bessi - Camptocamp (community) no test, code review Approve
Florent Pending
Review via email: mp+219473@code.launchpad.net

Description of the change

Transmit parser_instance using partial function for mako translation callback. This to remove parser_instance from attribute as it can cause race condition on cursors.

To post a comment you must log in.
Revision history for this message
Nicolas Bessi - Camptocamp (nbessi-c2c-deactivatedaccount) wrote :

Thanks for providing the patch as disscussed.

Just a little
little indent
49 uid,
50 self.name2,
51 context=context)

else

LGTM

review: Approve (no test, code review)
Revision history for this message
Alexandre Fayolle - camptocamp (alexandre-fayolle-c2c) wrote :

LGTM

thanks for fixing this

review: Approve (code review, no test)
Revision history for this message
Leonardo Pistone (lepistone) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'report_webkit/webkit_report.py'
2--- report_webkit/webkit_report.py 2014-04-16 07:43:09 +0000
3+++ report_webkit/webkit_report.py 2014-05-14 09:45:44 +0000
4@@ -37,6 +37,7 @@
5 import tempfile
6 import time
7 import logging
8+from functools import partial
9
10 from mako.template import Template
11 from mako.lookup import TemplateLookup
12@@ -68,7 +69,6 @@
13 """
14 def __init__(self, name, table, rml=False, parser=False,
15 header=True, store=False):
16- self.parser_instance = False
17 self.localcontext = {}
18 report_sxw.__init__(self, name, table, rml, parser,
19 header, store)
20@@ -189,16 +189,16 @@
21 _logger.error('cannot remove file %s: %s', f_to_del, exc)
22 return pdf
23
24- def translate_call(self, src):
25+ def translate_call(self, parser_instance, src):
26 """Translate String."""
27- ir_translation = self.pool.get('ir.translation')
28+ ir_translation = self.pool['ir.translation']
29 name = self.tmpl and 'addons/' + self.tmpl or None
30- res = ir_translation._get_source(self.parser_instance.cr, self.parser_instance.uid,
31- name, 'report', self.parser_instance.localcontext.get('lang', 'en_US'), src)
32+ res = ir_translation._get_source(parser_instance.cr, parser_instance.uid,
33+ name, 'report', parser_instance.localcontext.get('lang', 'en_US'), src)
34 if res == src:
35 # no translation defined, fallback on None (backward compatibility)
36- res = ir_translation._get_source(self.parser_instance.cr, self.parser_instance.uid,
37- None, 'report', self.parser_instance.localcontext.get('lang', 'en_US'), src)
38+ res = ir_translation._get_source(parser_instance.cr, parser_instance.uid,
39+ None, 'report', parser_instance.localcontext.get('lang', 'en_US'), src)
40 if not res :
41 return src
42 return res
43@@ -213,14 +213,14 @@
44 if report_xml.report_type != 'webkit':
45 return super(WebKitParser,self).create_single_pdf(cursor, uid, ids, data, report_xml, context=context)
46
47- self.parser_instance = self.parser(cursor,
48- uid,
49- self.name2,
50- context=context)
51+ parser_instance = self.parser(cursor,
52+ uid,
53+ self.name2,
54+ context=context)
55
56 self.pool = pooler.get_pool(cursor.dbname)
57 objs = self.getObjects(cursor, uid, ids, context)
58- self.parser_instance.set_context(objs, data, ids, report_xml.report_type)
59+ parser_instance.set_context(objs, data, ids, report_xml.report_type)
60
61 template = False
62
63@@ -250,18 +250,19 @@
64 if not css :
65 css = ''
66
67+ translate_call = partial(self.translate_call, parser_instance)
68 #default_filters=['unicode', 'entity'] can be used to set global filter
69 body_mako_tpl = mako_template(template)
70 helper = WebKitHelper(cursor, uid, report_xml.id, context)
71 if report_xml.precise_mode:
72- objs = self.parser_instance.localcontext['objects']
73+ objs = parser_instance.localcontext['objects']
74 for obj in objs:
75- self.parser_instance.localcontext['objects'] = [obj]
76+ parser_instance.localcontext['objects'] = [obj]
77 try :
78 html = body_mako_tpl.render(helper=helper,
79 css=css,
80- _=self.translate_call,
81- **self.parser_instance.localcontext)
82+ _=translate_call,
83+ **parser_instance.localcontext)
84 htmls.append(html)
85 except Exception:
86 msg = exceptions.text_error_template().render()
87@@ -271,8 +272,8 @@
88 try :
89 html = body_mako_tpl.render(helper=helper,
90 css=css,
91- _=self.translate_call,
92- **self.parser_instance.localcontext)
93+ _=translate_call,
94+ **parser_instance.localcontext)
95 htmls.append(html)
96 except Exception:
97 msg = exceptions.text_error_template().render()
98@@ -282,9 +283,9 @@
99 try :
100 head = head_mako_tpl.render(helper=helper,
101 css=css,
102- _=self.translate_call,
103+ _=translate_call,
104 _debug=False,
105- **self.parser_instance.localcontext)
106+ **parser_instance.localcontext)
107 except Exception:
108 raise except_osv(_('Webkit render!'),
109 exceptions.text_error_template().render())
110@@ -294,8 +295,8 @@
111 try :
112 foot = foot_mako_tpl.render(helper=helper,
113 css=css,
114- _=self.translate_call,
115- **self.parser_instance.localcontext)
116+ _=translate_call,
117+ **parser_instance.localcontext)
118 except:
119 msg = exceptions.text_error_template().render()
120 _logger.error(msg)
121@@ -305,8 +306,8 @@
122 deb = head_mako_tpl.render(helper=helper,
123 css=css,
124 _debug=tools.ustr("\n".join(htmls)),
125- _=self.translate_call,
126- **self.parser_instance.localcontext)
127+ _=translate_call,
128+ **parser_instance.localcontext)
129 except Exception:
130 msg = exceptions.text_error_template().render()
131 _logger.error(msg)