Merge lp:~openerp-dev/openobject-server/6.0-opw-513433-xal into lp:openobject-server/6.0

Proposed by Xavier ALT
Status: Merged
Merged at revision: 3596
Proposed branch: lp:~openerp-dev/openobject-server/6.0-opw-513433-xal
Merge into: lp:openobject-server/6.0
Diff against target: 33 lines (+18/-0)
1 file modified
bin/addons/base/res/res_log.py (+18/-0)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/6.0-opw-513433-xal
Reviewer Review Type Date Requested Status
OpenERP Publisher's Warranty Team Pending
Review via email: mp+94990@code.launchpad.net

This proposal supersedes a proposal from 2012-02-28.

Description of the change

Hi,

This branch fix some common problems with res.log context value bigger than 250. This happen on object using log() method (by having _log_create = True set on object or calling log() manually) mixed with user having big "user context" (ex: tz: America/North_Dakota/New_Salem).

Please review this.

Cheers,
Xavier

To post a comment you must log in.
3596. By Xavier ALT

[FIX] res.log: make sure create context size if not bigger that field size

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/addons/base/res/res_log.py'
2--- bin/addons/base/res/res_log.py 2012-02-28 11:12:15 +0000
3+++ bin/addons/base/res/res_log.py 2012-02-29 12:19:20 +0000
4@@ -50,11 +50,29 @@
5 self._index_name)
6
7 def create(self, cr, uid, vals, context=None):
8+
9+ def filter_context_value(c):
10+ """filter unrequired value from context"""
11+ # We remove user context and web client related value as those
12+ # values will be re-set when accessing res.log item, depending
13+ # on user or client settings
14+ if isinstance(c, dict):
15+ FILTER_OUT_KEYS = ['tz', 'lang', 'client', 'bin_size', '_terp_view_name']
16+ for context_key in FILTER_OUT_KEYS:
17+ c.pop(context_key, None)
18+ return c
19 create_context = context and dict(context) or {}
20 if 'res_log_read' in create_context:
21 vals['read'] = create_context.pop('res_log_read')
22 if create_context and not vals.get('context'):
23 vals['context'] = create_context
24+ log_context = filter_context_value(vals.get('context',{}))
25+ if len(str(log_context)) > 250:
26+ # if context is still bigger that field size, better lose the
27+ # context completly instead of breaking later when user access
28+ # res.log item
29+ log_context = "{}"
30+ vals['context'] = log_context
31 return super(res_log, self).create(cr, uid, vals, context=context)
32
33 # TODO: do not return secondary log if same object than in the model (but unlink it)