def login(self, db, login='******', password='******'): """Log in as the given `user` with the password `passwd` on the database `db`. .. doctest:: :options: +SKIP >>> odoo.login('db_name', 'admin', 'admin') >>> odoo.env.user.name 'Administrator' *Python 2:* :raise: :class:`odoorpc.error.RPCError` :raise: `urllib2.URLError` (connection error) *Python 3:* :raise: :class:`odoorpc.error.RPCError` :raise: `urllib.error.URLError` (connection error) """ # Get the user's ID and generate the corresponding user record data = self.json('/web/session/authenticate', { 'db': db, 'login': login, 'password': password }) uid = data['result']['uid'] if uid: context = data['result']['user_context'] self._env = Environment(self, db, uid, context=context) self._login = login self._password = password else: raise error.RPCError("Wrong login ID or password")
def json(self, url, params): """Low level method to execute JSON queries. It basically performs a request and raises an :class:`odoorpc.error.RPCError` exception if the response contains an error. You have to know the names of each parameter required by the function called, and set them in the `params` dictionary. Here an authentication request: .. doctest:: :options: +SKIP >>> data = odoo.json( ... '/web/session/authenticate', ... {'db': 'db_name', 'login': '******', 'password': '******'}) >>> from pprint import pprint >>> pprint(data) {'id': 645674382, 'jsonrpc': '2.0', 'result': {'db': 'db_name', 'session_id': 'fa740abcb91784b8f4750c5c5b14da3fcc782d11', 'uid': 1, 'user_context': {'lang': 'en_US', 'tz': 'Europe/Brussels', 'uid': 1}, 'username': '******'}} .. doctest:: :hide: >>> data = odoo.json( ... '/web/session/authenticate', ... {'db': DB, 'login': USER, 'password': PWD}) >>> data['result']['db'] == DB True >>> data['result']['uid'] in [1, 2] True >>> data['result']['username'] == USER True And a call to the ``read`` method of the ``res.users`` model: .. doctest:: :options: +SKIP >>> data = odoo.json( ... '/web/dataset/call', ... {'model': 'res.users', 'method': 'read', ... 'args': [[2], ['name']]}) >>> from pprint import pprint >>> pprint(data) {'id': ..., 'jsonrpc': '2.0', 'result': [{'id': 2, 'name': 'Mitchell Admin'}]} *Python 2:* :return: a dictionary (JSON response) :raise: :class:`odoorpc.error.RPCError` :raise: `urllib2.HTTPError` (if `params` is not a dictionary) :raise: `urllib2.URLError` (connection error) *Python 3:* :return: a dictionary (JSON response) :raise: :class:`odoorpc.error.RPCError` :raise: `urllib.error.HTTPError` (if `params` is not a dictionary) :raise: `urllib.error.URLError` (connection error) """ data = self._connector.proxy_json(url, params) if data.get('error'): raise error.RPCError(data['error']['data']['message'], data['error']) return data