Changeset 40
- Timestamp:
- 10/18/07 01:15:41 (1 year ago)
- Location:
- branches/3.0
- Files:
-
- 5 added
- 2 removed
- 6 modified
-
setup.py (modified) (2 diffs)
-
turbomail/__init__.py (modified) (1 diff)
-
turbomail/api.py (modified) (1 diff)
-
turbomail/control.py (modified) (6 diffs)
-
turbomail/exceptions.py (modified) (3 diffs)
-
turbomail/extensions/utf8qp.py (added)
-
turbomail/managers/_base.py (deleted)
-
turbomail/managers/demand.py (added)
-
turbomail/managers/immediate.py (added)
-
turbomail/message.py (modified) (2 diffs)
-
turbomail/providers/_base.py (deleted)
-
turbomail/providers/debug.py (added)
-
turbomail/providers/sink.py (added)
Legend:
- Unmodified
- Added
- Removed
-
branches/3.0/setup.py
r39 r40 25 25 26 26 install_requires = [ 27 "TurboGears >= 1.0"28 27 "uuid >= 1.30" 29 28 ], … … 51 50 ], 52 51 '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" 55 55 ], 56 56 'turbomail.providers': [ 57 "smtp = turbomail.providers.smtp",57 # "smtp = turbomail.providers.smtp", 58 58 # "sendmail = turbomail.providers.sendmail" 59 59 # "disk = turbomail.providers.disk", 60 #"debug = turbomail.providers.debug"60 "debug = turbomail.providers.debug" 61 61 ], 62 62 'turbomail.extensions': [ 63 "utf8qp = turbomail.extensions.utf8qp", 63 64 # "smime = turbomail.extensions.smime", 64 65 # "gpg = turbomail.extensions.gpg", -
branches/3.0/turbomail/__init__.py
r37 r40 17 17 18 18 from turbomail.message import Message 19 from turbomail.control import interface 19 20 20 21 __all__ = ['exceptions', 'extensions', 'managers', 'providers', 'release', 'manager', 'provider', 'config', 'Message'] 21 __all__ = ['exceptions', 'extensions', 'managers', 'providers', 'release', 'manager', 'provider', 'config', 'Message', 'interface'] 22 22 23 23 -
branches/3.0/turbomail/api.py
r37 r40 1 # encoding: utf-8 2 3 """TurboMail extension API.""" 4 5 6 class 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 24 class 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 36 class 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 45 class 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 24 24 25 25 import turbomail 26 import pkg_resources 26 27 27 28 __all__ = ['extension'] … … 46 47 self.shutdown_extension = self.stop 47 48 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() 52 52 return None 53 53 54 54 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 60 61 61 62 if not turbomail.config.get("mail.on", False): … … 65 66 66 67 # 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() 69 70 if not turbomail.manager: 70 71 turbomail.config.set("mail.on", False) … … 74 75 75 76 # 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() 78 79 if not turbomail.provider: 79 80 turbomail.config.set("mail.on", False) … … 82 83 turbomail.provider.start() 83 84 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 89 85 # Load and initalize the various extensions. 90 86 extensions = pkg_resources.iter_entry_points("turbomail.extensions") 91 87 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() 95 93 96 94 self.running = True 97 95 98 96 def stop(self): 99 """TurboGears extension shutdown.100 101 Exits immediately if TurboMail is not enabled and shuts down the102 MailPool object safely.103 """104 105 97 if not self.running: return 106 98 … … 110 102 extensions = pkg_resources.iter_entry_points("turbomail.extensions") 111 103 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() 115 107 116 108 # Unload the provider and manager. -
branches/3.0/turbomail/exceptions.py
r1 r40 4 4 5 5 6 __all__ = ['MailException', 'MailNotEnabledE xception', 'MailConfigurationException']6 __all__ = ['MailException', 'MailNotEnabledError', 'MailConfigurationError', 'ProviderException', 'ProviderExhaustedException', 'ManagerException'] 7 7 8 8 … … 12 12 pass 13 13 14 15 class MailNotEnabledE xception(MailException):14 15 class MailNotEnabledError(MailException): 16 16 """Attempted to use TurboMail before being enabled.""" 17 17 … … 20 20 "framework but outbound mail hasn't been enabled in the " \ 21 21 "config file [via mail.on]." 22 23 24 class MailConfigurationE xception(MailException):22 23 24 class MailConfigurationError(MailException): 25 25 """There was an error in the configuration of TurboMail.""" 26 26 27 args = () 28 def __init__(self, message): 29 self.message= message 30 27 pass 28 29 30 class ProviderException(MailException): 31 """The base for all TurboMail Provider exceptions.""" 32 33 pass 34 35 36 class ProviderExhaustedException(MailException): 37 """Attempted to use TurboMail before being enabled.""" 38 31 39 def __str__(self): 32 return self.message 40 return "This Provider instance is no longer capable of delivering mail." 41 42 43 class ManagerException(MailException): 44 """The base for all TurboMail Manager exceptions.""" 45 46 pass -
branches/3.0/turbomail/message.py
r39 r40 119 119 if not self._id or (self._processed and self._dirty): 120 120 self.__dict__['_id'] = str(uuid()) 121 self._processed = False 121 122 122 123 return self._id … … 137 138 #if not self._dirty and self._processed: 138 139 # return self._mime 139 140 141 self._processed = False 142 140 143 plain = MIMEText(self._callable(self.plain).encode(self.encoding), 'plain', self.encoding) 141 144 rich = self.rich and MIMEText(self._callable(self.rich).encode(self.encoding), 'html', self.encoding) or None
