Package turbomail :: Package managers :: Module immediate
[hide private]
[frames] | no frames]

Source Code for Module turbomail.managers.immediate

 1  # encoding: utf-8 
 2   
 3  """Blocking immediate delivery manager. 
 4   
 5  This delivers messages as soon as it is enqueued, without using threading.""" 
 6   
 7   
 8  import logging 
 9   
10  from turbomail.api import Manager 
11  from turbomail.exceptions import TransportExhaustedException 
12   
13   
14  __all__ = ['load'] 
15   
16  log = logging.getLogger("turbomail.manager") 
17   
18   
19   
20 -def load():
21 return ImmediateManager()
22 23
24 -class ImmediateManager(Manager):
25 name = "immediate" 26
27 - def __init__(self):
28 log.info("Immediate manager starting up.") 29 self.transport = None 30 super(ImmediateManager, self).__init__() 31 log.info("Immediate manager ready.")
32
33 - def _shutdown_transport(self):
34 if self.transport is not None: 35 self.transport.stop() 36 self.transport = None
37
38 - def stop(self):
39 self._shutdown_transport() 40 super(ImmediateManager, self).stop()
41
42 - def deliver(self, message):
43 log.info("Attempting delivery of message %s." % message.id) 44 45 # If the parent fails, we fail. 46 if not super(ImmediateManager, self).deliver(message): 47 log.debug("Parent failure.") 48 return False 49 50 if not self.transport: 51 self.transport = self.get_new_transport() 52 try: 53 self.transport.deliver(message) 54 log.info("Delivery of message %s successful." % message.id) 55 except TransportExhaustedException: 56 log.debug("Transport exhausted.") 57 self._shutdown_transport() 58 self.deliver(message) 59 except: 60 log.error("Delivery of message %s failed." % message.id) 61 raise 62 return True
63