Commit 2207a150 authored by Jérome Perrin's avatar Jérome Perrin

*: make attachment_list of notification API correctly use bytes

parent efc0f734
from six.moves import cStringIO as StringIO import six
from io import BytesIO
import zipfile import zipfile
from Products.ERP5Type.Message import translateString from Products.ERP5Type.Message import translateString
...@@ -12,7 +13,7 @@ fec_file = context.AccountingTransactionModule_viewComptabiliteAsFECXML( ...@@ -12,7 +13,7 @@ fec_file = context.AccountingTransactionModule_viewComptabiliteAsFECXML(
at_date=at_date, at_date=at_date,
result_list=result_list) result_list=result_list)
zipbuffer = StringIO() zipbuffer = BytesIO()
zipfilename = at_date.strftime('FEC-%Y%m%d.zip') zipfilename = at_date.strftime('FEC-%Y%m%d.zip')
zipfileobj = zipfile.ZipFile(zipbuffer, 'w', compression=zipfile.ZIP_DEFLATED) zipfileobj = zipfile.ZipFile(zipbuffer, 'w', compression=zipfile.ZIP_DEFLATED)
zipfileobj.writestr('FEC.xml', fec_file.encode('utf8')) zipfileobj.writestr('FEC.xml', fec_file.encode('utf8'))
...@@ -23,9 +24,15 @@ attachment_list = ( ...@@ -23,9 +24,15 @@ attachment_list = (
'content': zipbuffer.getvalue(), 'content': zipbuffer.getvalue(),
'name': zipfilename, }, ) 'name': zipfilename, }, )
subject = translateString('French Accounting Transaction File')
if six.PY2:
subject = unicode(subject)
else:
subject = str(subject)
portal.ERP5Site_notifyReportComplete( portal.ERP5Site_notifyReportComplete(
user_name=user_name, user_name=user_name,
subject=unicode(translateString('French Accounting Transaction File')), subject=subject,
message='', message='',
attachment_list=attachment_list) attachment_list=attachment_list)
......
...@@ -121,9 +121,9 @@ class Url(Coordinate, UrlMixin): ...@@ -121,9 +121,9 @@ class Url(Coordinate, UrlMixin):
This method was previously named 'SendMail' and is used to send email This method was previously named 'SendMail' and is used to send email
* attachment_list is a list of dictionnaries with those keys: * attachment_list is a list of dictionnaries with those keys:
- name : name of the attachment, - name (str): name of the attachment,
- content: data of the attachment - content (bytes): data of the attachment
- mime_type: mime-type corresponding to the attachment - mime_type (str): mime-type corresponding to the attachment
* extra_headers is a dictionnary of custom headers to add to the email. * extra_headers is a dictionnary of custom headers to add to the email.
"X-" prefix is automatically added to those headers. "X-" prefix is automatically added to those headers.
""" """
......
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
* body: body of the message as UTF-8 encoded string * body: body of the message as UTF-8 encoded string
* content_type: mime type of this message, can be text/html for * content_type: mime type of this message, can be text/html for
HTML message or anything else for text/plain message. HTML message or anything else for text/plain message.
* attachment_list: a list of attachement mapping in format: * attachment_list: a list of attachment mapping in format:
- mime_type: mime type of thsi attachement - mime_type (str): mime type of thsi attachment
- content: file content of the attachement, as a string - content (bytes): file content of the attachment
- name: displayed name of this attachements - name (str): displayed name of this attachment
* embedded_file_list: a list of ERP5 File to use as attachments. * embedded_file_list: a list of ERP5 File to use as attachments.
* extra_header_dict: additional email headers * extra_header_dict: additional email headers
......
...@@ -54,6 +54,7 @@ def decode_email(file_): ...@@ -54,6 +54,7 @@ def decode_email(file_):
for key, value in msg.items(): for key, value in msg.items():
decoded_value_list = decode_header(value) decoded_value_list = decode_header(value)
unicode_value = make_header(decoded_value_list) unicode_value = make_header(decoded_value_list)
# TODO PY3
new_value = unicode_value.__unicode__().encode('utf-8') new_value = unicode_value.__unicode__().encode('utf-8')
theMail['headers'][key.lower()] = new_value theMail['headers'][key.lower()] = new_value
# Filter mail addresses # Filter mail addresses
...@@ -302,12 +303,12 @@ class TestNotificationTool(ERP5TypeTestCase): ...@@ -302,12 +303,12 @@ class TestNotificationTool(ERP5TypeTestCase):
attachment_list=[ attachment_list=[
{ {
'name': 'Attachment 1', 'name': 'Attachment 1',
'content': 'Text 1', 'content': b'Text 1',
'mime_type': 'text/plain', 'mime_type': 'text/plain',
}, },
{ {
'name': 'Attachment 2', 'name': 'Attachment 2',
'content': 'Text 2', 'content': b'Text 2',
'mime_type': 'application/octet-stream', 'mime_type': 'application/octet-stream',
}, },
]) ])
...@@ -322,8 +323,8 @@ class TestNotificationTool(ERP5TypeTestCase): ...@@ -322,8 +323,8 @@ class TestNotificationTool(ERP5TypeTestCase):
mail_dict = decode_email(messageText) mail_dict = decode_email(messageText)
self.assertEqual(mail_dict['headers']['subject'], 'Subject') self.assertEqual(mail_dict['headers']['subject'], 'Subject')
self.assertEqual(mail_dict['body'], 'Message') self.assertEqual(mail_dict['body'], 'Message')
self.assertSameSet([('Attachment 1', 'text/plain', 'Text 1'), self.assertSameSet([('Attachment 1', 'text/plain', b'Text 1'),
('Attachment 2', 'application/octet-stream', 'Text 2')], ('Attachment 2', 'application/octet-stream', b'Text 2')],
mail_dict['attachment_list']) mail_dict['attachment_list'])
def test_07_AttachmentMessage(self): def test_07_AttachmentMessage(self):
......
...@@ -30,7 +30,7 @@ with portal.Localizer.translationContext(localizer_language): ...@@ -30,7 +30,7 @@ with portal.Localizer.translationContext(localizer_language):
attachment_name = attachment_name[:-1] attachment_name = attachment_name[:-1]
attachment_list = ( attachment_list = (
{'mime_type': (request.RESPONSE.getHeader('content-type') or 'application/octet-stream;').split(';')[0], {'mime_type': (request.RESPONSE.getHeader('content-type') or 'application/octet-stream;').split(';')[0],
'content': '%s' % report_data, 'content': bytes(report_data),
'name': attachment_name},) 'name': attachment_name},)
getattr(portal, notify_report_complete_script_id)( getattr(portal, notify_report_complete_script_id)(
......
...@@ -49,7 +49,7 @@ with portal.Localizer.translationContext(localizer_language): ...@@ -49,7 +49,7 @@ with portal.Localizer.translationContext(localizer_language):
attachment_list = ( attachment_list = (
{'mime_type': (request.RESPONSE.getHeader('content-type') or 'application/octet-stream;').split(';')[0], {'mime_type': (request.RESPONSE.getHeader('content-type') or 'application/octet-stream;').split(';')[0],
'content': '%s' % report_data, 'content': bytes(report_data),
'name': attachment_name},) 'name': attachment_name},)
getattr(portal, notify_report_complete_script_id)( getattr(portal, notify_report_complete_script_id)(
......
...@@ -355,7 +355,7 @@ class Alarm(XMLObject, PeriodicityMixin): ...@@ -355,7 +355,7 @@ class Alarm(XMLObject, PeriodicityMixin):
for x in result_list] for x in result_list]
rendered_alarm_result = '\n'.join(rendered_alarm_result_list) rendered_alarm_result = '\n'.join(rendered_alarm_result_list)
attachment_list.append({'name': 'alarm_result.txt', attachment_list.append({'name': 'alarm_result.txt',
'content': rendered_alarm_result, 'content': rendered_alarm_result.encode(),
'mime_type': 'text/plain'}) 'mime_type': 'text/plain'})
notification_tool.sendMessage(recipient=candidate_list, notification_tool.sendMessage(recipient=candidate_list,
......
...@@ -109,9 +109,9 @@ def buildEmailMessage(from_url, to_url, msg=None, ...@@ -109,9 +109,9 @@ def buildEmailMessage(from_url, to_url, msg=None,
sent by Zope MailHost. sent by Zope MailHost.
* attachment_list is a list of dictionaries with those keys: * attachment_list is a list of dictionaries with those keys:
- name : name of the attachment, - name (str): name of the attachment
- content: data of the attachment - content (bytes): data of the attachment
- mime_type: mime-type corresponding to the attachment - mime_type (str): mime-type corresponding to the attachment
* extra_headers is a dictionary of custom headers to add to the email. * extra_headers is a dictionary of custom headers to add to the email.
"X-" prefix is automatically added to those headers. "X-" prefix is automatically added to those headers.
* additional_headers is similar to extra_headers, but no prefix is added. * additional_headers is similar to extra_headers, but no prefix is added.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment