summaryrefslogtreecommitdiff
path: root/odoo
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-06-13 14:12:12 +0200
committerChristophe Simonis <chs@odoo.com>2018-06-13 14:12:12 +0200
commitbdd051bf78254ca9e3b72f8530c1ecf505040cab (patch)
tree2d900b1363214e900d43d6b2bbc771ec58cf4607 /odoo
parentd44cd778844c18d5af1f631648b38321f26cb579 (diff)
parentc43c54017259fb756f5449abf115c514b49ed371 (diff)
[MERGE] forward port branch saas-14 up to c43c5401725
Diffstat (limited to 'odoo')
-rw-r--r--odoo/addons/base/ir/ir_model.py2
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py13
-rw-r--r--odoo/http.py10
-rw-r--r--odoo/service/security.py20
-rw-r--r--odoo/tests/common.py2
-rw-r--r--odoo/tools/misc.py12
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)