Update get_email test to use unicode characters; seem to have found an encoding errory in get_email, provided a fix that satisfies test

This commit is contained in:
Garret Wassermann
2017-04-03 01:53:25 -04:00
parent b5fa489643
commit 74a7afadb9
2 changed files with 28 additions and 39 deletions

View File

@ -159,7 +159,7 @@ def process_queue(q, logger):
msgNum = msg.split(" ")[0]
logger.info("Processing message %s" % msgNum)
full_message = encoding.force_text("\n".join(server.retr(msgNum)[1]), errors='ignore')
full_message = encoding.force_text("\n".join(server.retr(msgNum)[1]), errors='replace')
ticket = ticket_from_message(message=full_message, queue=q, logger=logger)
if ticket:
@ -199,7 +199,7 @@ def process_queue(q, logger):
for num in msgnums:
logger.info("Processing message %s" % num)
status, data = server.fetch(num, '(RFC822)')
full_message = encoding.force_text(data[0][1], errors='ignore')
full_message = encoding.force_text(data[0][1], errors='replace')
ticket = ticket_from_message(message=full_message, queue=q, logger=logger)
if ticket:
server.store(num, '+FLAGS', '\\Deleted')
@ -220,7 +220,7 @@ def process_queue(q, logger):
for i, m in enumerate(mail, 1):
logger.info("Processing message %d" % i)
with open(m, 'r') as f:
full_message = encoding.force_text(f.read(), errors='ignore')
full_message = encoding.force_text(f.read(), errors='replace')
ticket = ticket_from_message(message=full_message, queue=q, logger=logger)
if ticket:
logger.info("Successfully processed message %d, ticket/comment created." % i)
@ -238,18 +238,18 @@ def decodeUnknown(charset, string):
if six.PY2:
if not charset:
try:
return string.decode('utf-8', 'ignore')
return string.decode('utf-8', 'replace')
except:
return string.decode('iso8859-1', 'ignore')
return string.decode('iso8859-1', 'replace')
return unicode(string, charset)
elif six.PY3:
if type(string) is not str:
if not charset:
try:
return str(string, encoding='utf-8', errors='ignore')
return str(string, encoding='utf-8', errors='replace')
except:
return str(string, encoding='iso8859-1', errors='ignore')
return str(string, encoding=charset, errors='ignore')
return str(string, encoding='iso8859-1', errors='replace')
return str(string, encoding=charset, errors='replace')
return string
@ -258,7 +258,7 @@ def decode_mail_headers(string):
if six.PY2:
return u' '.join([unicode(msg, charset or 'utf-8') for msg, charset in decoded])
elif six.PY3:
return u' '.join([str(msg, encoding=charset, errors='ignore') if charset else str(msg) for msg, charset in decoded])
return u' '.join([str(msg, encoding=charset, errors='replace') if charset else str(msg) for msg, charset in decoded])
def ticket_from_message(message, queue, logger):
@ -305,9 +305,11 @@ def ticket_from_message(message, queue, logger):
if part.get_content_maintype() == 'text' and name is None:
if part.get_content_subtype() == 'plain':
body = encoding.force_text(EmailReplyParser.parse_reply(
decodeUnknown(part.get_content_charset(), encoding.force_text(part.get_payload(decode=True)))
))
body = EmailReplyParser.parse_reply(
decodeUnknown(part.get_content_charset(), part.get_payload(decode=True))
)
# workaround to get unicode text out rather than escaped text
body = body.encode('ascii').decode('unicode_escape')
logger.debug("Discovered plain text MIME part")
else:
files.append(