openerp-india team mailing list archive
-
openerp-india team
-
Mailing list archive
-
Message #22293
[Bug 1103693] Re: [7.0] email_template crashes in send_mail if there is an attachment
** Description changed:
If there is an email template with a report attached to it then this
template crashes in send_mail() method.
- I traced it and it turns out the reason why it crashes is that send_mail() method iterates over attachments.iteritems() which implies that attachments is a dictionary.
+ Steps to reproduce:
+
+ 1. Create a new database with demo data in it
+
+ 2. Install module 'Warehouse Management'
+
+ 3. Go to Settings/Users/Users and enable Technical Features for
+ administrator
+
+ 4. Go to Settings/Technical/Email/Templates and create a new template:
+ name: test template
+ applies to: Picking List
+ From: example@xxxxxxxxxxx
+ To: example@xxxxxxxxxxx
+ Subject: Example Subject
+ in Advanced Tab select 'Picking' List as Optional report to print and attach
+
+ 5. Go to Settings/Technical/Actions/Server Action and create a new server action:
+ Action name: Auto Send Email
+ Object: Picking List
+ Action Type: Python Code
+ Condition: object.type == 'out'
+ Python Code:
+ template_obj = self.pool.get('email.template')
+ tpl = template_obj.search(cr,uid,[('name','=','test template')])[0]
+ template_obj.send_mail(cr,uid,tpl,object.id, True, context)
+
+ 6. Go to Settings/Technical/Workflows/Activities and edit activity named 'done' for Workflow 'stock.picking.basic':
+ Change Server Action from empty to 'Auto Send Email'
+
+ 7. Go to Warehouse and create any delivery order to any customer
+
+ 8. Confirm and deliver the order. You'll see the error with the stack
+ trace below.
+
+ I traced it and it turns out the reason why it crashes is that send_mail() method iterates over attachments.iteritems() which implies that attachments is a dictionary.
In fact the variable attachments is generated by generate_email() method where it is created as a list.
Here is the stack trace:
Client Traceback (most recent call last):
- File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/http.py", line 195, in dispatch
- response["result"] = method(self, **self.params)
- File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1082, in call_button
- action = self._call_kw(req, model, method, args, {})
- File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1070, in _call_kw
- return getattr(req.session.model(model), method)(*args, **kwargs)
- File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 43, in proxy
- result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw)
- File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 31, in proxy_method
- result = self.session.send(self.service_name, method, *args)
- File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 104, in send
- raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
-
+ File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/http.py", line 195, in dispatch
+ response["result"] = method(self, **self.params)
+ File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1082, in call_button
+ action = self._call_kw(req, model, method, args, {})
+ File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1070, in _call_kw
+ return getattr(req.session.model(model), method)(*args, **kwargs)
+ File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 43, in proxy
+ result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw)
+ File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 31, in proxy_method
+ result = self.session.send(self.service_name, method, *args)
+ File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 104, in send
+ raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
Server Traceback (most recent call last):
- File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 90, in send
- return openerp.netsvc.dispatch_rpc(service_name, method, args)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/netsvc.py", line 289, in dispatch_rpc
- result = ExportService.getService(service_name).dispatch(method, params)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/service/web_services.py", line 614, in dispatch
- res = fn(db, uid, *params)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 169, in execute_kw
- return self.execute(db, uid, obj, method, *args, **kw or {})
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 123, in wrapper
- return f(self, dbname, *args, **kwargs)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 179, in execute
- res = self.execute_cr(cr, uid, obj, method, *args, **kw)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 166, in execute_cr
- return getattr(object, method)(cr, uid, *args, **kw)
- File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/wizard/stock_partial_picking.py", line 214, in do_partial
- stock_picking.do_partial(cr, uid, [partial.picking_id.id], partial_data, context=context)
- File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 1358, in do_partial
- self.action_move(cr, uid, [pick.id], context=context)
- File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 900, in action_move
- context=context)
- File "/home/etsinko/work/OpenErp7.0/upsi_addons/mrp_prodlot_autosplit/stock.py", line 80, in action_done
- result = super(stock_move, self).action_done(cr, uid, ids, context)
- File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 2389, in action_done
- wf_service.trg_write(uid, 'stock.picking', pick_id, cr)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_service.py", line 55, in trg_write
- instance.update(cr, id, ident)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/instance.py", line 52, in update
- workitem.process(cr, witem, ident, stack=stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
- ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
- _join_test(cr, t[0], t[1], ident, stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
- create(cr,[activity], inst_id, ident, stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
- process(cr, res, ident, stack=stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
- ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
- _join_test(cr, t[0], t[1], ident, stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
- create(cr,[activity], inst_id, ident, stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
- process(cr, res, ident, stack=stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 52, in process
- result = _execute(cr, workitem, activity, ident, stack)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 110, in _execute
- res2 = wkf_expr.execute_action(cr, ident, workitem, activity)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_expr.py", line 63, in execute_action
- result = obj.run(cr, ident[0], [activity['action_id']], ctx)
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/addons/base/ir/ir_actions.py", line 611, in run
- eval(action.code, cxt, mode="exec", nocopy=True) # nocopy allows to return 'action'
- File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/tools/safe_eval.py", line 241, in safe_eval
- return eval(test_expr(expr, _SAFE_OPCODES, mode=mode), globals_dict, locals_dict)
- File "", line 3, in <module>
- File "/home/etsinko/work/OpenErp7.0/openerp/addons/email_template/email_template.py", line 378, in send_mail
- for fname, fcontent in attachments.iteritems():
+ File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 90, in send
+ return openerp.netsvc.dispatch_rpc(service_name, method, args)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/netsvc.py", line 289, in dispatch_rpc
+ result = ExportService.getService(service_name).dispatch(method, params)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/service/web_services.py", line 614, in dispatch
+ res = fn(db, uid, *params)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 169, in execute_kw
+ return self.execute(db, uid, obj, method, *args, **kw or {})
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 123, in wrapper
+ return f(self, dbname, *args, **kwargs)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 179, in execute
+ res = self.execute_cr(cr, uid, obj, method, *args, **kw)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 166, in execute_cr
+ return getattr(object, method)(cr, uid, *args, **kw)
+ File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/wizard/stock_partial_picking.py", line 214, in do_partial
+ stock_picking.do_partial(cr, uid, [partial.picking_id.id], partial_data, context=context)
+ File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 1358, in do_partial
+ self.action_move(cr, uid, [pick.id], context=context)
+ File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 900, in action_move
+ context=context)
+ File "/home/etsinko/work/OpenErp7.0/upsi_addons/mrp_prodlot_autosplit/stock.py", line 80, in action_done
+ result = super(stock_move, self).action_done(cr, uid, ids, context)
+ File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 2389, in action_done
+ wf_service.trg_write(uid, 'stock.picking', pick_id, cr)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_service.py", line 55, in trg_write
+ instance.update(cr, id, ident)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/instance.py", line 52, in update
+ workitem.process(cr, witem, ident, stack=stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
+ ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
+ _join_test(cr, t[0], t[1], ident, stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
+ create(cr,[activity], inst_id, ident, stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
+ process(cr, res, ident, stack=stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
+ ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
+ _join_test(cr, t[0], t[1], ident, stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
+ create(cr,[activity], inst_id, ident, stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
+ process(cr, res, ident, stack=stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 52, in process
+ result = _execute(cr, workitem, activity, ident, stack)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 110, in _execute
+ res2 = wkf_expr.execute_action(cr, ident, workitem, activity)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_expr.py", line 63, in execute_action
+ result = obj.run(cr, ident[0], [activity['action_id']], ctx)
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/addons/base/ir/ir_actions.py", line 611, in run
+ eval(action.code, cxt, mode="exec", nocopy=True) # nocopy allows to return 'action'
+ File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/tools/safe_eval.py", line 241, in safe_eval
+ return eval(test_expr(expr, _SAFE_OPCODES, mode=mode), globals_dict, locals_dict)
+ File "", line 3, in <module>
+ File "/home/etsinko/work/OpenErp7.0/openerp/addons/email_template/email_template.py", line 378, in send_mail
+ for fname, fcontent in attachments.iteritems():
AttributeError: 'list' object has no attribute 'iteritems'
** Description changed:
If there is an email template with a report attached to it then this
template crashes in send_mail() method.
Steps to reproduce:
1. Create a new database with demo data in it
2. Install module 'Warehouse Management'
3. Go to Settings/Users/Users and enable Technical Features for
administrator
4. Go to Settings/Technical/Email/Templates and create a new template:
name: test template
applies to: Picking List
From: example@xxxxxxxxxxx
To: example@xxxxxxxxxxx
Subject: Example Subject
- in Advanced Tab select 'Picking' List as Optional report to print and attach
+ in Advanced Tab select 'Picking List' as Optional report to print and attach
5. Go to Settings/Technical/Actions/Server Action and create a new server action:
Action name: Auto Send Email
Object: Picking List
Action Type: Python Code
Condition: object.type == 'out'
Python Code:
template_obj = self.pool.get('email.template')
tpl = template_obj.search(cr,uid,[('name','=','test template')])[0]
template_obj.send_mail(cr,uid,tpl,object.id, True, context)
6. Go to Settings/Technical/Workflows/Activities and edit activity named 'done' for Workflow 'stock.picking.basic':
Change Server Action from empty to 'Auto Send Email'
7. Go to Warehouse and create any delivery order to any customer
8. Confirm and deliver the order. You'll see the error with the stack
trace below.
I traced it and it turns out the reason why it crashes is that send_mail() method iterates over attachments.iteritems() which implies that attachments is a dictionary.
In fact the variable attachments is generated by generate_email() method where it is created as a list.
Here is the stack trace:
Client Traceback (most recent call last):
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/http.py", line 195, in dispatch
response["result"] = method(self, **self.params)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1082, in call_button
action = self._call_kw(req, model, method, args, {})
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1070, in _call_kw
return getattr(req.session.model(model), method)(*args, **kwargs)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 43, in proxy
result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 31, in proxy_method
result = self.session.send(self.service_name, method, *args)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 104, in send
raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
Server Traceback (most recent call last):
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 90, in send
return openerp.netsvc.dispatch_rpc(service_name, method, args)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/netsvc.py", line 289, in dispatch_rpc
result = ExportService.getService(service_name).dispatch(method, params)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/service/web_services.py", line 614, in dispatch
res = fn(db, uid, *params)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 169, in execute_kw
return self.execute(db, uid, obj, method, *args, **kw or {})
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 123, in wrapper
return f(self, dbname, *args, **kwargs)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 179, in execute
res = self.execute_cr(cr, uid, obj, method, *args, **kw)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 166, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/wizard/stock_partial_picking.py", line 214, in do_partial
stock_picking.do_partial(cr, uid, [partial.picking_id.id], partial_data, context=context)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 1358, in do_partial
self.action_move(cr, uid, [pick.id], context=context)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 900, in action_move
context=context)
File "/home/etsinko/work/OpenErp7.0/upsi_addons/mrp_prodlot_autosplit/stock.py", line 80, in action_done
result = super(stock_move, self).action_done(cr, uid, ids, context)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 2389, in action_done
wf_service.trg_write(uid, 'stock.picking', pick_id, cr)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_service.py", line 55, in trg_write
instance.update(cr, id, ident)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/instance.py", line 52, in update
workitem.process(cr, witem, ident, stack=stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
_join_test(cr, t[0], t[1], ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
create(cr,[activity], inst_id, ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
process(cr, res, ident, stack=stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
_join_test(cr, t[0], t[1], ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
create(cr,[activity], inst_id, ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
process(cr, res, ident, stack=stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 52, in process
result = _execute(cr, workitem, activity, ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 110, in _execute
res2 = wkf_expr.execute_action(cr, ident, workitem, activity)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_expr.py", line 63, in execute_action
result = obj.run(cr, ident[0], [activity['action_id']], ctx)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/addons/base/ir/ir_actions.py", line 611, in run
eval(action.code, cxt, mode="exec", nocopy=True) # nocopy allows to return 'action'
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/tools/safe_eval.py", line 241, in safe_eval
return eval(test_expr(expr, _SAFE_OPCODES, mode=mode), globals_dict, locals_dict)
File "", line 3, in <module>
File "/home/etsinko/work/OpenErp7.0/openerp/addons/email_template/email_template.py", line 378, in send_mail
for fname, fcontent in attachments.iteritems():
AttributeError: 'list' object has no attribute 'iteritems'
--
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Addons.
https://bugs.launchpad.net/bugs/1103693
Title:
[7.0] email_template crashes in send_mail if there is an attachment
Status in OpenERP Addons (modules):
New
Bug description:
If there is an email template with a report attached to it then this
template crashes in send_mail() method.
Steps to reproduce:
1. Create a new database with demo data in it
2. Install module 'Warehouse Management'
3. Go to Settings/Users/Users and enable Technical Features for
administrator
4. Go to Settings/Technical/Email/Templates and create a new template:
name: test template
applies to: Picking List
From: example@xxxxxxxxxxx
To: example@xxxxxxxxxxx
Subject: Example Subject
in Advanced Tab select 'Picking List' as Optional report to print and attach
5. Go to Settings/Technical/Actions/Server Action and create a new server action:
Action name: Auto Send Email
Object: Picking List
Action Type: Python Code
Condition: object.type == 'out'
Python Code:
template_obj = self.pool.get('email.template')
tpl = template_obj.search(cr,uid,[('name','=','test template')])[0]
template_obj.send_mail(cr,uid,tpl,object.id, True, context)
6. Go to Settings/Technical/Workflows/Activities and edit activity named 'done' for Workflow 'stock.picking.basic':
Change Server Action from empty to 'Auto Send Email'
7. Go to Warehouse and create any delivery order to any customer
8. Confirm and deliver the order. You'll see the error with the stack
trace below.
I traced it and it turns out the reason why it crashes is that send_mail() method iterates over attachments.iteritems() which implies that attachments is a dictionary.
In fact the variable attachments is generated by generate_email() method where it is created as a list.
Here is the stack trace:
Client Traceback (most recent call last):
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/http.py", line 195, in dispatch
response["result"] = method(self, **self.params)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1082, in call_button
action = self._call_kw(req, model, method, args, {})
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/controllers/main.py", line 1070, in _call_kw
return getattr(req.session.model(model), method)(*args, **kwargs)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 43, in proxy
result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 31, in proxy_method
result = self.session.send(self.service_name, method, *args)
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 104, in send
raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
Server Traceback (most recent call last):
File "/home/etsinko/work/OpenErp7.0/openerp/web/addons/web/session.py", line 90, in send
return openerp.netsvc.dispatch_rpc(service_name, method, args)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/netsvc.py", line 289, in dispatch_rpc
result = ExportService.getService(service_name).dispatch(method, params)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/service/web_services.py", line 614, in dispatch
res = fn(db, uid, *params)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 169, in execute_kw
return self.execute(db, uid, obj, method, *args, **kw or {})
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 123, in wrapper
return f(self, dbname, *args, **kwargs)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 179, in execute
res = self.execute_cr(cr, uid, obj, method, *args, **kw)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/osv/osv.py", line 166, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/wizard/stock_partial_picking.py", line 214, in do_partial
stock_picking.do_partial(cr, uid, [partial.picking_id.id], partial_data, context=context)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 1358, in do_partial
self.action_move(cr, uid, [pick.id], context=context)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 900, in action_move
context=context)
File "/home/etsinko/work/OpenErp7.0/upsi_addons/mrp_prodlot_autosplit/stock.py", line 80, in action_done
result = super(stock_move, self).action_done(cr, uid, ids, context)
File "/home/etsinko/work/OpenErp7.0/openerp/addons/stock/stock.py", line 2389, in action_done
wf_service.trg_write(uid, 'stock.picking', pick_id, cr)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_service.py", line 55, in trg_write
instance.update(cr, id, ident)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/instance.py", line 52, in update
workitem.process(cr, witem, ident, stack=stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
_join_test(cr, t[0], t[1], ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
create(cr,[activity], inst_id, ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
process(cr, res, ident, stack=stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 60, in process
ok = _split_test(cr, workitem, activity['split_mode'], ident, signal, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 175, in _split_test
_join_test(cr, t[0], t[1], ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 183, in _join_test
create(cr,[activity], inst_id, ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 40, in create
process(cr, res, ident, stack=stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 52, in process
result = _execute(cr, workitem, activity, ident, stack)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/workitem.py", line 110, in _execute
res2 = wkf_expr.execute_action(cr, ident, workitem, activity)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/workflow/wkf_expr.py", line 63, in execute_action
result = obj.run(cr, ident[0], [activity['action_id']], ctx)
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/addons/base/ir/ir_actions.py", line 611, in run
eval(action.code, cxt, mode="exec", nocopy=True) # nocopy allows to return 'action'
File "/home/etsinko/work/OpenErp7.0/openerp/server/openerp/tools/safe_eval.py", line 241, in safe_eval
return eval(test_expr(expr, _SAFE_OPCODES, mode=mode), globals_dict, locals_dict)
File "", line 3, in <module>
File "/home/etsinko/work/OpenErp7.0/openerp/addons/email_template/email_template.py", line 378, in send_mail
for fname, fcontent in attachments.iteritems():
AttributeError: 'list' object has no attribute 'iteritems'
To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-addons/+bug/1103693/+subscriptions
References