From 6ded51bcde0780be4481b2b052e72b8a71fbc5b1 Mon Sep 17 00:00:00 2001 From: Adam Dobrawy Date: Tue, 15 May 2018 00:52:46 +0200 Subject: [PATCH 1/3] Add pluggable transport registry --- django_mailbox/models.py | 3 ++- django_mailbox/transports/__init__.py | 2 +- django_mailbox/transports/base.py | 7 +++++++ django_mailbox/transports/registry.py | 8 ++++++++ 4 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 django_mailbox/transports/registry.py diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 9f7ffc21..b378a241 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -35,6 +35,7 @@ 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 @@ def get_connection(self): 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 7aeef95e..216582da 100644 --- a/django_mailbox/transports/__init__.py +++ b/django_mailbox/transports/__init__.py @@ -7,4 +7,4 @@ 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 d65ad35f..13eb8fba 100644 --- a/django_mailbox/transports/base.py +++ b/django_mailbox/transports/base.py @@ -17,3 +17,10 @@ def get_email_from_bytes(self, contents): 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 00000000..8584701b --- /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 From d4e052bb79798c283cb42dd5e7ba69d6714704cf Mon Sep 17 00:00:00 2001 From: Adam Dobrawy Date: Tue, 15 May 2018 00:54:46 +0200 Subject: [PATCH 2/3] Update registers names & imports --- django_mailbox/models.py | 4 ++-- django_mailbox/transports/__init__.py | 3 ++- django_mailbox/transports/registry.py | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/django_mailbox/models.py b/django_mailbox/models.py index b378a241..5c0e5af6 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -35,7 +35,7 @@ from django_mailbox.transports import Pop3Transport, ImapTransport, \ MaildirTransport, MboxTransport, BabylTransport, MHTransport, \ MMDFTransport, GmailImapTransport -from django_mailbox.transports.registry import transport_registry +from django_mailbox.transports.registry import registry logger = logging.getLogger(__name__) @@ -224,7 +224,7 @@ def get_connection(self): conn = MHTransport(self.location) elif self.type == 'mmdf': conn = MMDFTransport(self.location) - return transport_registry[self.type].from_url(self.uri) + return 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 216582da..b9952581 100644 --- a/django_mailbox/transports/__init__.py +++ b/django_mailbox/transports/__init__.py @@ -7,4 +7,5 @@ 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 \ No newline at end of file +from django_mailbox.transports.gmail import GmailImapTransport +from django_mailbox.transports.registry import registry, register diff --git a/django_mailbox/transports/registry.py b/django_mailbox/transports/registry.py index 8584701b..4ed847ec 100644 --- a/django_mailbox/transports/registry.py +++ b/django_mailbox/transports/registry.py @@ -1,8 +1,8 @@ -transport_registry = {} +registry = {} -def register_transport(transport_type): +def register(transport_type): def decorator(f): - transport_registry[transport_type] = f + registry[transport_type] = f return f return decorator From b7a3a6b077c2b545f6793648ecadd63ebe247ac1 Mon Sep 17 00:00:00 2001 From: Adam Dobrawy Date: Tue, 15 May 2018 01:00:46 +0200 Subject: [PATCH 3/3] Fix Mailbox.get_connection --- django_mailbox/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 5c0e5af6..49d0aad5 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -224,7 +224,9 @@ def get_connection(self): conn = MHTransport(self.location) elif self.type == 'mmdf': conn = MMDFTransport(self.location) - return registry[self.type].from_url(self.uri) + else: + conn = registry[self.type].from_url(self.uri) + return conn def process_incoming_message(self, message): """Process a message incoming to this mailbox."""