diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 9f7ffc2..b378a24 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -35,6 +35,7 @@ from django_mailbox.signals import message_received from django_mailbox.transports import Pop3Transport, ImapTransport, \ MaildirTransport, MboxTransport, BabylTransport, MHTransport, \ MMDFTransport, GmailImapTransport +from django_mailbox.transports.registry import transport_registry logger = logging.getLogger(__name__) @@ -223,7 +224,7 @@ class Mailbox(models.Model): conn = MHTransport(self.location) elif self.type == 'mmdf': conn = MMDFTransport(self.location) - return conn + return transport_registry[self.type].from_url(self.uri) def process_incoming_message(self, message): """Process a message incoming to this mailbox.""" diff --git a/django_mailbox/transports/__init__.py b/django_mailbox/transports/__init__.py index 7aeef95..216582d 100644 --- a/django_mailbox/transports/__init__.py +++ b/django_mailbox/transports/__init__.py @@ -7,4 +7,4 @@ from django_mailbox.transports.mbox import MboxTransport from django_mailbox.transports.babyl import BabylTransport from django_mailbox.transports.mh import MHTransport from django_mailbox.transports.mmdf import MMDFTransport -from django_mailbox.transports.gmail import GmailImapTransport +from django_mailbox.transports.gmail import GmailImapTransport \ No newline at end of file diff --git a/django_mailbox/transports/base.py b/django_mailbox/transports/base.py index d65ad35..13eb8fb 100644 --- a/django_mailbox/transports/base.py +++ b/django_mailbox/transports/base.py @@ -17,3 +17,10 @@ class EmailTransport(object): message = email.message_from_string(contents) 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__)) diff --git a/django_mailbox/transports/registry.py b/django_mailbox/transports/registry.py new file mode 100644 index 0000000..8584701 --- /dev/null +++ b/django_mailbox/transports/registry.py @@ -0,0 +1,8 @@ +transport_registry = {} + + +def register_transport(transport_type): + def decorator(f): + transport_registry[transport_type] = f + return f + return decorator