Lines Matching defs:message

17 import email.message
42 def add(self, message):
43 """Add message and return assigned key."""
47 """Remove the keyed message; raise KeyError if it doesn't exist."""
54 """If the keyed message exists, remove it."""
60 def __setitem__(self, key, message):
61 """Replace the keyed message; raise KeyError if it doesn't exist."""
65 """Return the keyed message, or default if it doesn't exist."""
72 """Return the keyed message; raise KeyError if it doesn't exist."""
86 Uses email.message.Message to create a 7bit clean string
87 representation of the message."""
123 """Return an iterator over (key, message) tuples."""
132 """Return a list of (key, message) tuples. Memory intensive."""
136 """Return True if the keyed message exists, False otherwise."""
149 """Delete the keyed message and return it, or default."""
158 """Delete an arbitrary (key, message) pair and return it."""
173 for key, message in source:
175 self[key] = message
179 raise KeyError('No message with key(s)')
197 def _string_to_bytes(self, message):
198 # If a message is not 7bit clean, we refuse to handle it since it
202 return message.encode('ascii')
207 # Whether each message must end in a newline
210 def _dump_message(self, message, target, mangle_from_=False):
212 """Dump message contents to target file."""
213 if isinstance(message, email.message.Message):
216 gen.flatten(message)
222 # Make sure the message ends with a newline
224 elif isinstance(message, (str, bytes, io.StringIO)):
225 if isinstance(message, io.StringIO):
228 message = message.getvalue()
229 if isinstance(message, str):
230 message = self._string_to_bytes(message)
232 message = message.replace(b'\nFrom ', b'\n>From ')
233 message = message.replace(b'\n', linesep)
234 target.write(message)
235 if self._append_newline and not message.endswith(linesep):
236 # Make sure the message ends with a newline
238 elif hasattr(message, 'read'):
239 if hasattr(message, 'buffer'):
242 message = message.buffer
245 line = message.readline()
259 # Make sure the message ends with a newline
262 raise TypeError('Invalid message type: %s' % type(message))
292 def add(self, message):
293 """Add message and return assigned key."""
296 self._dump_message(message, tmp_file)
302 if isinstance(message, MaildirMessage):
303 subdir = message.get_subdir()
304 suffix = self.colon + message.get_info()
312 if isinstance(message, MaildirMessage):
314 (os.path.getatime(tmp_file.name), message.get_date()))
328 raise ExternalClashError('Name clash with existing message: %s'
335 """Remove the keyed message; raise KeyError if it doesn't exist."""
339 """If the keyed message exists, remove it."""
346 def __setitem__(self, key, message):
347 """Replace the keyed message; raise KeyError if it doesn't exist."""
349 temp_key = self.add(message)
351 if isinstance(message, MaildirMessage):
352 # temp's subdir and suffix were specified by message.
365 if isinstance(message, MaildirMessage):
367 (os.path.getatime(tmp_path), message.get_date()))
409 """Return True if the keyed message exists, False otherwise."""
467 raise NotEmptyError('Folder contains message(s): %s' % folder)
561 raise KeyError('No message with key: %s' % key) from None
565 """Return the next message in a one-time iteration."""
603 def add(self, message):
604 """Add message and return assigned key."""
606 self._toc[self._next_key] = self._append_message(message)
608 # _append_message appends the message to the mailbox file. We
614 """Remove the keyed message; raise KeyError if it doesn't exist."""
619 def __setitem__(self, key, message):
620 """Replace the keyed message; raise KeyError if it doesn't exist."""
622 self._toc[key] = self._append_message(message)
631 """Return True if the keyed message exists, False otherwise."""
721 """Called before writing each message to file f."""
725 """Called after writing each message to file f."""
747 raise KeyError('No message with key: %s' % key) from None
749 def _append_message(self, message):
750 """Append message to mailbox and return (start, stop) offsets."""
754 # This is the first message, and the _pre_mailbox_hook
761 offsets = self._install_message(message)
809 def _install_message(self, message):
810 """Format a message and blindly write to self._file."""
812 if isinstance(message, str):
813 message = self._string_to_bytes(message)
814 if isinstance(message, bytes) and message.startswith(b'From '):
815 newline = message.find(b'\n')
817 from_line = message[:newline]
818 message = message[newline + 1:]
820 from_line = message
821 message = b''
822 elif isinstance(message, _mboxMMDFMessage):
823 author = message.get_from().encode('ascii')
825 elif isinstance(message, email.message.Message):
826 from_line = message.get_unixfrom() # May be None.
833 self._dump_message(message, self._file, self._mangle_from_)
853 """Called after writing each message to file f."""
871 # message anyway.
899 """Called before writing each message to file f."""
903 """Called after writing each message to file f."""
950 def add(self, message):
951 """Add message and return assigned key."""
965 self._dump_message(message, f)
974 if isinstance(message, MHMessage):
975 self._dump_sequences(message, new_key)
985 """Remove the keyed message; raise KeyError if it doesn't exist."""
991 raise KeyError('No message with key: %s' % key)
998 def __setitem__(self, key, message):
999 """Replace the keyed message; raise KeyError if it doesn't exist."""
1005 raise KeyError('No message with key: %s' % key)
1013 self._dump_message(message, f)
1014 if isinstance(message, MHMessage):
1015 self._dump_sequences(message, key)
1031 raise KeyError('No message with key: %s' % key)
1056 raise KeyError('No message with key: %s' % key)
1074 raise KeyError('No message with key: %s' % key)
1085 """Return True if the keyed message exists, False otherwise."""
1225 def _dump_sequences(self, message, key):
1227 pending_sequences = message.get_sequences()
1251 def add(self, message):
1252 """Add message and return assigned key."""
1253 key = _singlefileMailbox.add(self, message)
1254 if isinstance(message, BabylMessage):
1255 self._labels[key] = message.get_labels()
1259 """Remove the keyed message; raise KeyError if it doesn't exist."""
1264 def __setitem__(self, key, message):
1265 """Replace the keyed message; raise KeyError if it doesn't exist."""
1266 _singlefileMailbox.__setitem__(self, key, message)
1267 if isinstance(message, BabylMessage):
1268 self._labels[key] = message.get_labels()
1374 """Called before writing each message to file f."""
1378 """Called after writing each message to file f."""
1381 def _install_message(self, message):
1382 """Write message contents and return (start, stop)."""
1384 if isinstance(message, BabylMessage):
1387 for label in message.get_labels():
1401 if isinstance(message, email.message.Message):
1404 orig_generator.flatten(message)
1412 if isinstance(message, BabylMessage):
1415 vis_generator.flatten(message.get_visible())
1433 elif isinstance(message, (bytes, str, io.StringIO)):
1434 if isinstance(message, io.StringIO):
1437 message = message.getvalue()
1438 if isinstance(message, str):
1439 message = self._string_to_bytes(message)
1440 body_start = message.find(b'\n\n') + 2
1442 self._file.write(message[:body_start].replace(b'\n', linesep))
1444 self._file.write(message[:body_start].replace(b'\n', linesep))
1445 self._file.write(message[body_start:].replace(b'\n', linesep))
1448 self._file.write(message.replace(b'\n', linesep))
1449 elif hasattr(message, 'readline'):
1450 if hasattr(message, 'buffer'):
1453 message = message.buffer
1454 original_pos = message.tell()
1457 line = message.readline()
1468 message.seek(original_pos)
1472 line = message.readline()
1484 raise TypeError('Invalid message type: %s' % type(message))
1489 class Message(email.message.Message):
1492 def __init__(self, message=None):
1494 if isinstance(message, email.message.Message):
1495 self._become_message(copy.deepcopy(message))
1496 if isinstance(message, Message):
1497 message._explain_to(self)
1498 elif isinstance(message, bytes):
1499 self._become_message(email.message_from_bytes(message))
1500 elif isinstance(message, str):
1501 self._become_message(email.message_from_string(message))
1502 elif isinstance(message, io.TextIOWrapper):
1503 self._become_message(email.message_from_file(message))
1504 elif hasattr(message, "read"):
1505 self._become_message(email.message_from_binary_file(message))
1506 elif message is None:
1507 email.message.Message.__init__(self)
1509 raise TypeError('Invalid message type: %s' % type(message))
1511 def _become_message(self, message):
1512 """Assume the non-format-specific state of message."""
1513 type_specific = getattr(message, '_type_specific_attributes', [])
1514 for name in message.__dict__:
1516 self.__dict__[name] = message.__dict__[name]
1518 def _explain_to(self, message):
1519 """Copy format-specific state to message insofar as possible."""
1520 if isinstance(message, Message):
1531 def __init__(self, message=None):
1536 Message.__init__(self, message)
1570 """Return delivery date of message, in seconds since the epoch."""
1574 """Set delivery date of message, in seconds since the epoch."""
1581 """Get the message's "info" as a string."""
1585 """Set the message's "info" string."""
1591 def _explain_to(self, message):
1592 """Copy Maildir-specific state to message insofar as possible."""
1593 if isinstance(message, MaildirMessage):
1594 message.set_flags(self.get_flags())
1595 message.set_subdir(self.get_subdir())
1596 message.set_date(self.get_date())
1597 elif isinstance(message, _mboxMMDFMessage):
1600 message.add_flag('R')
1602 message.add_flag('O')
1604 message.add_flag('D')
1606 message.add_flag('F')
1608 message.add_flag('A')
1609 message.set_from('MAILER-DAEMON', time.gmtime(self.get_date()))
1610 elif isinstance(message, MHMessage):
1613 message.add_sequence('unseen')
1615 message.add_sequence('replied')
1617 message.add_sequence('flagged')
1618 elif isinstance(message, BabylMessage):
1621 message.add_label('unseen')
1623 message.add_label('deleted')
1625 message.add_label('answered')
1627 message.add_label('forwarded')
1628 elif isinstance(message, Message):
1632 type(message))
1640 def __init__(self, message=None):
1643 if isinstance(message, email.message.Message):
1644 unixfrom = message.get_unixfrom()
1647 Message.__init__(self, message)
1696 def _explain_to(self, message):
1697 """Copy mbox- or MMDF-specific state to message insofar as possible."""
1698 if isinstance(message, MaildirMessage):
1701 message.set_subdir('cur')
1703 message.add_flag('F')
1705 message.add_flag('R')
1707 message.add_flag('S')
1709 message.add_flag('T')
1710 del message['status']
1711 del message['x-status']
1714 message.set_date(calendar.timegm(time.strptime(maybe_date,
1718 elif isinstance(message, _mboxMMDFMessage):
1719 message.set_flags(self.get_flags())
1720 message.set_from(self.get_from())
1721 elif isinstance(message, MHMessage):
1724 message.add_sequence('unseen')
1726 message.add_sequence('replied')
1728 message.add_sequence('flagged')
1729 del message['status']
1730 del message['x-status']
1731 elif isinstance(message, BabylMessage):
1734 message.add_label('unseen')
1736 message.add_label('deleted')
1738 message.add_label('answered')
1739 del message['status']
1740 del message['x-status']
1741 elif isinstance(message, Message):
1745 type(message))
1757 def __init__(self, message=None):
1760 Message.__init__(self, message)
1763 """Return a list of sequences that include the message."""
1767 """Set the list of sequences that include the message."""
1771 """Add sequence to list of sequences including the message."""
1779 """Remove sequence from the list of sequences including the message."""
1785 def _explain_to(self, message):
1786 """Copy MH-specific state to message insofar as possible."""
1787 if isinstance(message, MaildirMessage):
1790 message.set_subdir('cur')
1792 message.set_subdir('cur')
1793 message.add_flag('S')
1795 message.add_flag('F')
1797 message.add_flag('R')
1798 elif isinstance(message, _mboxMMDFMessage):
1801 message.add_flag('RO')
1803 message.add_flag('O')
1805 message.add_flag('F')
1807 message.add_flag('A')
1808 elif isinstance(message, MHMessage):
1810 message.add_sequence(sequence)
1811 elif isinstance(message, BabylMessage):
1814 message.add_label('unseen')
1816 message.add_label('answered')
1817 elif isinstance(message, Message):
1821 type(message))
1829 def __init__(self, message=None):
1833 Message.__init__(self, message)
1836 """Return a list of labels on the message."""
1840 """Set the list of labels on the message."""
1844 """Add label to list of labels on the message."""
1852 """Remove label from the list of labels on the message."""
1877 def _explain_to(self, message):
1878 """Copy Babyl-specific state to message insofar as possible."""
1879 if isinstance(message, MaildirMessage):
1882 message.set_subdir('cur')
1884 message.set_subdir('cur')
1885 message.add_flag('S')
1887 message.add_flag('P')
1889 message.add_flag('R')
1891 message.add_flag('T')
1892 elif isinstance(message, _mboxMMDFMessage):
1895 message.add_flag('RO')
1897 message.add_flag('O')
1899 message.add_flag('D')
1901 message.add_flag('A')
1902 elif isinstance(message, MHMessage):
1905 message.add_sequence('unseen')
1907 message.add_sequence('replied')
1908 elif isinstance(message, BabylMessage):
1909 message.set_visible(self.get_visible())
1911 message.add_label(label)
1912 elif isinstance(message, Message):
1916 type(message))