Пример #1
0
 def __init__(self, author=None, to=None, subject=None, **kw):
     """Instantiate a new Message object.
     
     No arguments are required, as everything can be set using class
     properties.  Alternatively, __everything__ can be set using the
     constructor, using named arguments.  The first three positional
     arguments can be used to quickly prepare a simple message.
     """
     
     # Internally used attributes.
     
     self._id = None
     self._processed = False
     self._dirty = False
     self.mailer = None
     
     # Default values.
     
     self.subject = None
     self.date = datetime.now()
     self.encoding = 'utf-8'
     self.organization = None
     self.priority = None
     self.plain = None
     self.rich = None
     self.attachments = []
     self.embedded = []
     self.headers = []
     self.retries = 3
     self.brand = True
     
     self._sender = None
     self._author = AddressList()
     self._to = AddressList()
     self._cc = AddressList()
     self._bcc = AddressList()
     self._reply = AddressList()
     self._notify = AddressList()
     
     # Overrides at initialization time.
     
     if author is not None:
         self.author = author
     
     if to is not None:
         self.to = to
     
     if subject is not None:
         self.subject = subject
     
     for k in kw:
         if not hasattr(self, k):
             raise TypeError("Unexpected keyword argument: %s" % k)
         
         setattr(self, k, kw[k])
Пример #2
0
	def test_address_from_addresslist_limit_2(self):
		email = '*****@*****.**'
		
		with pytest.raises(ValueError):
			Address(AddressList([Address(email), Address(email)]))
Пример #3
0
	def test_address_from_addresslist_limit_0(self):
		with pytest.raises(ValueError):
			Address(AddressList())
Пример #4
0
	def test_addresses(self):
		self.addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')]
		assert self.addresses.addresses == AddressList('[email protected], [email protected]')
Пример #5
0
	def test_invalid_init(self):
		with pytest.raises(ValueError):
			AddressList(2)
Пример #6
0
 def __init__(self):
     self._addresses = AddressList()
Пример #7
0
	def recipients(self):
		return AddressList(self.to + self.cc + self.bcc)
Пример #8
0
 def setUp(self):
     self.addresses = AddressList()
Пример #9
0
	def setup_class(cls):
		cls._addresses = AddressList()
Пример #10
0
class TestAddressList(object):
	"""Test the AddressList helper class."""
	
	addresses = AutoConverter('_addresses', AddressList)
	
	@classmethod
	def setup_class(cls):
		cls._addresses = AddressList()
		
	def setup_method(self, method):
		self.addresses = AddressList()
	
	def teardown_method(self, method):
		del self.addresses
	
	def test_assignment(self):
		self.addresses = []
		self.addresses = ['*****@*****.**']
		assert self.addresses == ['*****@*****.**']
	
	def test_assign_single_address(self):
		address = '*****@*****.**'
		self.addresses = address
		
		assert [address] == self.addresses
		assert unicode(self.addresses) == address
	
	def test_assign_list_of_addresses(self):
		addresses = ['*****@*****.**', '*****@*****.**']
		self.addresses = addresses
		assert ', '.join(addresses) == unicode(self.addresses)
		assert addresses == self.addresses
	
	def test_assign_list_of_named_addresses(self):
		addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')]
		self.addresses = addresses
		
		string_addresses = [unicode(Address(*value)) for value in addresses]
		assert ', '.join(string_addresses) == unicode(self.addresses)
		assert string_addresses == self.addresses
	
	def test_assign_item(self):
		self.addresses.append('*****@*****.**')
		assert self.addresses[0] == '*****@*****.**'
		self.addresses[0] = '*****@*****.**'
		
		assert isinstance(self.addresses[0], Address)
		assert self.addresses[0] == '*****@*****.**'
	
	def test_assign_slice(self):
		self.addresses[:] = ('*****@*****.**', '*****@*****.**')
		
		assert isinstance(self.addresses[0], Address)
		assert isinstance(self.addresses[1], Address)
	
	def test_init_accepts_string_list(self):
		addresses = '[email protected], [email protected]'
		self.addresses = addresses
		
		assert addresses == unicode(self.addresses)
	
	def test_init_accepts_tuple(self):
		addresses = AddressList(('foo', '*****@*****.**'))
		assert addresses == [('foo', '*****@*****.**')]
	
	def test_bytes(self):
		self.addresses = [('User1', 'foo@exámple.test'), ('User2', 'foo@exámple.test')]
		assert bytes(self.addresses) == b'User1 <*****@*****.**>, User2 <*****@*****.**>'
	
	def test_repr(self):
		assert repr(self.addresses) == 'AddressList()'
		
		self.addresses = ['*****@*****.**', '*****@*****.**']
		
		assert repr(self.addresses) == 'AddressList("[email protected], [email protected]")'
	
	def test_invalid_init(self):
		with pytest.raises(ValueError):
			AddressList(2)
	
	def test_addresses(self):
		self.addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')]
		assert self.addresses.addresses == AddressList('[email protected], [email protected]')
	
	def test_validation_strips_multiline_addresses(self):
		self.addresses = '*****@*****.**'
		evil_lines = ['*****@*****.**', 'To: [email protected]', 'From: [email protected]']
		evil_input = '\n'.join(evil_lines)
		self.addresses.append(evil_input)
		assert self.addresses == ['*****@*****.**', evil_lines[0]]
	
	def test_return_addresses_as_strings(self):
		self.addresses = 'foo@exámple.test'
		encoded_address = '*****@*****.**'
		assert self.addresses.string_addresses == [encoded_address]
Пример #11
0
 def test_address_from_addresslist_limit_2(self):
     email = '*****@*****.**'
     addr = Address(AddressList([Address(email), Address(email)]))
Пример #12
0
 def test_address_from_addresslist_limit_0(self):
     email = '*****@*****.**'
     addr = Address(AddressList())
Пример #13
0
 def test_invalid_init(self):
     AddressList(2)
Пример #14
0
 def test_init_accepts_tuple(self):
     addresses = AddressList(('foo', '*****@*****.**'))
     eq_([('foo', '*****@*****.**')], addresses)
Пример #15
0
 def setUp(self):
     self.addresses = AddressList()
Пример #16
0
	def setup_method(self, method):
		self.addresses = AddressList()
Пример #17
0
class TestAddressList(object):
    """Test the AddressList helper class."""
    
    addresses = AutoConverter('_addresses', AddressList)
    
    def __init__(self):
        self._addresses = AddressList()
    
    def setUp(self):
        self.addresses = AddressList()
    
    def tearDown(self):
        del self.addresses
    
    def test_assignment(self):
        eq_([], self.addresses)
    
    def test_assign_single_address(self):
        address = '*****@*****.**'
        self.addresses = address
        
        eq_(self.addresses, [address])
        eq_(unicode(self.addresses), address)
    
    def test_assign_list_of_addresses(self):
        addresses = ['*****@*****.**', '*****@*****.**']
        self.addresses = addresses
        eq_(', '.join(addresses), unicode(self.addresses))
        eq_(addresses, self.addresses)
    
    def test_assign_list_of_named_addresses(self):
        addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')]
        self.addresses = addresses
        
        string_addresses = [unicode(Address(*value)) for value in addresses]
        eq_(', '.join(string_addresses), unicode(self.addresses))
        eq_(string_addresses, self.addresses)
    
    def test_assign_item(self):
        self.addresses.append('*****@*****.**')
        eq_(self.addresses[0], '*****@*****.**')
        self.addresses[0] = '*****@*****.**'
        
        assert isinstance(self.addresses[0], Address)
        eq_(self.addresses[0], '*****@*****.**')
    
    def test_assign_slice(self):
        self.addresses[:] = ('*****@*****.**', '*****@*****.**')
        
        assert isinstance(self.addresses[0], Address)
        assert isinstance(self.addresses[1], Address)
    
    def test_init_accepts_string_list(self):
        addresses = '[email protected], [email protected]'
        self.addresses = addresses
        
        eq_(addresses, unicode(self.addresses))
    
    def test_init_accepts_tuple(self):
        addresses = AddressList(('foo', '*****@*****.**'))
        eq_([('foo', '*****@*****.**')], addresses)
    
    def test_bytes(self):
        self.addresses = [('User1', 'foo@exámple.test'), ('User2', 'foo@exámple.test')]
        eq_(bytes(self.addresses), b'User1 <*****@*****.**>, User2 <*****@*****.**>')
    
    def test_repr(self):
        eq_(repr(self.addresses), 'AddressList()')
        
        self.addresses = ['*****@*****.**', '*****@*****.**']
        
        eq_(repr(self.addresses),
            'AddressList("[email protected], [email protected]")')
    
    @raises(ValueError)
    def test_invalid_init(self):
        AddressList(2)
    
    def test_addresses(self):
        self.addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')]
        eq_(self.addresses.addresses, AddressList('[email protected], [email protected]'))
    
    def test_validation_strips_multiline_addresses(self):
        self.addresses = '*****@*****.**'
        evil_lines = ['*****@*****.**', 'To: [email protected]', 'From: [email protected]']
        evil_input = '\n'.join(evil_lines)
        self.addresses.append(evil_input)
        eq_(['*****@*****.**', evil_lines[0]], self.addresses)
    
    def test_return_addresses_as_strings(self):
        self.addresses = 'foo@exámple.test'
        encoded_address = b'*****@*****.**'
        eq_([encoded_address], self.addresses.string_addresses)
Пример #18
0
	def test_address_from_addresslist(self):
		email = '*****@*****.**'
		addr = Address(AddressList([Address(email)]))
		assert unicode(addr) == email
Пример #19
0
 def test_permit_one_sender_at_most(self):
     message = self.build_message()
     message.sender = AddressList(['*****@*****.**', '*****@*****.**'])
Пример #20
0
	def test_init_accepts_tuple(self):
		addresses = AddressList(('foo', '*****@*****.**'))
		assert addresses == [('foo', '*****@*****.**')]
Пример #21
0
 def test_permit_one_sender_at_most(self):
     with pytest.raises(ValueError):
         message = self.build_message()
         message.sender = AddressList(
             ['*****@*****.**', '*****@*****.**'])
Пример #22
0
class TestAddressList(object):
    """Test the AddressList helper class."""
    
    addresses = AutoConverter('_addresses', AddressList)
    
    def __init__(self):
        self._addresses = AddressList()
    
    def setUp(self):
        self.addresses = AddressList()
    
    def tearDown(self):
        del self.addresses
    
    def test_assignment(self):
        eq_([], self.addresses)
        self.addresses = ['*****@*****.**']
        eq_(['*****@*****.**'], self.addresses)
    
    def test_assign_single_address(self):
        address = '*****@*****.**'
        self.addresses = address
        
        eq_(self.addresses, [address])
        eq_(unicode(self.addresses), address)
    
    def test_assign_list_of_addresses(self):
        addresses = ['*****@*****.**', '*****@*****.**']
        self.addresses = addresses
        eq_(', '.join(addresses), unicode(self.addresses))
        eq_(addresses, self.addresses)
    
    def test_assign_list_of_named_addresses(self):
        addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')]
        self.addresses = addresses
        
        string_addresses = [unicode(Address(*value)) for value in addresses]
        eq_(', '.join(string_addresses), unicode(self.addresses))
        eq_(string_addresses, self.addresses)
    
    def test_assign_item(self):
        self.addresses.append('*****@*****.**')
        eq_(self.addresses[0], '*****@*****.**')
        self.addresses[0] = '*****@*****.**'
        
        assert isinstance(self.addresses[0], Address)
        eq_(self.addresses[0], '*****@*****.**')
    
    def test_assign_slice(self):
        self.addresses[:] = ('*****@*****.**', '*****@*****.**')
        
        assert isinstance(self.addresses[0], Address)
        assert isinstance(self.addresses[1], Address)
    
    def test_init_accepts_string_list(self):
        addresses = '[email protected], [email protected]'
        self.addresses = addresses
        
        eq_(addresses, unicode(self.addresses))
    
    def test_init_accepts_tuple(self):
        addresses = AddressList(('foo', '*****@*****.**'))
        eq_([('foo', '*****@*****.**')], addresses)
    
    def test_bytes(self):
        self.addresses = [('User1', 'foo@exámple.test'), ('User2', 'foo@exámple.test')]
        eq_(bytes(self.addresses), b'User1 <*****@*****.**>, User2 <*****@*****.**>')
    
    def test_repr(self):
        eq_(repr(self.addresses), 'AddressList()')
        
        self.addresses = ['*****@*****.**', '*****@*****.**']
        
        eq_(repr(self.addresses),
            'AddressList("[email protected], [email protected]")')
    
    @raises(ValueError)
    def test_invalid_init(self):
        AddressList(2)
    
    def test_addresses(self):
        self.addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')]
        eq_(self.addresses.addresses, AddressList('[email protected], [email protected]'))
    
    def test_validation_strips_multiline_addresses(self):
        self.addresses = '*****@*****.**'
        evil_lines = ['*****@*****.**', 'To: [email protected]', 'From: [email protected]']
        evil_input = '\n'.join(evil_lines)
        self.addresses.append(evil_input)
        eq_(['*****@*****.**', evil_lines[0]], self.addresses)
    
    def test_return_addresses_as_strings(self):
        self.addresses = 'foo@exámple.test'
        encoded_address = b'*****@*****.**'
        eq_([encoded_address], self.addresses.string_addresses)