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])
def test_address_from_addresslist_limit_2(self): email = '*****@*****.**' with pytest.raises(ValueError): Address(AddressList([Address(email), Address(email)]))
def test_address_from_addresslist_limit_0(self): with pytest.raises(ValueError): Address(AddressList())
def test_addresses(self): self.addresses = [('Test User 1', '*****@*****.**'), ('Test User 2', '*****@*****.**')] assert self.addresses.addresses == AddressList('[email protected], [email protected]')
def test_invalid_init(self): with pytest.raises(ValueError): AddressList(2)
def __init__(self): self._addresses = AddressList()
def recipients(self): return AddressList(self.to + self.cc + self.bcc)
def setUp(self): self.addresses = AddressList()
def setup_class(cls): cls._addresses = AddressList()
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]
def test_address_from_addresslist_limit_2(self): email = '*****@*****.**' addr = Address(AddressList([Address(email), Address(email)]))
def test_address_from_addresslist_limit_0(self): email = '*****@*****.**' addr = Address(AddressList())
def test_invalid_init(self): AddressList(2)
def test_init_accepts_tuple(self): addresses = AddressList(('foo', '*****@*****.**')) eq_([('foo', '*****@*****.**')], addresses)
def setup_method(self, method): self.addresses = AddressList()
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)
def test_address_from_addresslist(self): email = '*****@*****.**' addr = Address(AddressList([Address(email)])) assert unicode(addr) == email
def test_permit_one_sender_at_most(self): message = self.build_message() message.sender = AddressList(['*****@*****.**', '*****@*****.**'])
def test_init_accepts_tuple(self): addresses = AddressList(('foo', '*****@*****.**')) assert addresses == [('foo', '*****@*****.**')]
def test_permit_one_sender_at_most(self): with pytest.raises(ValueError): message = self.build_message() message.sender = AddressList( ['*****@*****.**', '*****@*****.**'])
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)