diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-06-13 14:12:12 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-06-13 14:12:12 +0200 |
| commit | bdd051bf78254ca9e3b72f8530c1ecf505040cab (patch) | |
| tree | 2d900b1363214e900d43d6b2bbc771ec58cf4607 /odoo | |
| parent | d44cd778844c18d5af1f631648b38321f26cb579 (diff) | |
| parent | c43c54017259fb756f5449abf115c514b49ed371 (diff) | |
[MERGE] forward port branch saas-14 up to c43c5401725
Diffstat (limited to 'odoo')
| -rw-r--r-- | odoo/addons/base/ir/ir_model.py | 2 | ||||
| -rw-r--r-- | odoo/addons/test_new_api/tests/test_new_fields.py | 13 | ||||
| -rw-r--r-- | odoo/http.py | 10 | ||||
| -rw-r--r-- | odoo/service/security.py | 20 | ||||
| -rw-r--r-- | odoo/tests/common.py | 2 | ||||
| -rw-r--r-- | odoo/tools/misc.py | 12 |
6 files changed, 37 insertions, 22 deletions
diff --git a/odoo/addons/base/ir/ir_model.py b/odoo/addons/base/ir/ir_model.py index 399b0c84ece..a73431f58bb 100644 --- a/odoo/addons/base/ir/ir_model.py +++ b/odoo/addons/base/ir/ir_model.py @@ -32,7 +32,7 @@ SAFE_EVAL_BASE = { def make_compute(text, deps): """ Return a compute function from its code body and dependencies. """ func = lambda self: safe_eval(text, SAFE_EVAL_BASE, {'self': self}, mode="exec") - deps = [arg.strip() for arg in (deps or "").split(",")] + deps = [arg.strip() for arg in deps.split(",")] if deps else [] return api.depends(*deps)(func) diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py index 8b02d958c83..163d0809b2c 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -61,6 +61,19 @@ class TestFields(common.TransactionCase): self.assertTrue(field.store) self.assertTrue(field.readonly) + def test_10_computed_custom(self): + """ check definition of custom computed fields """ + self.env['ir.model.fields'].create({ + 'name': 'x_bool_false_computed', + 'model_id': self.env.ref('test_new_api.model_test_new_api_message').id, + 'field_description': 'A boolean computed to false', + 'compute': "for r in self: r['x_bool_false_computed'] = False", + 'store': False, + 'ttype': 'boolean' + }) + field = self.env['test_new_api.message']._fields['x_bool_false_computed'] + self.assertFalse(field.depends) + def test_10_non_stored(self): """ test non-stored fields """ # a field declared with store=False should not have a column diff --git a/odoo/http.py b/odoo/http.py index 84298c20a63..0075b1bed34 100644 --- a/odoo/http.py +++ b/odoo/http.py @@ -1047,7 +1047,7 @@ class OpenERPSession(werkzeug.contrib.sessions.Session): self.db = db self.uid = uid self.login = login - self.session_token = uid and security.compute_session_token(self) + self.session_token = uid and security.compute_session_token(self, request.env) request.uid = uid request.disable_db = False @@ -1062,15 +1062,17 @@ class OpenERPSession(werkzeug.contrib.sessions.Session): """ if not self.db or not self.uid: raise SessionExpiredException("Session expired") - + # We create our own environment instead of the request's one. + # to avoid creating it without the uid since request.uid isn't set yet + env = odoo.api.Environment(request.cr, self.uid, self.context) # == BACKWARD COMPATIBILITY TO CONVERT OLD SESSION TYPE TO THE NEW ONES ! REMOVE ME AFTER 11.0 == if self.get('password'): security.check(self.db, self.uid, self.password) - self.session_token = security.compute_session_token(self) + self.session_token = security.compute_session_token(self, env) self.pop('password') # ================================================================================================= # here we check if the session is still valid - if not security.check_session(self): + if not security.check_session(self, env): raise SessionExpiredException("Session expired") def logout(self, keep_db=False): diff --git a/odoo/service/security.py b/odoo/service/security.py index 229e4b84077..54d108fb4b1 100644 --- a/odoo/service/security.py +++ b/odoo/service/security.py @@ -12,15 +12,13 @@ def check(db, uid, passwd): res_users = odoo.registry(db)['res.users'] return res_users.check(db, uid, passwd) -def compute_session_token(session): - with odoo.registry(session.db).cursor() as cr: - self = odoo.api.Environment(cr, session.uid, {})['res.users'].browse(session.uid) - return self._compute_session_token(session.sid) +def compute_session_token(session, env): + self = env['res.users'].browse(session.uid) + return self._compute_session_token(session.sid) -def check_session(session): - with odoo.registry(session.db).cursor() as cr: - self = odoo.api.Environment(cr, session.uid, {})['res.users'].browse(session.uid) - if odoo.tools.misc.consteq(self._compute_session_token(session.sid), session.session_token): - return True - self._invalidate_session_cache() - return False +def check_session(session, env): + self = env['res.users'].browse(session.uid) + if odoo.tools.misc.consteq(self._compute_session_token(session.sid), session.session_token): + return True + self._invalidate_session_cache() + return False diff --git a/odoo/tests/common.py b/odoo/tests/common.py index 1f361362a86..0e2790367b6 100644 --- a/odoo/tests/common.py +++ b/odoo/tests/common.py @@ -287,7 +287,7 @@ class HttpCase(TransactionCase): session.db = db session.uid = uid session.login = user - session.session_token = uid and security.compute_session_token(session) + session.session_token = uid and security.compute_session_token(session, env) session.context = env['res.users'].context_get() or {} session.context['uid'] = uid session._fix_lang(session.context) diff --git a/odoo/tools/misc.py b/odoo/tools/misc.py index 6dca69a1cbc..05c772e71e4 100644 --- a/odoo/tools/misc.py +++ b/odoo/tools/misc.py @@ -1209,13 +1209,15 @@ def format_date(env, value, lang_code=False, date_format=False): ''' if not value: return '' - if isinstance(value, datetime.datetime): - value = value.date() - elif isinstance(value, basestring): + if isinstance(value, basestring): if len(value) < DATE_LENGTH: return '' - value = value[:DATE_LENGTH] - value = datetime.datetime.strptime(value, DEFAULT_SERVER_DATE_FORMAT).date() + if len(value) > DATE_LENGTH: + # a datetime, convert to correct timezone + value = odoo.fields.Datetime.from_string(value) + value = odoo.fields.Datetime.context_timestamp(env['res.lang'], value) + else: + value = odoo.fields.Datetime.from_string(value) lang = env['res.lang']._lang_get(lang_code or env.context.get('lang') or 'en_US') locale = babel.Locale.parse(lang.code) |
