[IMP] use inheritance instead of wrapping when changing behavior of services
bzr revid: christophe@tinyerp.com-20090714161547-e9uzbq2h2i3dyku0
This commit is contained in:
parent
56eacba5c1
commit
3c6a820041
|
@ -130,7 +130,12 @@ class audittrail_log_line(osv.osv):
|
|||
|
||||
audittrail_log_line()
|
||||
|
||||
def get_value_text(cr, uid, field_name,values,object, context={}):
|
||||
|
||||
objects_proxy = netsvc.SERVICES['object'].__class__
|
||||
|
||||
class audittrail_objects_proxy(objects_proxy):
|
||||
|
||||
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
|
||||
|
@ -169,7 +174,7 @@ def get_value_text(cr, uid, field_name,values,object, context={}):
|
|||
return value
|
||||
return values
|
||||
|
||||
def create_log_line(cr,uid,id,object,lines=[]):
|
||||
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
|
||||
|
@ -193,7 +198,7 @@ def create_log_line(cr,uid,id,object,lines=[]):
|
|||
cr.commit()
|
||||
return True
|
||||
|
||||
def log_fct( db, uid, passwd, object, method, fct_src , *args ):
|
||||
def log_fct(self, db, uid, passwd, object, method, fct_src, *args):
|
||||
logged_uids = []
|
||||
pool = pooler.get_pool(db)
|
||||
cr = pooler.get_db(db).cursor()
|
||||
|
@ -215,10 +220,10 @@ def log_fct( db, uid, passwd, object, method, fct_src , *args ):
|
|||
line={
|
||||
'name':field,
|
||||
'new_value':new_value[field],
|
||||
'new_value_text':get_value_text(cr,uid,field,new_value[field],model_object)
|
||||
'new_value_text': self.get_value_text(cr,uid,field,new_value[field],model_object)
|
||||
}
|
||||
lines.append(line)
|
||||
create_log_line(cr,uid,id,model_object,lines)
|
||||
self.create_log_line(cr,uid,id,model_object,lines)
|
||||
cr.commit()
|
||||
cr.close()
|
||||
return res_id
|
||||
|
@ -229,7 +234,7 @@ def log_fct( db, uid, passwd, object, method, fct_src , *args ):
|
|||
old_values=pool.get(model_object.model).read(cr,uid,res_id,args[1].keys())
|
||||
old_values_text={}
|
||||
for field in args[1].keys():
|
||||
old_values_text[field]=get_value_text(cr,uid,field,old_values[field],model_object)
|
||||
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)
|
||||
cr.commit()
|
||||
if res:
|
||||
|
@ -243,12 +248,12 @@ def log_fct( db, uid, passwd, object, method, fct_src , *args ):
|
|||
'name':field,
|
||||
'new_value':field in new_values and new_values[field] or '',
|
||||
'old_value':field in old_values and old_values[field] or '',
|
||||
'new_value_text':get_value_text(cr,uid,field,new_values[field],model_object),
|
||||
'new_value_text': self.get_value_text(cr,uid,field,new_values[field],model_object),
|
||||
'old_value_text':old_values_text[field]
|
||||
}
|
||||
lines.append(line)
|
||||
cr.commit()
|
||||
create_log_line(cr,uid,id,model_object,lines)
|
||||
self.create_log_line(cr,uid,id,model_object,lines)
|
||||
cr.close()
|
||||
return res
|
||||
|
||||
|
@ -271,11 +276,11 @@ def log_fct( db, uid, passwd, object, method, fct_src , *args ):
|
|||
line={
|
||||
'name':field,
|
||||
'old_value':old_values[res_id][field],
|
||||
'old_value_text':get_value_text(cr,uid,field,old_values[res_id][field],model_object)
|
||||
'old_value_text': self.get_value_text(cr,uid,field,old_values[res_id][field],model_object)
|
||||
}
|
||||
lines.append(line)
|
||||
cr.commit()
|
||||
create_log_line(cr,uid,id,model_object,lines)
|
||||
self.create_log_line(cr,uid,id,model_object,lines)
|
||||
cr.close()
|
||||
return res
|
||||
|
||||
|
@ -294,28 +299,27 @@ def log_fct( db, uid, passwd, object, method, fct_src , *args ):
|
|||
line={
|
||||
'name':field,
|
||||
'old_value':old_values[res_id][field],
|
||||
'old_value_text':get_value_text(cr,uid,field,old_values[res_id][field],model_object)
|
||||
'old_value_text': self.get_value_text(cr,uid,field,old_values[res_id][field],model_object)
|
||||
}
|
||||
lines.append(line)
|
||||
cr.commit()
|
||||
create_log_line(cr,uid,id,model_object,lines)
|
||||
self.create_log_line(cr,uid,id,model_object,lines)
|
||||
res =fct_src( db, uid, passwd, object, method, *args)
|
||||
cr.close()
|
||||
return res
|
||||
cr.close()
|
||||
|
||||
def tmp_fct(fct_src):
|
||||
def execute( db, uid, passwd, object, method, *args):
|
||||
def execute(self, db, uid, passwd, object, method, *args):
|
||||
pool = pooler.get_pool(db)
|
||||
cr = pooler.get_db(db).cursor()
|
||||
cr.autocommit(True)
|
||||
obj=pool.get(object)
|
||||
logged_uids = []
|
||||
object_name=obj._name
|
||||
obj_ids= pool.get('ir.model').search(cr, uid,[('model','=',object_name)])
|
||||
model_object=pool.get('ir.model').browse(cr,uid,obj_ids)[0]
|
||||
|
||||
fct_src = super(audittrail_objects_proxy, self).execute
|
||||
|
||||
def my_fct( db, uid, passwd, object, method, *args):
|
||||
def my_fct(db, uid, passwd, object, method, *args):
|
||||
field = method
|
||||
rule = False
|
||||
obj_ids= pool.get('ir.model').search(cr, uid,[('model','=',object_name)])
|
||||
|
@ -323,12 +327,12 @@ def tmp_fct(fct_src):
|
|||
if obj_name == 'audittrail.rule':
|
||||
rule = True
|
||||
if not rule:
|
||||
return fct_src( db, uid, passwd, object, method, *args)
|
||||
return fct_src(db, uid, passwd, object, method, *args)
|
||||
if not len(obj_ids):
|
||||
return fct_src( db, uid, passwd, object, method, *args)
|
||||
return fct_src(db, uid, passwd, 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, passwd, object, method, *args)
|
||||
|
||||
for thisrule in pool.get('audittrail.rule').browse(cr, uid, rule_ids):
|
||||
for user in thisrule.user_id:
|
||||
|
@ -336,16 +340,13 @@ def tmp_fct(fct_src):
|
|||
if not len(logged_uids) or uid in logged_uids:
|
||||
if field in ('read','write','create','unlink'):
|
||||
if getattr(thisrule, 'log_'+field):
|
||||
return 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, passwd, object, method, fct_src, *args)
|
||||
return fct_src(db, uid, passwd, object, method, *args)
|
||||
res = my_fct(db, uid, passwd, object, method, *args)
|
||||
cr.close()
|
||||
return res
|
||||
return execute
|
||||
|
||||
obj = netsvc.SERVICES['object']
|
||||
obj.execute = tmp_fct(obj.execute)
|
||||
obj.exportMethod(obj.execute)
|
||||
audittrail_objects_proxy()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -26,15 +26,15 @@ import netsvc
|
|||
import pooler
|
||||
import string
|
||||
|
||||
installed = False
|
||||
objects_proxy = netsvc.SERVICES['object'].__class__
|
||||
|
||||
def fnct_call(fnct):
|
||||
def execute(*args, **argv):
|
||||
class recording_objects_proxy(objects_proxy):
|
||||
def execute(self, *args, **argv):
|
||||
if len(args) >= 6 and isinstance(args[5], dict):
|
||||
_old_args = args[5].copy()
|
||||
else:
|
||||
_old_args = None
|
||||
res = fnct(*args, **argv)
|
||||
res = super(recording_objects_proxy, self).execute(*args, **argv)
|
||||
pool = pooler.get_pool(args[0])
|
||||
mod = pool.get('ir.module.record')
|
||||
if mod and mod.recording:
|
||||
|
@ -44,39 +44,28 @@ def fnct_call(fnct):
|
|||
if args[5]:
|
||||
mod.recording_data.append(('query', args, argv,res))
|
||||
return res
|
||||
return execute
|
||||
|
||||
def fnct_call_workflow(fnct):
|
||||
def exec_workflow(*args, **argv):
|
||||
res = fnct(*args, **argv)
|
||||
def exec_workflow(self, *args, **argv):
|
||||
res = super(recording_objects_proxy, self).exec_workflow(*args, **argv)
|
||||
pool = pooler.get_pool(args[0])
|
||||
mod = pool.get('ir.module.record')
|
||||
if mod and mod.recording:
|
||||
mod.recording_data.append(('workflow', args, argv))
|
||||
return res
|
||||
return exec_workflow
|
||||
|
||||
recording_objects_proxy()
|
||||
|
||||
|
||||
class base_module_record(osv.osv):
|
||||
_name = "ir.module.record"
|
||||
_columns = {
|
||||
|
||||
}
|
||||
def __init__(self, pool, cr=None):
|
||||
global installed
|
||||
if super(base_module_record, self).__init__.func_code.co_argcount ==3:
|
||||
super(base_module_record, self).__init__(pool,cr)
|
||||
else:
|
||||
super(base_module_record, self).__init__(pool)
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.recording = 0
|
||||
self.recording_data = []
|
||||
self.depends = {}
|
||||
if not installed:
|
||||
obj = netsvc.SERVICES['object']
|
||||
obj.execute = fnct_call(obj.execute)
|
||||
obj.exportMethod(obj.execute)
|
||||
obj.exec_workflow = fnct_call_workflow(obj.exec_workflow)
|
||||
obj.exportMethod(obj.exec_workflow)
|
||||
installed = True
|
||||
super(base_module_record, self).__init__(*args, **kwargs)
|
||||
|
||||
# To Be Improved
|
||||
def _create_id(self, cr, uid, model, data):
|
||||
|
|
Loading…
Reference in New Issue