Message with Babyl-specific properties.
| 1823 | |
| 1824 | |
| 1825 | class BabylMessage(Message): |
| 1826 | """Message with Babyl-specific properties.""" |
| 1827 | |
| 1828 | _type_specific_attributes = ['_labels', '_visible'] |
| 1829 | |
| 1830 | def __init__(self, message=None): |
| 1831 | """Initialize a BabylMessage instance.""" |
| 1832 | self._labels = [] |
| 1833 | self._visible = Message() |
| 1834 | Message.__init__(self, message) |
| 1835 | |
| 1836 | def get_labels(self): |
| 1837 | """Return a list of labels on the message.""" |
| 1838 | return self._labels[:] |
| 1839 | |
| 1840 | def set_labels(self, labels): |
| 1841 | """Set the list of labels on the message.""" |
| 1842 | self._labels = list(labels) |
| 1843 | |
| 1844 | def add_label(self, label): |
| 1845 | """Add label to list of labels on the message.""" |
| 1846 | if isinstance(label, str): |
| 1847 | if label not in self._labels: |
| 1848 | self._labels.append(label) |
| 1849 | else: |
| 1850 | raise TypeError('label must be a string: %s' % type(label)) |
| 1851 | |
| 1852 | def remove_label(self, label): |
| 1853 | """Remove label from the list of labels on the message.""" |
| 1854 | try: |
| 1855 | self._labels.remove(label) |
| 1856 | except ValueError: |
| 1857 | pass |
| 1858 | |
| 1859 | def get_visible(self): |
| 1860 | """Return a Message representation of visible headers.""" |
| 1861 | return Message(self._visible) |
| 1862 | |
| 1863 | def set_visible(self, visible): |
| 1864 | """Set the Message representation of visible headers.""" |
| 1865 | self._visible = Message(visible) |
| 1866 | |
| 1867 | def update_visible(self): |
| 1868 | """Update and/or sensibly generate a set of visible headers.""" |
| 1869 | for header in self._visible.keys(): |
| 1870 | if header in self: |
| 1871 | self._visible.replace_header(header, self[header]) |
| 1872 | else: |
| 1873 | del self._visible[header] |
| 1874 | for header in ('Date', 'From', 'Reply-To', 'To', 'CC', 'Subject'): |
| 1875 | if header in self and header not in self._visible: |
| 1876 | self._visible[header] = self[header] |
| 1877 | |
| 1878 | def _explain_to(self, message): |
| 1879 | """Copy Babyl-specific state to message insofar as possible.""" |
| 1880 | if isinstance(message, MaildirMessage): |
| 1881 | labels = set(self.get_labels()) |
| 1882 | if 'unseen' in labels: |