* stream object should be BytesIO instead of StringIO * Convert filter to list explicitly before checking length * Decode sent_email and content before string operationsversion-14
@@ -117,13 +117,13 @@ class TestEvent(unittest.TestCase): | |||||
ev.insert() | ev.insert() | ||||
ev_list = get_events("2014-02-01", "2014-02-01", "Administrator", for_reminder=True) | ev_list = get_events("2014-02-01", "2014-02-01", "Administrator", for_reminder=True) | ||||
self.assertTrue(filter(lambda e: e.name==ev.name, ev_list)) | |||||
self.assertTrue(list(filter(lambda e: e.name==ev.name, ev_list))) | |||||
ev_list1 = get_events("2015-01-20", "2015-01-20", "Administrator", for_reminder=True) | ev_list1 = get_events("2015-01-20", "2015-01-20", "Administrator", for_reminder=True) | ||||
self.assertFalse(filter(lambda e: e.name==ev.name, ev_list1)) | |||||
self.assertFalse(list(filter(lambda e: e.name==ev.name, ev_list1))) | |||||
ev_list2 = get_events("2014-02-20", "2014-02-20", "Administrator", for_reminder=True) | ev_list2 = get_events("2014-02-20", "2014-02-20", "Administrator", for_reminder=True) | ||||
self.assertFalse(filter(lambda e: e.name==ev.name, ev_list2)) | |||||
self.assertFalse(list(filter(lambda e: e.name==ev.name, ev_list2))) | |||||
ev_list3 = get_events("2015-02-01", "2015-02-01", "Administrator", for_reminder=True) | ev_list3 = get_events("2015-02-01", "2015-02-01", "Administrator", for_reminder=True) | ||||
self.assertTrue(filter(lambda e: e.name==ev.name, ev_list3)) | |||||
self.assertTrue(list(filter(lambda e: e.name==ev.name, ev_list3))) |
@@ -111,7 +111,7 @@ class TestEmailAccount(unittest.TestCase): | |||||
frappe.sendmail(sender="test_sender@example.com", recipients="test_recipient@example.com", | frappe.sendmail(sender="test_sender@example.com", recipients="test_recipient@example.com", | ||||
content="test mail 001", subject="test-mail-001", delayed=False) | content="test mail 001", subject="test-mail-001", delayed=False) | ||||
sent_mail = email.message_from_string(frappe.flags.sent_mail) | |||||
sent_mail = email.message_from_string(frappe.flags.sent_mail.decode()) | |||||
self.assertTrue("test-mail-001" in sent_mail.get("Subject")) | self.assertTrue("test-mail-001" in sent_mail.get("Subject")) | ||||
def test_print_format(self): | def test_print_format(self): | ||||
@@ -49,7 +49,7 @@ class TestEmail(unittest.TestCase): | |||||
self.assertTrue('test@example.com' in queue_recipients) | self.assertTrue('test@example.com' in queue_recipients) | ||||
self.assertTrue('test1@example.com' in queue_recipients) | self.assertTrue('test1@example.com' in queue_recipients) | ||||
self.assertEquals(len(queue_recipients), 2) | self.assertEquals(len(queue_recipients), 2) | ||||
self.assertTrue('Unsubscribe' in frappe.flags.sent_mail) | |||||
self.assertTrue('Unsubscribe' in frappe.flags.sent_mail.decode()) | |||||
def test_cc_header(self): | def test_cc_header(self): | ||||
#test if sending with cc's makes it into header | #test if sending with cc's makes it into header | ||||
@@ -84,7 +84,7 @@ class TestEmail(unittest.TestCase): | |||||
self.assertTrue('test@example.com' in queue_recipients) | self.assertTrue('test@example.com' in queue_recipients) | ||||
self.assertTrue('test1@example.com' in queue_recipients) | self.assertTrue('test1@example.com' in queue_recipients) | ||||
self.assertTrue('This email was sent to test@example.com and copied to test1@example.com' in frappe.flags.sent_mail) | |||||
self.assertTrue('This email was sent to test@example.com and copied to test1@example.com' in frappe.flags.sent_mail.decode()) | |||||
def test_expose(self): | def test_expose(self): | ||||
from frappe.utils.verified_command import verify_request | from frappe.utils.verified_command import verify_request | ||||
@@ -104,12 +104,12 @@ class TestEmail(unittest.TestCase): | |||||
where status='Sent'""", as_dict=1)[0].message | where status='Sent'""", as_dict=1)[0].message | ||||
self.assertTrue('<!--recipient-->' in message) | self.assertTrue('<!--recipient-->' in message) | ||||
email_obj = email.message_from_string(frappe.flags.sent_mail) | |||||
email_obj = email.message_from_string(frappe.flags.sent_mail.decode()) | |||||
for part in email_obj.walk(): | for part in email_obj.walk(): | ||||
content = part.get_payload(decode=True) | content = part.get_payload(decode=True) | ||||
if content: | if content: | ||||
frappe.local.flags.signed_query_string = re.search('(?<=/api/method/frappe.email.queue.unsubscribe\?).*(?=\n)', content).group(0) | |||||
frappe.local.flags.signed_query_string = re.search('(?<=/api/method/frappe.email.queue.unsubscribe\?).*(?=\n)', content.decode()).group(0) | |||||
self.assertTrue(verify_request()) | self.assertTrue(verify_request()) | ||||
break | break | ||||
@@ -150,7 +150,7 @@ class TestEmail(unittest.TestCase): | |||||
self.assertFalse('test@example.com' in queue_recipients) | self.assertFalse('test@example.com' in queue_recipients) | ||||
self.assertTrue('test1@example.com' in queue_recipients) | self.assertTrue('test1@example.com' in queue_recipients) | ||||
self.assertEquals(len(queue_recipients), 1) | self.assertEquals(len(queue_recipients), 1) | ||||
self.assertTrue('Unsubscribe' in frappe.flags.sent_mail) | |||||
self.assertTrue('Unsubscribe' in frappe.flags.sent_mail.decode()) | |||||
def test_email_queue_limit(self): | def test_email_queue_limit(self): | ||||
from frappe.email.queue import send, EmailLimitCrossedError | from frappe.email.queue import send, EmailLimitCrossedError | ||||
@@ -9,7 +9,7 @@ import pyotp, os | |||||
from frappe.utils.background_jobs import enqueue | from frappe.utils.background_jobs import enqueue | ||||
from jinja2 import Template | from jinja2 import Template | ||||
from pyqrcode import create as qrcreate | from pyqrcode import create as qrcreate | ||||
from six import StringIO | |||||
from six import BytesIO | |||||
from base64 import b64encode, b32encode | from base64 import b64encode, b32encode | ||||
from frappe.utils import get_url, get_datetime, time_diff_in_seconds | from frappe.utils import get_url, get_datetime, time_diff_in_seconds | ||||
from six import iteritems, string_types | from six import iteritems, string_types | ||||
@@ -318,11 +318,11 @@ def get_qr_svg_code(totp_uri): | |||||
'''Get SVG code to display Qrcode for OTP.''' | '''Get SVG code to display Qrcode for OTP.''' | ||||
url = qrcreate(totp_uri) | url = qrcreate(totp_uri) | ||||
svg = '' | svg = '' | ||||
stream = StringIO() | |||||
stream = BytesIO() | |||||
try: | try: | ||||
url.svg(stream, scale=4, background="#eee", module_color="#222") | url.svg(stream, scale=4, background="#eee", module_color="#222") | ||||
svg = stream.getvalue().replace('\n', '') | |||||
svg = b64encode(bytes(svg)) | |||||
svg = stream.getvalue().decode().replace('\n', '') | |||||
svg = b64encode(svg.encode()) | |||||
finally: | finally: | ||||
stream.close() | stream.close() | ||||
return svg | return svg | ||||