Changeset 108 for trunk

Show
Ignore:
Timestamp:
10/26/08 09:03:50 (2 months ago)
Author:
fs
Message:

fixes #79

Location:
trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/tests/test_custom_provider_injection.py

    r103 r108  
    2929        self.manager = DummyManager() 
    3030        self.provider = DummyProvider() 
    31         self.message = Message(from_=("Author", "author@example.com"), 
     31        self.message = Message(author=("Author", "author@example.com"), 
    3232                               to=("Recipient", "recipient@example.com"), 
    3333                               subject="Test message subject.", 
  • trunk/tests/test_message.py

    r107 r108  
    11#!/usr/bin/env python 
    22# encoding: utf-8 
    3  
    43"""Test the TurboMail Message class.""" 
    54 
     
    1211    from email.MIMEText import MIMEText 
    1312import logging 
     13import re 
    1414import unittest 
    1515 
     
    9090         
    9191        msg = email.message_from_string(str(self.message)) 
    92         encoded_name = "%s <%s>" % ( str(Header(from_name, "ISO-8859-1")), from_email) 
     92        encoded_name = "%s <%s>" % (str(Header(from_name, "ISO-8859-1")), from_email) 
    9393        self.assertEqual(encoded_name, msg['From']) 
     94     
     95    def test_multiple_authors(self): 
     96        """For better readability, provide a property 'authors' (alias for  
     97        author).""" 
     98        self.message.authors = 'foo@example.com' 
     99        self.assertEqual(self.message.authors, self.message.author) 
     100         
     101        self.message.authors = ['bar@example.com', 'baz@example.com'] 
     102        self.message.sender = 'foo@example.com' 
     103        msg = email.message_from_string(str(self.message)) 
     104        from_addresses = re.split(r",\n?\s+", msg['From']) 
     105        self.assertEqual(['bar@example.com', 'baz@example.com'], from_addresses) 
     106     
     107    def test_multiple_authors_require_sender(self): 
     108        self.message.authors = ['bar@example.com', 'baz@example.com'] 
     109        self.assertRaises(ValueError, str, self.message) 
     110         
     111        self.message.sender = 'bar@example.com' 
     112        str(self.message) 
     113     
     114    def test_permit_one_sender_at_most(self): 
     115        self.message.sender = ['bar@example.com', 'baz@example.com'] 
     116        self.assertRaises(ValueError, str, self.message) 
     117         
     118        self.message.sender = 'bar@example.com' 
     119        str(self.message) 
     120     
     121    def test_raise_error_for_unknown_kwargs_at_class_instantiation(self): 
     122        self.assertRaises(TypeError, Message, invalid_argument=True) 
     123 
     124 
  • trunk/turbomail/message.py

    r107 r108  
    44__version__ = "$Revision$" 
    55 
    6 from turbomail import release 
    7 from turbomail.util import AddressList 
    8 from turbomail.control import interface 
    96import os 
     7import logging 
    108 
    119import email.Message 
     
    1816from email.Header import Header 
    1917 
    20 import logging 
     18from turbomail import release 
     19from turbomail.util import AddressList 
     20from turbomail.control import interface 
     21 
     22 
     23__all__ = ['WrappedMessage', 'Message'] 
     24 
    2125log = logging.getLogger("turbomail.message") 
    2226 
    23  
    24 __all__ = ['WrappedMessage', 'Message'] 
    2527 
    2628 
     
    5557        """ 
    5658        super(Message, self).__init__() 
    57         # if sender != None and author == None -> warning, sender -> author, sender=None 
    58         # if recipient != None and to == None -> warning, recipient -> to 
    59         # recipients support later 
    6059         
    6160        def kwpop(name, configkey=None, default=None): 
    6261            value = None 
    6362            if configkey != None: 
    64                 value = kw.get(name, interface.config.get(configkey, default)) 
     63                value = kw.pop(name, interface.config.get(configkey, default)) 
    6564            else: 
    66                 value = kw.get(name, default) 
     65                value = kw.pop(name, default) 
    6766            return value 
    6867         
     
    9594        self._processed = False 
    9695        self._dirty = False 
    97      
     96        if len(kw) > 0: 
     97            parameter_name = kw.keys()[0] 
     98            error_msg = "__init__() got an unexpected keyword argument '%s'" 
     99            raise TypeError(error_msg % parameter_name) 
    98100     
    99101    author = AddressList.protected('_author') 
     
    105107    disposition = AddressList.protected('_disposition') 
    106108     
     109    # just for better readability if you have multiple authors 
     110    authors = author 
    107111     
    108112    def __setattr__(self, name, value): 
     
    169173        assert self.to or self.cc or self.bcc, "You must specify at least one recipient." 
    170174        assert self.plain, "You must provide plain text content." 
    171  
     175         
     176        if len(self.author) > 1 and len(self.sender) == 0: 
     177            raise ValueError('If there are multiple authors of message, you must specify a sender!') 
     178        if len(self.sender) > 1: 
     179            raise ValueError('You must not specify more than one sender!') 
     180         
    172181        if not self._dirty and self._processed and not interface.config.get("mail.debug", False): 
    173182            return self._mime