Skip to content

Instantly share code, notes, and snippets.

@dpr-odoo
Created September 24, 2015 09:24
Show Gist options
  • Save dpr-odoo/b63433641bb70fa7c8e8 to your computer and use it in GitHub Desktop.
Save dpr-odoo/b63433641bb70fa7c8e8 to your computer and use it in GitHub Desktop.
Odoo Python Connector (JSON RPC)
import httplib2,random, json
odoo_url = 'SERVER_URL'
class OdooConnector:
context = {}
http = False
cookies = ''
def __init__(self):
self.http = httplib2.Http()
def get_session_info(self):
url = '/web/session/get_session_info'
requestData = self._create_params({})
result = self.requestJSON(url, requestData)
res = result.get('result')
return res
def authenticate(self, username, password, db):
url = '/web/session/authenticate'
params = {
"db": db,
"login": username,
"password": password,
"context": {}
}
requestData = self._create_params(params)
result = self.requestJSON(url, requestData)
user = result.get('result')
self.context = user.get('user_context')
return user
def write(self,model, data, record_id):
url = "/web/dataset/call_kw"
args = [(record_id), data]
params = {
"model": model,
"method": "write",
"args": args,
"kwargs": {},
"context": self.context
}
requestData = self._create_params(params)
return self.requestJSON(url, requestData)
def requestJSON(self, url, data):
headers = {
'Content-Type': 'application/json; charset=UTF-8',
'Connection': 'keep-alive'
}
if self.cookies:
headers['Cookie'] = self.cookies
res, content = self.http.request(odoo_url + url, 'POST', headers=headers, body=json.dumps(data))
self.cookies = res.get('set-cookie', '')
return json.loads(content)
def _create_params(self, params):
data = {
"jsonrpc": "2.0",
"method": "call",
"params": params or {},
"id": random.randint(1000, 6000)
}
return data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment