From 5ad5baa6ab8b2d1ba7bedd4f917e296c7349739f Mon Sep 17 00:00:00 2001 From: holger krekel Date: Wed, 17 Oct 2018 11:40:48 +0200 Subject: [PATCH] move get_mime_headers() function to Message object where it belongs. also simplify creating a mime object from the headers ... --- python/src/deltachat/account.py | 21 --------------------- python/src/deltachat/message.py | 16 ++++++++++++++++ python/tests/test_account.py | 5 ++--- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/python/src/deltachat/account.py b/python/src/deltachat/account.py index 7ed0f21b..29262df2 100644 --- a/python/src/deltachat/account.py +++ b/python/src/deltachat/account.py @@ -2,7 +2,6 @@ from __future__ import print_function import threading -import six import re import time import requests @@ -223,26 +222,6 @@ class Account(object): """ return Message instance. """ return Message.from_db(self._dc_context, msg_id) - def get_mime_headers(self, msg): - """ return mime-header object for an incoming message. - - This only returns a non-None object if ``save_mime_headers`` - config option was set and ``msg_id`` refers to an incoming - message. - - :param msg_id: integer message id - :returns: email-mime message object. - """ - import email.parser - msg_id = getattr(msg, "id", msg) - mime_headers = lib.dc_get_mime_headers(self._dc_context, msg_id) - if mime_headers: - s = ffi.string(mime_headers) - if isinstance(s, bytes): - s = s.decode("ascii") - fp = six.StringIO(s) - return email.parser.Parser().parse(fp) - def mark_seen_messages(self, messages): """ mark the given set of messages as seen. diff --git a/python/src/deltachat/message.py b/python/src/deltachat/message.py index 000d3aa2..e6d299df 100644 --- a/python/src/deltachat/message.py +++ b/python/src/deltachat/message.py @@ -109,6 +109,22 @@ class Message(object): if ts: return datetime.utcfromtimestamp(ts) + def get_mime_headers(self): + """ return mime-header object for an incoming message. + + This only returns a non-None object if ``save_mime_headers`` + config option was set and the message is incoming. + + :returns: email-mime message object (with headers only, no body). + """ + import email.parser + mime_headers = lib.dc_get_mime_headers(self._dc_context, self.id) + if mime_headers: + s = ffi.string(mime_headers) + if isinstance(s, bytes): + s = s.decode("ascii") + return email.message_from_string(s) + @property def chat(self): """chat this message was posted in. diff --git a/python/tests/test_account.py b/python/tests/test_account.py index 978e4ef3..4571e3ac 100644 --- a/python/tests/test_account.py +++ b/python/tests/test_account.py @@ -291,15 +291,14 @@ class TestOnlineAccount: lp.sec("sending text message from ac1 to ac2") msg_out = chat.send_text("message1") ac1._evlogger.get_matching("DC_EVENT_MSG_DELIVERED") - assert ac1.get_mime_headers(msg_out.id) is None + assert msg_out.get_mime_headers() is None lp.sec("wait for ac2 to receive message") ev = ac2._evlogger.get_matching("DC_EVENT_MSGS_CHANGED") in_id = ev[2] - mime = ac2.get_mime_headers(in_id) + mime = ac2.get_message_by_id(in_id).get_mime_headers() assert mime.get_all("From") assert mime.get_all("Received") - assert ac2.get_mime_headers(ac2.get_message_by_id(in_id)).get_all("From") def test_send_and_receive_image(self, acfactory, lp, data): lp.sec("starting accounts, waiting for configuration")