1
0
Fork 0

Add pluggable transport registry

This commit is contained in:
Adam Dobrawy 2018-05-15 00:52:46 +02:00
parent 201f568750
commit 6ded51bcde
4 changed files with 18 additions and 2 deletions

View file

@ -35,6 +35,7 @@ from django_mailbox.signals import message_received
from django_mailbox.transports import Pop3Transport, ImapTransport, \ from django_mailbox.transports import Pop3Transport, ImapTransport, \
MaildirTransport, MboxTransport, BabylTransport, MHTransport, \ MaildirTransport, MboxTransport, BabylTransport, MHTransport, \
MMDFTransport, GmailImapTransport MMDFTransport, GmailImapTransport
from django_mailbox.transports.registry import transport_registry
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -223,7 +224,7 @@ class Mailbox(models.Model):
conn = MHTransport(self.location) conn = MHTransport(self.location)
elif self.type == 'mmdf': elif self.type == 'mmdf':
conn = MMDFTransport(self.location) conn = MMDFTransport(self.location)
return conn return transport_registry[self.type].from_url(self.uri)
def process_incoming_message(self, message): def process_incoming_message(self, message):
"""Process a message incoming to this mailbox.""" """Process a message incoming to this mailbox."""

View file

@ -7,4 +7,4 @@ from django_mailbox.transports.mbox import MboxTransport
from django_mailbox.transports.babyl import BabylTransport from django_mailbox.transports.babyl import BabylTransport
from django_mailbox.transports.mh import MHTransport from django_mailbox.transports.mh import MHTransport
from django_mailbox.transports.mmdf import MMDFTransport from django_mailbox.transports.mmdf import MMDFTransport
from django_mailbox.transports.gmail import GmailImapTransport from django_mailbox.transports.gmail import GmailImapTransport

View file

@ -17,3 +17,10 @@ class EmailTransport(object):
message = email.message_from_string(contents) message = email.message_from_string(contents)
return message return message
class PluggableEmailTransport(EmailTransport):
@classmethod
def from_uri(cls, uri):
raise NotImplemented("The class does not implement {0}.from_uri, and it should. "
"Overwrite {0}.from_uri.".format(cls.__name__))

View file

@ -0,0 +1,8 @@
transport_registry = {}
def register_transport(transport_type):
def decorator(f):
transport_registry[transport_type] = f
return f
return decorator