Changeset 117 for trunk/turbomail
- Timestamp:
- 11/16/08 08:11:41 (2 months ago)
- Location:
- trunk/turbomail
- Files:
-
- 8 modified
- 1 moved
-
api.py (modified) (3 diffs)
-
control.py (modified) (3 diffs)
-
exceptions.py (modified) (2 diffs)
-
managers/demand.py (modified) (3 diffs)
-
managers/immediate.py (modified) (3 diffs)
-
message.py (modified) (2 diffs)
-
transports (moved) (moved from trunk/turbomail/providers)
-
transports/debug.py (modified) (3 diffs)
-
transports/smtp.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/turbomail/api.py
r116 r117 10 10 from turbomail.control import interface 11 11 12 __all__ = ['Extension', ' ProviderFactory', 'Provider', 'Manager']12 __all__ = ['Extension', 'TransportFactory', 'Transport', 'Manager'] 13 13 14 14 … … 35 35 36 36 37 class ProviderFactory(Extension):38 """docstring for ProviderFactory"""39 provider= None37 class TransportFactory(Extension): 38 """docstring for TransportFactory""" 39 transport = None 40 40 41 41 def __init__(self): 42 super( ProviderFactory, self).__init__()42 super(TransportFactory, self).__init__() 43 43 44 44 def new(self): 45 45 if not self.ready: return None 46 return self. provider()46 return self.transport() 47 47 48 48 49 class Provider(object):50 """A Providercan deliver messages towards their recipients with a specific49 class Transport(object): 50 """A Transport can deliver messages towards their recipients with a specific 51 51 method, e.g. SMTP. They don't care about delivery strategies like queing or 52 52 batch submission.""" 53 53 54 54 def __init__(self): 55 super( Provider, self).__init__()55 super(Transport, self).__init__() 56 56 57 57 def deliver(self, message): 58 raise NotImplementedError, " Providerplugin must override this method without inheritance."58 raise NotImplementedError, "Transport plugin must override this method without inheritance." 59 59 60 60 … … 85 85 86 86 def stop(self): 87 """Called by the manager before the providerinstance is destroyed. The88 providercan do some final cleanups (like releasing external resources)87 """Called by the manager before the transport instance is destroyed. The 88 transport can do some final cleanups (like releasing external resources) 89 89 here.""" 90 90 pass -
trunk/turbomail/control.py
r114 r117 46 46 self.config = dict() 47 47 self.manager = None 48 self. provider= None48 self.transport = None 49 49 50 50 def __load_single_entry(self, group, name): … … 79 79 getattr(self, t).start() 80 80 81 # Load the requested manager and provider.81 # Load the requested manager and transport. 82 82 load('manager', 'immediate', extra_classes) 83 load(' provider', 'debug', extra_classes)83 load('transport', 'debug', extra_classes) 84 84 85 85 # Load and initialize the various extensions. … … 116 116 if hasattr(ext, "stop"): ext.stop() 117 117 118 # Unload the providerand manager.119 if self. provider and hasattr(self.provider, "stop"): self.provider.stop()118 # Unload the transport and manager. 119 if self.transport and hasattr(self.transport, "stop"): self.transport.stop() 120 120 if self.manager and hasattr(self.manager, "stop"): self.manager.stop() 121 121 122 self. provider= None122 self.transport = None 123 123 self.manager = None 124 124 -
trunk/turbomail/exceptions.py
r113 r117 5 5 __version__ = "$Revision$" 6 6 __all__ = ['MailException', 'MailNotEnabledException', 'MailConfigurationException', 7 ' ProviderException', 'ProviderExhaustedException', 'ManagerException']7 'TransportException', 'TransportExhaustedException', 'ManagerException'] 8 8 9 9 … … 29 29 30 30 31 class ProviderException(MailException):32 """The base for all TurboMail Providerexceptions."""31 class TransportException(MailException): 32 """The base for all TurboMail Transport exceptions.""" 33 33 34 34 pass 35 35 36 36 37 class ProviderExhaustedException(MailException):37 class TransportExhaustedException(MailException): 38 38 """Attempted to use TurboMail before being enabled.""" 39 39 40 40 def __str__(self): 41 return "This Providerinstance is no longer capable of delivering mail."41 return "This Transport instance is no longer capable of delivering mail." 42 42 43 43 -
trunk/turbomail/managers/demand.py
r85 r117 10 10 from turbomail.exceptions import * 11 11 from turbomail.api import Manager 12 from turbomail.exceptions import ProviderExhaustedException12 from turbomail.exceptions import TransportExhaustedException 13 13 from turbomail.control import interface 14 14 … … 85 85 86 86 def worker(self): 87 log.debug("Requesting new providerinstance from.")88 provider = interface.provider.new()89 if not provider: raise ManagerException, "Unable to allocate new provider."87 log.debug("Requesting new transport instance from.") 88 transport = interface.transport.new() 89 if not transport: raise ManagerException, "Unable to allocate new transport." 90 90 91 91 while True: 92 92 try: 93 93 message = self.queue.get(True, self.timeout) 94 provider.deliver(message)94 transport.deliver(message) 95 95 96 96 except Empty: … … 98 98 break 99 99 100 except ProviderExhaustedException:101 log.debug("Worker death from providerexhaustion - spawning child.")100 except TransportExhaustedException: 101 log.debug("Worker death from transport exhaustion - spawning child.") 102 102 self.deliver(message) 103 103 self.spawn() -
trunk/turbomail/managers/immediate.py
r111 r117 10 10 from turbomail.api import Manager 11 11 from turbomail.control import interface 12 from turbomail.exceptions import ProviderExhaustedException12 from turbomail.exceptions import TransportExhaustedException 13 13 14 14 __all__ = ['load'] … … 29 29 super(ImmediateManager, self).__init__() 30 30 31 self. provider= None31 self.transport = None 32 32 33 33 log.info("Immediate manager ready.") … … 41 41 return False 42 42 43 if not self. provider:44 log.debug("Requesting new providerinstance.")45 self. provider = interface.provider.new()46 if not self. provider:47 raise ManagerException, "Unable to allocate new provider."43 if not self.transport: 44 log.debug("Requesting new transport instance.") 45 self.transport = interface.transport.new() 46 if not self.transport: 47 raise ManagerException, "Unable to allocate new transport." 48 48 49 49 try: 50 self. provider.deliver(message)50 self.transport.deliver(message) 51 51 52 except ProviderExhaustedException:53 log.debug(" Providerexhausted.")54 self. provider.stop()55 self. provider= None52 except TransportExhaustedException: 53 log.debug("Transport exhausted.") 54 self.transport.stop() 55 self.transport = None 56 56 self.deliver(message) 57 57 -
trunk/turbomail/message.py
r109 r117 96 96 97 97 # TODO: This parameter should be present in a base message class 98 # smtp providerassumes that all messages have it!98 # smtp transport assumes that all messages have it! 99 99 self.tries = kwpop("tries", "mail.tries", 3) 100 100 … … 234 234 headers.append(('X-TurboMail-Message-GUID', self.id)) 235 235 236 if interface. provider:236 if interface.transport: 237 237 headers.extend([ 238 ('X-TurboMail- Provider', "%s <%s>" % (interface.provider.name, interface.provider.url)),239 ('X-TurboMail- Provider-Version', interface.provider.version),238 ('X-TurboMail-Transport', "%s <%s>" % (interface.transport.name, interface.transport.url)), 239 ('X-TurboMail-Transport-Version', interface.transport.version), 240 240 ]) 241 241 -
trunk/turbomail/transports/debug.py
r104 r117 6 6 import logging 7 7 8 from turbomail.api import ProviderFactory, Provider8 from turbomail.api import TransportFactory, Transport 9 9 10 10 11 log = logging.getLogger("turbomail. provider")11 log = logging.getLogger("turbomail.transport") 12 12 deliverylog = logging.getLogger("turbomail.delivery") 13 13 … … 16 16 17 17 def load(): 18 return Debug ProviderFactory()18 return DebugTransportFactory() 19 19 20 20 21 class Debug Provider(Provider):21 class DebugTransport(Transport): 22 22 def __init__(self): 23 super(Debug Provider, self).__init__()24 log.debug("Debug providersetup.")23 super(DebugTransport, self).__init__() 24 log.debug("Debug transport setup.") 25 25 self._sent_mails = [] 26 26 27 27 def __del__(self): 28 28 if log: 29 log.debug("Debug providerteardown.")29 log.debug("Debug transport teardown.") 30 30 31 31 def deliver(self, message): … … 44 44 45 45 46 class Debug ProviderFactory(ProviderFactory):46 class DebugTransportFactory(TransportFactory): 47 47 name = "Debug" 48 48 version = "1.0" 49 url = "http://www.python-turbomail.org/wiki/Debug Provider"50 provider = DebugProvider49 url = "http://www.python-turbomail.org/wiki/DebugTransport" 50 transport = DebugTransport 51 51 -
trunk/turbomail/transports/smtp.py
r115 r117 7 7 import logging 8 8 9 log = logging.getLogger("turbomail. provider")9 log = logging.getLogger("turbomail.transport") 10 10 deliverylog = logging.getLogger("turbomail.delivery") 11 11 12 from turbomail.api import ProviderFactory, Provider13 from turbomail.exceptions import MailConfigurationException, ProviderExhaustedException12 from turbomail.api import TransportFactory, Transport 13 from turbomail.exceptions import MailConfigurationException, TransportExhaustedException 14 14 from turbomail.control import interface 15 15 … … 20 20 21 21 def load(): 22 return SMTP ProviderFactory()22 return SMTPTransportFactory() 23 23 24 24 25 class SMTP Provider(Provider):25 class SMTPTransport(Transport): 26 26 def __init__(self): 27 super(SMTP Provider, self).__init__()28 log.debug("SMTP Providercreated.")27 super(SMTPTransport, self).__init__() 28 log.debug("SMTPTransport created.") 29 29 30 30 self.server = self.config_get('mail.smtp.server', 'localhost') … … 76 76 77 77 if self.count == 0: 78 raise ProviderExhaustedException78 raise TransportExhaustedException 79 79 80 80 try: … … 94 94 95 95 except SMTPServerDisconnected, e: 96 raise ProviderExhaustedException96 raise TransportExhaustedException 97 97 98 98 except Exception, e: … … 112 112 113 113 114 class SMTP ProviderFactory(ProviderFactory):114 class SMTPTransportFactory(TransportFactory): 115 115 name = "SMTP" 116 116 version = "1.0" 117 url = "http://www.python-turbomail.org/wiki/SMTP Provider"118 provider = SMTPProvider117 url = "http://www.python-turbomail.org/wiki/SMTPTransport" 118 transport = SMTPTransport
