Found from here - http://odoo-new-api-guide-line.readthedocs.org/en/latest/conventions.html:
Using Thread
When using thread you have to create you own cursor and initiate a new environment for each thread. committing is done by committing the cursor:
with Environment.manage(): # class function
env = Environment(cr, uid, context)
But how to use it?
We have old api code:
with Environment.manage():
cr = self.pool.cursor()
dialer = self.pool['asterisk.dialer'].browse(cr, uid, ids, context=context)[0]
It works.
Now how to do the same with new api?
with Environment.manage():
dialer = self.env['asterisk.dialer'].browse([dialer_id])
Gives the following error: OperationalError: Unable to use a closed cursor.
Tried this:
def run_dialer(self, dialer_id):
with Environment.manage():
cr, uid, context = self.env.args
env = Environment(cr, uid, context)
dialer = env['asterisk.dialer'].browse([dialer_id])
domain = [('phone', '!=', None)] + [eval(dialer.dialer_domain)[0]]
contacts = env[dialer.dialer_model].search(domain)
The same:
Exception in thread Thread-7:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 808, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 761, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 235, in wrapper
return new_api(self, *args, **kwargs)
File "/home/max/tmp-work/odoo/myaddons/asterisk_dialer/models/dialer.py", line 98, in run_dialer
contacts = env[dialer.dialer_model].search(domain)
File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 235, in wrapper
return new_api(self, *args, **kwargs)
File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 464, in new_api
result = method(self._model, cr, uid, *args, **kwargs)
File "/home/max/tmp-work/odoo/odoo.my/openerp/models.py", line 1679, in search
return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 237, in wrapper
return old_api(self, *args, **kwargs)
File "/home/max/tmp-work/odoo/odoo.my/openerp/addons/base/res/res_partner.py", line 643, in _search
count=count, access_rights_uid=access_rights_uid)
File "/home/max/tmp-work/odoo/odoo.my/openerp/api.py", line 237, in wrapper
return old_api(self, *args, **kwargs)
File "/home/max/tmp-work/odoo/odoo.my/openerp/models.py", line 4543, in _search
res = cr.fetchall()
File "/home/max/tmp-work/odoo/odoo.my/openerp/sql_db.py", line 157, in wrapper
raise psycopg2.OperationalError(msg)