[FIX] creation of new threads where a new API environment should be initialized
* fix #1149 courtesy of @andreparames * remove useless threaded yaml import * openerp.service.server thread spawning get an API environment further down the stack
This commit is contained in:
commit
f98c610310
|
@ -87,25 +87,26 @@ def exp_report(db, uid, object, ids, datas=None, context=None):
|
|||
self_reports[id] = {'uid': uid, 'result': False, 'state': False, 'exception': None}
|
||||
|
||||
def go(id, uid, ids, datas, context):
|
||||
cr = openerp.registry(db).cursor()
|
||||
try:
|
||||
result, format = openerp.report.render_report(cr, uid, ids, object, datas, context)
|
||||
if not result:
|
||||
tb = sys.exc_info()
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException('RML is not available at specified location or not enough data to print!', tb)
|
||||
self_reports[id]['result'] = result
|
||||
self_reports[id]['format'] = format
|
||||
self_reports[id]['state'] = True
|
||||
except Exception, exception:
|
||||
_logger.exception('Exception: %s\n', exception)
|
||||
if hasattr(exception, 'name') and hasattr(exception, 'value'):
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException(tools.ustr(exception.name), tools.ustr(exception.value))
|
||||
else:
|
||||
tb = sys.exc_info()
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException(tools.exception_to_unicode(exception), tb)
|
||||
self_reports[id]['state'] = True
|
||||
cr.commit()
|
||||
cr.close()
|
||||
with openerp.api.Environment.manage():
|
||||
cr = openerp.registry(db).cursor()
|
||||
try:
|
||||
result, format = openerp.report.render_report(cr, uid, ids, object, datas, context)
|
||||
if not result:
|
||||
tb = sys.exc_info()
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException('RML is not available at specified location or not enough data to print!', tb)
|
||||
self_reports[id]['result'] = result
|
||||
self_reports[id]['format'] = format
|
||||
self_reports[id]['state'] = True
|
||||
except Exception, exception:
|
||||
_logger.exception('Exception: %s\n', exception)
|
||||
if hasattr(exception, 'name') and hasattr(exception, 'value'):
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException(tools.ustr(exception.name), tools.ustr(exception.value))
|
||||
else:
|
||||
tb = sys.exc_info()
|
||||
self_reports[id]['exception'] = openerp.exceptions.DeferredException(tools.exception_to_unicode(exception), tb)
|
||||
self_reports[id]['state'] = True
|
||||
cr.commit()
|
||||
cr.close()
|
||||
return True
|
||||
|
||||
threading.Thread(target=go, args=(id, uid, ids, datas, context)).start()
|
||||
|
|
|
@ -963,19 +963,4 @@ def yaml_import(cr, module, yamlfile, kind, idref=None, mode='init', noupdate=Fa
|
|||
# keeps convention of convert.py
|
||||
convert_yaml_import = yaml_import
|
||||
|
||||
def threaded_yaml_import(db_name, module_name, file_name, delay=0):
|
||||
def f():
|
||||
time.sleep(delay)
|
||||
cr = None
|
||||
fp = None
|
||||
try:
|
||||
cr = sql_db.db_connect(db_name).cursor()
|
||||
fp = misc.file_open(file_name)
|
||||
convert_yaml_import(cr, module_name, fp, {}, 'update', True)
|
||||
finally:
|
||||
if cr: cr.close()
|
||||
if fp: fp.close()
|
||||
threading.Thread(target=f).start()
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
Loading…
Reference in New Issue