openerp-india team mailing list archive
-
openerp-india team
-
Mailing list archive
-
Message #22699
[Bug 1103693] Re: [Trunk/7.0] email_template crashes in send_mail if there is an attachment
Hello,
Thanks for reporting!
It has been fixed on lp:~openerp-dev/openobject-addons/trunk-
bug-1103693-amb branch with following revision no and id.
rev no : 8526
rev id : 8526 amb@xxxxxxxxxxx-20130131134555-hefg60i1fpn0j72m
It will be available in trunk soon.
Thanks again!
** Changed in: openobject-addons
Status: Confirmed => Fix Committed
--
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:
[Trunk/7.0] email_template crashes in send_mail if there is an
attachment
Status in OpenERP Addons (modules):
Fix Committed
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