Changeset 40 for branches

Show
Ignore:
Timestamp:
10/18/07 01:15:41 (1 year ago)
Author:
amcgregor
Message:

Lots of changes. Minor updates to the Message class, created the immediate manager and the debug provider, and created a sample extension, utf8qp.

Location:
branches/3.0
Files:
5 added
2 removed
6 modified

Legend:

Unmodified
Added
Removed
  • branches/3.0/setup.py

    r39 r40  
    2525         
    2626                install_requires = [ 
    27                         "TurboGears >= 1.0" 
    2827                        "uuid >= 1.30" 
    2928                ], 
     
    5150                        ], 
    5251                        'turbomail.managers': [ 
    53                                 "demand = turbomail.managers.demand" 
    54 #                               "polling = turbomail.managers.polling" 
     52#                               "demand = turbomail.managers.demand", 
     53#                               "polling = turbomail.managers.polling", 
     54                                "immediate = turbomail.managers.immediate" 
    5555                        ], 
    5656                        'turbomail.providers': [ 
    57                                 "smtp = turbomail.providers.smtp", 
     57#                               "smtp = turbomail.providers.smtp", 
    5858#                               "sendmail = turbomail.providers.sendmail" 
    5959#                               "disk = turbomail.providers.disk", 
    60 #                               "debug = turbomail.providers.debug" 
     60                                "debug = turbomail.providers.debug" 
    6161                        ], 
    6262                        'turbomail.extensions': [ 
     63                                "utf8qp = turbomail.extensions.utf8qp", 
    6364#                               "smime = turbomail.extensions.smime", 
    6465#                               "gpg = turbomail.extensions.gpg", 
  • branches/3.0/turbomail/__init__.py

    r37 r40  
    1717 
    1818from turbomail.message import Message 
     19from turbomail.control import interface 
    1920 
    20  
    21 __all__ = ['exceptions', 'extensions', 'managers', 'providers', 'release', 'manager', 'provider', 'config', 'Message'] 
     21__all__ = ['exceptions', 'extensions', 'managers', 'providers', 'release', 'manager', 'provider', 'config', 'Message', 'interface'] 
    2222 
    2323 
  • branches/3.0/turbomail/api.py

    r37 r40  
     1# encoding: utf-8 
     2 
     3"""TurboMail extension API.""" 
     4 
     5 
     6class Extension(object): 
     7        def __init__(self): 
     8                super(Extension, self).__init__() 
     9                self.ready = False 
     10         
     11        def start(self): 
     12                self.ready = True 
     13                 
     14                return True 
     15         
     16        def stop(self): 
     17                if not self.ready: return False 
     18                 
     19                self.ready = False 
     20                 
     21                return True 
     22 
     23 
     24class ProviderFactory(Extension): 
     25        """docstring for ProviderFactory""" 
     26        provider = None 
     27         
     28        def __init__(self): 
     29                super(ProviderFactory, self).__init__() 
     30         
     31        def new(self): 
     32                if not self.ready: return None 
     33                return self.provider() 
     34 
     35 
     36class Provider(object): 
     37        """docstring for Provider""" 
     38        def __init__(self): 
     39                super(Provider, self).__init__() 
     40 
     41        def deliver(self, message): 
     42                raise NotImplementedError, "Provider plugin must override this method without inheritance." 
     43 
     44 
     45class Manager(Extension): 
     46        """docstring for Manager""" 
     47        def __init__(self): 
     48                super(Manager, self).__init__() 
     49         
     50        def deliver(self, message): 
     51                if not self.ready: return False 
     52                return True 
     53 
  • branches/3.0/turbomail/control.py

    r37 r40  
    2424 
    2525import turbomail 
     26import pkg_resources 
    2627 
    2728__all__ = ['extension'] 
     
    4647                        self.shutdown_extension = self.stop 
    4748         
    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() 
     49        def load_single_entry(self, group, name): 
     50                for entrypoint in pkg_resources.iter_entry_points(group, name): 
     51                        return entrypoint.load() 
    5252                return None 
    5353         
    5454        def start(self): 
    55                 """TurboGears extension startup. 
    56  
    57                 Exits immediately if TurboMail is not enabled and creates a MailPool 
    58                 instance if all is well. 
    59                 """ 
     55                try: 
     56                        import turbogears 
     57                except ImportError: 
     58                        pass 
     59                else: 
     60                        turbomail.config = turbogears.config 
    6061                 
    6162                if not turbomail.config.get("mail.on", False): 
     
    6566                 
    6667                # Load the requested pool manager. 
    67                 manager = turbomail.config.get("mail.manager", "demand") 
    68                 turbomail.manager = self.load_single_entry("turbomail.managers", manager) 
     68                manager = turbomail.config.get("mail.manager", "immediate") 
     69                turbomail.manager = self.load_single_entry("turbomail.managers", manager).load() 
    6970                if not turbomail.manager: 
    7071                        turbomail.config.set("mail.on", False) 
     
    7475                 
    7576                # Load the requested mail provider. 
    76                 provider = turbomail.config.get("mail.provider", "smtp") 
    77                 turbomail.provider = self.load_single_entry("turbomail.providers", provider) 
     77                provider = turbomail.config.get("mail.provider", "debug") 
     78                turbomail.provider = self.load_single_entry("turbomail.providers", provider).load() 
    7879                if not turbomail.provider: 
    7980                        turbomail.config.set("mail.on", False) 
     
    8283                turbomail.provider.start() 
    8384                 
    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": 
    86                         Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8') 
    87                         turbomail.config.update({"mail.default.encoding": "utf-8"}) 
    88                  
    8985                # Load and initalize the various extensions. 
    9086                extensions = pkg_resources.iter_entry_points("turbomail.extensions") 
    9187                for entrypoint in extensions: 
    92                         ext = entrypoint.load() 
    93                         if hasattr(ext, "start"): 
    94                                 ext.start() 
     88                        log.debug("Found extension '%s'." % entrypoint.name) 
     89                        if turbomail.config.get("mail." + entrypoint.name + ".on", False): 
     90                                log.debug("Loading extension '%s'." % entrypoint.name) 
     91                                ext = entrypoint.load() 
     92                                if hasattr(ext, "start"): ext.start() 
    9593                 
    9694                self.running = True 
    9795         
    9896        def stop(self): 
    99                 """TurboGears extension shutdown. 
    100  
    101                 Exits immediately if TurboMail is not enabled and shuts down the 
    102                 MailPool object safely. 
    103                 """ 
    104  
    10597                if not self.running: return 
    10698                 
     
    110102                extensions = pkg_resources.iter_entry_points("turbomail.extensions") 
    111103                for entrypoint in extensions: 
    112                         ext = entrypoint.load() 
    113                         if hasattr(ext, "unload"): 
    114                                 ext.unload() 
     104                        if turbomail.config.get("mail." + entrypoint.name + ".on", False): 
     105                                ext = entrypoint.load() 
     106                                if hasattr(ext, "unload"): ext.unload() 
    115107                 
    116108                # Unload the provider and manager. 
  • branches/3.0/turbomail/exceptions.py

    r1 r40  
    44 
    55 
    6 __all__ = ['MailException', 'MailNotEnabledException', 'MailConfigurationException'] 
     6__all__ = ['MailException', 'MailNotEnabledError', 'MailConfigurationError', 'ProviderException', 'ProviderExhaustedException', 'ManagerException'] 
    77 
    88 
     
    1212        pass 
    1313 
    14                  
    15 class MailNotEnabledException(MailException): 
     14 
     15class MailNotEnabledError(MailException): 
    1616        """Attempted to use TurboMail before being enabled.""" 
    1717         
     
    2020                           "framework but outbound mail hasn't been enabled in the " \ 
    2121                           "config file [via mail.on]." 
    22          
    23          
    24 class MailConfigurationException(MailException): 
     22 
     23 
     24class MailConfigurationError(MailException): 
    2525        """There was an error in the configuration of TurboMail.""" 
    2626         
    27         args = () 
    28         def __init__(self, message): 
    29                 self.message= message 
    30                  
     27        pass 
     28 
     29 
     30class ProviderException(MailException): 
     31        """The base for all TurboMail Provider exceptions.""" 
     32         
     33        pass 
     34 
     35 
     36class ProviderExhaustedException(MailException): 
     37        """Attempted to use TurboMail before being enabled.""" 
     38         
    3139        def __str__(self): 
    32                 return self.message 
     40                return "This Provider instance is no longer capable of delivering mail." 
     41 
     42 
     43class ManagerException(MailException): 
     44        """The base for all TurboMail Manager exceptions.""" 
     45         
     46        pass 
  • branches/3.0/turbomail/message.py

    r39 r40  
    119119                if not self._id or (self._processed and self._dirty): 
    120120                        self.__dict__['_id'] = str(uuid()) 
     121                        self._processed = False 
    121122                 
    122123                return self._id 
     
    137138                #if not self._dirty and self._processed: 
    138139                #       return self._mime 
    139  
     140                 
     141                self._processed = False 
     142                 
    140143                plain = MIMEText(self._callable(self.plain).encode(self.encoding), 'plain', self.encoding) 
    141144                rich = self.rich and MIMEText(self._callable(self.rich).encode(self.encoding), 'html', self.encoding) or None