1.1 --- a/MoinMessage.py Sun Oct 28 22:27:35 2012 +0100
1.2 +++ b/MoinMessage.py Mon Oct 29 22:36:16 2012 +0100
1.3 @@ -17,12 +17,38 @@
1.4 import httplib
1.5 import os
1.6
1.7 +def is_collection(message):
1.8 + return message.get("Update-Type") == "collection"
1.9 +
1.10 class Message:
1.11
1.12 "An update message."
1.13
1.14 - def __init__(self):
1.15 + def __init__(self, text=None):
1.16 self.updates = []
1.17 + if text:
1.18 + self.parse_text(text)
1.19 +
1.20 + def parse_text(self, text):
1.21 +
1.22 + "Parse the given 'text' as a message."
1.23 +
1.24 + self.handle_message(message_from_string(text))
1.25 +
1.26 + def handle_message(self, message):
1.27 +
1.28 + "Handle the given 'message', recording the separate updates."
1.29 +
1.30 + # The message either consists of a collection of updates.
1.31 +
1.32 + if message.is_multipart() and is_collection(message):
1.33 + for part in message.get_payload():
1.34 + self.updates.append(part)
1.35 +
1.36 + # Or the message is a single update.
1.37 +
1.38 + else:
1.39 + self.updates.append(message)
1.40
1.41 def add_update(self, alternatives):
1.42
1.43 @@ -54,6 +80,43 @@
1.44
1.45 return message
1.46
1.47 +class Mailbox:
1.48 +
1.49 + "A collection of messages within a multipart message."
1.50 +
1.51 + def __init__(self, text=None):
1.52 + self.messages = []
1.53 + if text:
1.54 + self.parse_text(text)
1.55 +
1.56 + def parse_text(self, text):
1.57 +
1.58 + "Parse the given 'text' as a mailbox."
1.59 +
1.60 + message = message_from_string(text)
1.61 +
1.62 + if message.is_multipart():
1.63 + for part in message.get_payload():
1.64 + self.messages.append(part)
1.65 + else:
1.66 + self.messages.append(message)
1.67 +
1.68 + def add_message(self, message):
1.69 +
1.70 + "Add the given 'message' to the mailbox."
1.71 +
1.72 + self.messages.append(message)
1.73 +
1.74 + def get_payload(self):
1.75 +
1.76 + "Get the multipart payload for the mailbox."
1.77 +
1.78 + mailbox = MIMEMultipart()
1.79 + for message in self.messages:
1.80 + mailbox.attach(message)
1.81 +
1.82 + return mailbox
1.83 +
1.84 class MoinMessageError(Exception):
1.85 pass
1.86