Merge lp:~therp-nl/openobject-server/7.0-lp1253200-dont_browse_in_res_users_context_get into lp:openobject-server/7.0

Proposed by Stefan Rijnhart (Opener)
Status: Needs review
Proposed branch: lp:~therp-nl/openobject-server/7.0-lp1253200-dont_browse_in_res_users_context_get
Merge into: lp:openobject-server/7.0
Diff against target: 52 lines (+16/-11)
2 files modified
openerp/addons/base/res/res_partner.py (+6/-1)
openerp/addons/base/res/res_users.py (+10/-10)
To merge this branch: bzr merge lp:~therp-nl/openobject-server/7.0-lp1253200-dont_browse_in_res_users_context_get
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+196003@code.launchpad.net

Description of the change

Green on runbot

To post a comment you must log in.
5139. By Stefan Rijnhart (Opener)

[FIX] another occurrence of the problem, in fields_view_get_address

Unmerged revisions

5139. By Stefan Rijnhart (Opener)

[FIX] another occurrence of the problem, in fields_view_get_address

5138. By Stefan Rijnhart (Opener)

[FIX] Don't browse in res_users::context_get(), which is called very
 early in the upgrade process. This can lead to problems when
 an installed, but yet unloaded module has turned a user or
 partner column into an unstored function or related field.
 The browsing will attempt a read on the database column which
 will have been dropped by the ORM.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/addons/base/res/res_partner.py'
2--- openerp/addons/base/res/res_partner.py 2014-04-04 14:16:11 +0000
3+++ openerp/addons/base/res/res_partner.py 2014-08-13 09:05:46 +0000
4@@ -34,7 +34,12 @@
5 from openerp.tools.yaml_import import is_comment
6
7 class format_address(object):
8- def fields_view_get_address(self, cr, uid, arch, context={}):
9+ def fields_view_get_address(self, cr, uid, arch, context=None):
10+ if context and context.get('check_view_ids'):
11+ # browsing user or company breaks at module update time when an
12+ # unrelated module replaces a partner column by an unstored
13+ # function field.
14+ return arch
15 user_obj = self.pool.get('res.users')
16 fmt = user_obj.browse(cr, SUPERUSER_ID, uid, context).company_id.country_id
17 fmt = fmt and fmt.address_format
18
19=== modified file 'openerp/addons/base/res/res_users.py'
20--- openerp/addons/base/res/res_users.py 2014-04-29 07:11:25 +0000
21+++ openerp/addons/base/res/res_users.py 2014-08-13 09:05:46 +0000
22@@ -370,20 +370,20 @@
23
24 @tools.ormcache(skiparg=2)
25 def context_get(self, cr, uid, context=None):
26- user = self.browse(cr, SUPERUSER_ID, uid, context)
27 result = {}
28+ context_keys = []
29 for k in self._all_columns.keys():
30 if k.startswith('context_'):
31- context_key = k[8:]
32+ context_keys.append(k[8:])
33 elif k in ['lang', 'tz']:
34- context_key = k
35- else:
36- context_key = False
37- if context_key:
38- res = getattr(user,k) or False
39- if isinstance(res, browse_record):
40- res = res.id
41- result[context_key] = res or False
42+ context_keys.append(k)
43+ user = self.read(cr, SUPERUSER_ID, [uid],
44+ context_keys, context=context)[0]
45+ for context_key in context_keys:
46+ res = user.get(context_key)
47+ if isinstance(res, tuple):
48+ res = res[0]
49+ result[context_key] = res or False
50 return result
51
52 def action_get(self, cr, uid, context=None):