[FIX] audittrail : crash after imporvement in webservice
lp bug: https://launchpad.net/bugs/488754 fixed bzr revid: hmo@tinyerp.com-20091130060741-dodpnud17vf88nsu
This commit is contained in:
parent
fe9c6b35c1
commit
d8781cd0f2
|
@ -20,13 +20,14 @@
|
|||
##############################################################################
|
||||
|
||||
|
||||
import ir
|
||||
from osv import fields, osv
|
||||
from osv.osv import osv_pool
|
||||
from tools.translate import _
|
||||
import ir
|
||||
import netsvc
|
||||
import pooler
|
||||
import string
|
||||
import time, copy
|
||||
from tools.translate import _
|
||||
|
||||
class audittrail_rule(osv.osv):
|
||||
_name = 'audittrail.rule'
|
||||
|
@ -130,16 +131,11 @@ class audittrail_log_line(osv.osv):
|
|||
|
||||
audittrail_log_line()
|
||||
|
||||
|
||||
objects_proxy = netsvc.SERVICES['object'].__class__
|
||||
|
||||
class audittrail_objects_proxy(objects_proxy):
|
||||
|
||||
class audittrail_objects_proxy(osv_pool):
|
||||
def get_value_text(self, cr, uid, field_name, values, object, context={}):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
obj=pool.get(object.model)
|
||||
object_name=obj._name
|
||||
obj_ids= pool.get('ir.model').search(cr, uid,[('model','=',object_name)])
|
||||
obj_ids= pool.get('ir.model').search(cr, uid, [('model', '=', object.model)])
|
||||
model_object=pool.get('ir.model').browse(cr, uid, obj_ids)[0]
|
||||
f_id= pool.get('ir.model.fields').search(cr, uid, [('name', '=', field_name), ('model_id', '=', object.id)])
|
||||
if f_id:
|
||||
|
@ -163,7 +159,6 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
return value
|
||||
|
||||
elif field['ttype'] == 'one2many':
|
||||
|
||||
if values:
|
||||
value=[]
|
||||
for id in values:
|
||||
|
@ -177,10 +172,13 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
def create_log_line(self, cr, uid, id, object, lines=[]):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
obj=pool.get(object.model)
|
||||
object_name=obj._name
|
||||
obj_ids= pool.get('ir.model').search(cr, uid,[('model','=',object_name)])
|
||||
obj_ids= pool.get('ir.model').search(cr, uid, [('model', '=', object.model)])
|
||||
model_object=pool.get('ir.model').browse(cr, uid, obj_ids)[0]
|
||||
for line in lines:
|
||||
if obj._inherits:
|
||||
inherits_ids= pool.get('ir.model').search(cr, uid, [('model', '=', obj._inherits.keys()[0])])
|
||||
f_id= pool.get('ir.model.fields').search(cr, uid, [('name', '=', line['name']), ('model_id', 'in', (object.id, inherits_ids[0]))])
|
||||
else:
|
||||
f_id= pool.get('ir.model.fields').search(cr, uid, [('name', '=', line['name']), ('model_id', '=', object.id)])
|
||||
if len(f_id):
|
||||
fields=pool.get('ir.model.fields').read(cr, uid, f_id)
|
||||
|
@ -189,6 +187,8 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
old_value_text='old_value_text' in line and line['old_value_text'] or ''
|
||||
new_value_text='new_value_text' in line and line['new_value_text'] or ''
|
||||
|
||||
if old_value_text == new_value_text:
|
||||
continue
|
||||
if fields[0]['ttype']== 'many2one':
|
||||
if type(old_value)==tuple:
|
||||
old_value=old_value[0]
|
||||
|
@ -198,16 +198,15 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
cr.commit()
|
||||
return True
|
||||
|
||||
def log_fct(self, db, uid, passwd, object, method, fct_src, *args):
|
||||
def log_fct(self, db, uid, object, method, fct_src, *args):
|
||||
logged_uids = []
|
||||
pool = pooler.get_pool(db)
|
||||
cr = pooler.get_db(db).cursor()
|
||||
obj=pool.get(object)
|
||||
object_name=obj._name
|
||||
obj_ids= pool.get('ir.model').search(cr, uid,[('model','=',object_name)])
|
||||
obj_ids= pool.get('ir.model').search(cr, uid, [('model', '=', object)])
|
||||
model_object=pool.get('ir.model').browse(cr, uid, obj_ids)[0]
|
||||
if method in ('create'):
|
||||
res_id = fct_src( db, uid, passwd, object, method, *args)
|
||||
res_id = fct_src(db, uid, object, method, *args)
|
||||
cr.commit()
|
||||
new_value=pool.get(model_object.model).read(cr, uid, [res_id], args[0].keys())[0]
|
||||
if 'id' in new_value:
|
||||
|
@ -237,7 +236,7 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
old_values_text={}
|
||||
for field in args[1].keys():
|
||||
old_values_text[field] = self.get_value_text(cr, uid, field, old_values[field], model_object)
|
||||
res =fct_src( db, uid, passwd, object, method, *args)
|
||||
res =fct_src(db, uid, object, method, *args)
|
||||
cr.commit()
|
||||
if res:
|
||||
new_values=pool.get(model_object.model).read(cr, uid, res_ids, args[1].keys())[0]
|
||||
|
@ -264,7 +263,7 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
if method in ('read'):
|
||||
res_ids=args[0]
|
||||
old_values={}
|
||||
res =fct_src( db, uid, passwd, object, method, *args)
|
||||
res =fct_src(db, uid, object, method, *args)
|
||||
if type(res)==list:
|
||||
|
||||
for v in res:
|
||||
|
@ -312,35 +311,33 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
lines.append(line)
|
||||
cr.commit()
|
||||
self.create_log_line(cr, uid, id, model_object, lines)
|
||||
res =fct_src( db, uid, passwd, object, method, *args)
|
||||
res =fct_src(db, uid, object, method, *args)
|
||||
cr.close()
|
||||
return res
|
||||
cr.close()
|
||||
|
||||
def execute(self, db, uid, passwd, object, method, *args):
|
||||
def execute(self, db, uid, object, method, *args, **kw):
|
||||
pool = pooler.get_pool(db)
|
||||
cr = pooler.get_db(db).cursor()
|
||||
cr.autocommit(True)
|
||||
obj=pool.get(object)
|
||||
logged_uids = []
|
||||
object_name=obj._name
|
||||
|
||||
fct_src = super(audittrail_objects_proxy, self).execute
|
||||
|
||||
def my_fct(db, uid, passwd, object, method, *args):
|
||||
def my_fct(db, uid, object, method, *args):
|
||||
field = method
|
||||
rule = False
|
||||
obj_ids= pool.get('ir.model').search(cr, uid,[('model','=',object_name)])
|
||||
obj_ids= pool.get('ir.model').search(cr, uid, [('model', '=', object)])
|
||||
for obj_name in pool.obj_list():
|
||||
if obj_name == 'audittrail.rule':
|
||||
rule = True
|
||||
if not rule:
|
||||
return fct_src(db, uid, passwd, object, method, *args)
|
||||
return fct_src(db, uid, object, method, *args)
|
||||
if not len(obj_ids):
|
||||
return fct_src(db, uid, passwd, object, method, *args)
|
||||
return fct_src(db, uid, object, method, *args)
|
||||
rule_ids=pool.get('audittrail.rule').search(cr, uid, [('object_id', '=', obj_ids[0]), ('state', '=', 'subscribed')])
|
||||
if not len(rule_ids):
|
||||
return fct_src(db, uid, passwd, object, method, *args)
|
||||
return fct_src(db, uid, object, method, *args)
|
||||
|
||||
for thisrule in pool.get('audittrail.rule').browse(cr, uid, rule_ids):
|
||||
for user in thisrule.user_id:
|
||||
|
@ -348,9 +345,9 @@ class audittrail_objects_proxy(objects_proxy):
|
|||
if not len(logged_uids) or uid in logged_uids:
|
||||
if field in ('read', 'write', 'create', 'unlink'):
|
||||
if getattr(thisrule, 'log_'+field):
|
||||
return self.log_fct(db, uid, passwd, object, method, fct_src, *args)
|
||||
return fct_src(db, uid, passwd, object, method, *args)
|
||||
res = my_fct(db, uid, passwd, object, method, *args)
|
||||
return self.log_fct(db, uid, object, method, fct_src, *args)
|
||||
return fct_src(db, uid, object, method, *args)
|
||||
res = my_fct(db, uid, object, method, *args)
|
||||
cr.close()
|
||||
return res
|
||||
|
||||
|
|
Loading…
Reference in New Issue