Skip to content

Commit b8d5ccf

Browse files
committed
Improve interactive mode initialization
1 parent 22b024d commit b8d5ccf

File tree

3 files changed

+8
-9
lines changed

3 files changed

+8
-9
lines changed

odooly.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ def __call__(self, user=None, password=None, api_key=None, context=None):
788788
if user is not None:
789789
(uid, password, session) = self._check_user_password(user, password, api_key)
790790
if context is None:
791-
context = session['user_context']
791+
context = session.get('user_context') or {}
792792
elif context is not None:
793793
(uid, user, session) = (self.uid, self.user, self.session_info)
794794
else:
@@ -1404,7 +1404,7 @@ def _authenticate_web(self, **kw):
14041404
# 5. Submit TOTP
14051405
params = {'csrf_token': csrf, 'totp_token': token, 'remember': 1}
14061406
rv, session_info = self._request_parse('/web/login/totp', data=params)
1407-
return session_info
1407+
return session_info if session_info.get('username') == kw['login'] else {'uid': None}
14081408

14091409
def _authenticate_system(self):
14101410
__, session_info = self._request_parse('/web/become')
@@ -1466,12 +1466,12 @@ def login(self, user, password=None, database=None, api_key=None):
14661466
if not self._is_interactive():
14671467
return self._login(user, password=password, database=database, api_key=api_key)
14681468
try:
1469-
self._login(user, password=password, database=database, api_key=api_key)
1469+
register = self._login(user, password=password, database=database, api_key=api_key)
14701470
except Error as exc:
14711471
print(exc)
1472-
else:
1473-
# Register the new globals()
1474-
self.connect()
1472+
register = 'client' not in self._globals
1473+
# Register the globals()
1474+
register and self.connect()
14751475

14761476
def connect(self, env_name=None, *, server=None, user=None):
14771477
"""Connect to another environment and replace the globals()."""
@@ -2512,8 +2512,6 @@ def main(interact=_interact):
25122512
writer.writerows(data or ())
25132513

25142514
if client._is_interactive():
2515-
if not client.env.uid:
2516-
client.connect()
25172515
return interact(global_vars) if interact else global_vars
25182516

25192517

tests/_common.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ def get_svc(server, name, *args, **kwargs):
124124
svcs.db.server_version.return_value = self.server_version
125125
svcs.db.list.return_value = [self.database]
126126
svcs.common.login.return_value = self.uid
127-
# env['res.users'].context_get()
128127
svcs.object.execute_kw.return_value = self.user_context
129128
return svcs
130129

tests/test_interact.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class _TestInteract(OdooTestCase):
1111

1212
def setUp(self):
1313
super().setUp()
14+
# Reset defaults before each run
15+
odooly.Client._set_interactive.__func__.__defaults__ = ({},)
1416
# Hide readline module
1517
mock.patch.dict('sys.modules', {'readline': None}).start()
1618
mock.patch('odooly.Client._globals', None).start()

0 commit comments

Comments
 (0)