#
# Superclass for Pyne mailbox io formats.
#

import time
from pyneheaders import *
from pynemsg import *

class superbox:
	def get_unique_message_id(self):
		"""
		Returns a string. unique message-id for new outgoing mail/news.
		"""
		format = "<%f@localhost>"
		return format % time.time()

	def load_article(self, msg_id):
		"""
		Return message object or None if the message is not cached.
		"""
		header, body = self._load_article(msg_id)
		if header == None:
			return None
		else:
			# create new message object
			msg = pynemsg()
			msg.body = body
			msg.parseheaders(self.user)
			msg.date = header[HEAD_DATE]
			msg.date_received = header[HEAD_DATE_RECEIVED]
			msg.opts = header[HEAD_OPTS]
			msg.senduid = header[HEAD_SENDUID]
			return msg

	def save_article(self, msg_object):
		"""
		Save msg_object to the message database. Also parses and saves
		header. Requires a msg_object.headers["message-id"].
		"""
		# Fix essential missing header
		if not msg_object.headers.has_key("message-id"):
			msg_id = self.get_unique_message_id()
			msg_object.headers["message-id"] = msg_id
			msg_object.body = "Message-Id: "+msg_id+"\n"+msg_object.body
		if not msg_object.headers.has_key("subject"):
			msg_object.headers["subject"] = "<no subject>"
			
		# make cached headers
		if msg_object.headers.has_key("newsgroups"):
			if msg_object.senduid == None:
				# incoming
				from_to = msg_object.headers["from"]
			else:
				# outgoing
				from_to = msg_object.headers["newsgroups"]
		else:
			if msg_object.senduid == None:
				# incoming
				from_to = msg_object.headers["from"]
			else:
				# outgoing
				from_to = msg_object.headers["to"]
		try:
			headers = ( msg_object.date, msg_object.date_received,
				msg_object.headers["message-id"], msg_object.headers["references"],
				msg_object.headers["subject"], from_to, msg_object.opts,
				msg_object.senduid)
		except KeyError, e:
			headers = ( msg_object.date, msg_object.date_received,
				msg_object.headers["message-id"], None,
				msg_object.headers["subject"], from_to, msg_object.opts,
				msg_object.senduid)
		# save message
		self._save_article(headers, msg_object.body, msg_object.headers["message-id"])




syntax highlighted by Code2HTML, v. 0.9.1