Show
Ignore:
Timestamp:
10/17/07 04:57:00 (1 year ago)
Author:
amcgregor
Message:

Misc. changes.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/3.0/turbomail/control.py

    r33 r37  
    11# encoding: utf-8 
    22 
    3 """TurboGears extension startup and shutdown interface.""" 
     3"""TurboGears extension startup and shutdown interface. 
     4 
     5TurboGears will automatically start and stop TurboMail if you configure 
     6your application with `mail.on = True`.  To start and stop TurboMail 
     7in your own applications:: 
     8 
     9  import turbomail 
     10  turbomail.interface.start() 
     11   
     12  message = turbomail.Message(...) 
     13  turbomail.send(message) 
     14   
     15  turbomail.interface.stop() 
     16 
     17TurboMail will, by default, immediately delete any messages remaining in 
     18the queue and wait on any in-progress deliveries.  To block execution and 
     19allow the queue to empty, pass `blocking=True` as an argument to `stop`. 
     20""" 
    421 
    522import logging 
     
    1229 
    1330class ControlClass(object): 
     31        """Control TurboMail startup and shutdown. 
     32         
     33        Dynamically discovers the presence of TurboGears, creating appropriate aliases for 
     34        TurboGears extension startup and shutdown.""" 
     35         
    1436        def __init__(self): 
    1537                self.running = False 
     
    1840                        import turbogears 
    1941                except ImportError: 
    20                         self.config = dict() 
     42                        turbomail.config = dict() 
    2143                else: 
    22                         self.config = turbogears.config 
     44                        turbomail.config = turbogears.config 
     45                        self.start_extension = self.start 
     46                        self.shutdown_extension = self.stop 
    2347         
    24         def _load_class(self, classpath): 
    25                 components = classpath.split(':') 
    26  
    27                 try: 
    28                         module = __import__(components[0], globals(), locals(), [components[1]]) 
    29                 except ImportError: 
    30                         return None 
    31                  
    32                 return getattr(module, components[1]) 
     48        def load_single_entry(group, name): 
     49                for entrypoint in pkg_resources.iter_entry_points("turbogears.command"): 
     50                        if entrypoint.name == name: 
     51                                return entrypoint.load() 
     52                return None 
    3353         
    34         def start_extension(self): 
     54        def start(self): 
    3555                """TurboGears extension startup. 
    3656 
     
    3959                """ 
    4060                 
    41                 if not self.config.get("mail.on", False): 
     61                if not turbomail.config.get("mail.on", False): 
    4262                        return 
    4363                 
     
    4565                 
    4666                # Load the requested pool manager. 
    47                 classpath = self.config.get("mail.manager", "turbomail.managers.demand:DemandManager") 
    48                 turbomail.manager = self._load_class(classpath)(self.config) 
     67                manager = turbomail.config.get("mail.manager", "demand") 
     68                turbomail.manager = self.load_single_entry("turbomail.managers", manager) 
     69                if not turbomail.manager: 
     70                        turbomail.config.set("mail.on", False) 
     71                        log.error("Unable to locate %s manager, TurboMail disabled." % manager) 
     72                        return 
     73                turbomail.manager.start() 
    4974                 
    5075                # Load the requested mail provider. 
    51                 classpath = self.config.get("") 
     76                provider = turbomail.config.get("mail.provider", "smtp") 
     77                turbomail.provider = self.load_single_entry("turbomail.providers", provider) 
     78                if not turbomail.provider: 
     79                        turbomail.config.set("mail.on", False) 
     80                        log.error("Unable to locate %s provider, TurboMail disabled." % provider) 
     81                        return 
     82                turbomail.provider.start() 
    5283                 
    53                 if self.config.get("mail.default.encoding", "us-ascii") == "utf-8-qp": 
     84                # Override the UTF-8 character set to use the quoted printable encoding. 
     85                if turbomail.config.get("mail.default.encoding", "us-ascii") == "utf-8-qp": 
    5486                        Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8') 
    55                         self.config.update({"mail.default.encoding": "utf-8"}) 
     87                        turbomail.config.update({"mail.default.encoding": "utf-8"}) 
     88                 
     89                # Load and initalize the various extensions. 
     90                extensions = pkg_resources.iter_entry_points("turbomail.extensions") 
     91                for entrypoint in extensions: 
     92                        ext = entrypoint.load() 
     93                        if hasattr(ext, "start"): 
     94                                ext.start() 
    5695                 
    5796                self.running = True 
    5897         
    59         def shutdown_extension(self): 
     98        def stop(self): 
    6099                """TurboGears extension shutdown. 
    61100 
     
    68107                log.info("TurboMail extension shutting down.") 
    69108                 
     109                # Unload the various extensions. 
     110                extensions = pkg_resources.iter_entry_points("turbomail.extensions") 
     111                for entrypoint in extensions: 
     112                        ext = entrypoint.load() 
     113                        if hasattr(ext, "unload"): 
     114                                ext.unload() 
     115                 
     116                # Unload the provider and manager. 
     117                turbomail.provider.stop() 
     118                turbomail.manager.stop() 
     119                 
    70120                self.running = False 
    71121