Show
Ignore:
Timestamp:
10/22/07 01:55:26 (1 year ago)
Author:
amcgregor
Message:

Rewrite of the AddressList? class and its integration into the Message class.

Files:
1 modified

Legend:

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

    r40 r41  
    3737         
    3838        def __str__(self): 
    39                 assert self.sender 
    40                 assert self.recipients 
    41                 assert self.message 
    42                  
    4339                return self.message 
    4440 
    4541 
    4642class Message(object): 
    47         """Simple e-mail message class. 
    48          
    49         Message provides a means to easily create e-mail messages to be 
    50         sent through the Dispatch mechanism or MailPool.  Message provides 
    51         various helper functions to correctly format plain text, dual plain 
    52         text and rich text MIME encoded messages, as well as handle 
    53         embedded and external attachments. 
    54          
    55         All properties can be set from the constructor. 
    56         """ 
     43        """Simple e-mail message class.""" 
    5744         
    5845        def __init__(self, **kw): 
     
    7057                self._dirty = False 
    7158                 
    72                 self.date = formatdate(localtime=True) 
    73                  
    74                 self._sender = AddressList(turbomail.config.get("mail.message.sender", None)) 
    75                 self._envelope = AddressList(turbomail.config.get("mail.message.envelope", None)) 
    76                 self._reply = AddressList(turbomail.config.get("mail.message.reply", None)) 
    77                 self._to = AddressList() 
    78                 self._cc = AddressList(turbomail.config.get("mail.message.cc", None)) 
    79                 self._bcc = AddressList(turbomail.config.get("mail.message.bcc", None)) 
    80                 self._disposition = AddressList(turbomail.config.get("mail.message.disposition", None)) 
    81                  
    82                 self.organization = turbomail.config.get("mail.message.organization", None) 
    83                 self.encoding = turbomail.config.get("mail.encoding", 'us-ascii') 
    84                 self.priority = turbomail.config.get("mail.message.priority", None) 
    85                 self.subject = None 
    86                 self.plain = None 
    87                 self.rich = None 
    88                 self.attachments = [] 
    89                 self.embedded = [] 
    90                 self.headers = turbomail.config.get("mail.message.headers", []) 
    91                 self.tries = turbomail.config.get("mail.tries", 3) 
    92                  
    93                 self._id = None 
    94                  
    95                 for i, j in kw.iteritems(): 
    96                         assert hasattr(self, i), "Unknown attribute: '%s'" % i 
    97                         setattr(self, i, j) 
     59                def configget(name, key, default=None): 
     60                        pass 
     61                 
     62                self.date = kw.get("date", formatdate(localtime=True)) 
     63                 
     64                self._senders = AddressList(kw.get("sender", turbomail.config.get("mail.message.sender", None))) 
     65                self._senders = AddressList(kw.get("senders", turbomail.config.get("mail.message.senders", self._senders))) 
     66                self._envelope = AddressList(kw.get("envelope", turbomail.config.get("mail.message.envelope", None))) 
     67                self._reply = AddressList(kw.get("reply", turbomail.config.get("mail.message.reply", None))) 
     68                self._to = AddressList(kw.get("to", None)) 
     69                self._cc = AddressList(kw.get("cc", turbomail.config.get("mail.message.cc", None))) 
     70                self._bcc = AddressList(kw.get("bcc", turbomail.config.get("mail.message.bcc", None))) 
     71                self._disposition = AddressList(kw.get("disposition", turbomail.config.get("mail.message.disposition", None))) 
     72                 
     73                self.organization = kw.get("organization", turbomail.config.get("mail.message.organization", None)) 
     74                self.encoding = kw.get("encoding", turbomail.config.get("mail.encoding", 'us-ascii')) 
     75                self.priority = kw.get("priority", turbomail.config.get("mail.message.priority", None)) 
     76                self.subject = kw.get("subject", None) 
     77                self.plain = kw.get("plain", None) 
     78                self.rich = kw.get("rich", None) 
     79                self.attachments = kw.get("attachments", []) 
     80                self.embedded = kw.get("embedded", []) 
     81                self.headers = kw.get("headers", turbomail.config.get("mail.message.headers", [])) 
     82                self.tries = kw.get("tries", turbomail.config.get("mail.tries", 3)) 
     83                 
     84                self._id = kw.get("id", None) 
    9885         
    9986        def __setattr__(self, name, value): 
     
    10289                super(Message, self).__setattr__(name, value) 
    10390                 
    104                 if name not in ('bcc', '_dirty'): self.__dict__['_dirty'] = True 
     91                if name not in ('bcc', '_dirty', '_processed'): self.__dict__['_dirty'] = True 
    10592         
    10693        def __str__(self): 
    10794                return self.mime.as_string() 
    10895         
    109         sender = property(lambda self: self._sender, lambda self, value: self._sender.replace(value), lambda self: self._sender.replace()) 
    110         envelope = property(lambda self: self._envelope, lambda self, value: self._envelope.replace(value), lambda self: self._envelope.replace()) 
    111         reply = property(lambda self: self._reply, lambda self, value: self._reply.replace(value), lambda self: self._reply.replace()) 
    112         to = property(lambda self: self._to, lambda self, value: self._to.replace(value), lambda self: self._to.replace()) 
    113         cc = property(lambda self: self._cc, lambda self, value: self._cc.replace(value), lambda self: self._cc.replace()) 
    114         bcc = property(lambda self: self._bcc, lambda self, value: self._bcc.replace(value), lambda self: self._bcc.replace()) 
    115         disposition = property(lambda self: self._disposition, lambda self, value: self._disposition.replace(value), lambda self: self._disposition.replace()) 
    116          
    117         @property 
     96        def _get_sender(self): 
     97                if self._envelope: 
     98                        return self._envelope.addresses[0] 
     99                return self._senders.addresses[0] 
     100         
     101        sender = AddressList.protected('_senders') 
     102        senders = AddressList.protected('_senders') 
     103        envelope = AddressList.protected('_envelope') 
     104        reply = AddressList.protected('_reply') 
     105        to = AddressList.protected('_to') 
     106        cc = AddressList.protected('_cc') 
     107        bcc = AddressList.protected('_bcc') 
     108        disposition = AddressList.protected('_disposition') 
     109         
    118110        def id(self): 
    119111                if not self._id or (self._processed and self._dirty): 
     
    122114                 
    123115                return self._id 
    124          
    125         @property 
     116        id = property(id) 
     117         
    126118        def recipients(self): 
    127119                return [isinstance(i, tuple) and i[1] or i for i in self.to + self.cc + self.bcc] 
    128          
    129         @property 
     120        recipients = property(recipients) 
     121         
    130122        def mime(self): 
    131123                """Produce the final MIME message.""" 
    132124 
    133                 assert self.sender, "You must specify a sender." 
     125                assert self.senders, "You must specify a sender." 
    134126                assert self.subject, "You must specify a subject." 
    135127                assert self.to or self.cc or self.bcc, "You must specify at least one recipient." 
     
    170162 
    171163                headers = [ 
    172                                 ('Sender', self.envelope and self.envelope[0] or AddressList(self.sender[0])), # AddressList 
    173                                 ('From', self.sender), # AddressList 
     164                                ('Sender', self.sender), # AddressList 
     165                                ('From', self.senders), # AddressList 
    174166                                ('Reply-To', self.reply), # AddressList 
    175167                                ('Subject', self.subject), 
     
    202194                 
    203195                return message 
     196        mime = property(mime) 
    204197         
    205198        def attach(self, file, name=None):