Message with Babyl-specific properties.
| 1897 | |
| 1898 | |
| 1899 | class BabylMessage(Message): |
| 1900 | """Message with Babyl-specific properties.""" |
| 1901 | |
| 1902 | _type_specific_attributes = ['_labels', '_visible'] |
| 1903 | |
| 1904 | def __init__(self, message=None): |
| 1905 | """Initialize a BabylMessage instance.""" |
| 1906 | self._labels = [] |
| 1907 | self._visible = Message() |
| 1908 | Message.__init__(self, message) |
| 1909 | |
| 1910 | def get_labels(self): |
| 1911 | """Return a list of labels on the message.""" |
| 1912 | return self._labels[:] |
| 1913 | |
| 1914 | def set_labels(self, labels): |
| 1915 | """Set the list of labels on the message.""" |
| 1916 | self._labels = list(labels) |
| 1917 | |
| 1918 | def add_label(self, label): |
| 1919 | """Add label to list of labels on the message.""" |
| 1920 | if isinstance(label, str): |
| 1921 | if label not in self._labels: |
| 1922 | self._labels.append(label) |
| 1923 | else: |
| 1924 | raise TypeError('label must be a string: %s' % type(label)) |
| 1925 | |
| 1926 | def remove_label(self, label): |
| 1927 | """Remove label from the list of labels on the message.""" |
| 1928 | try: |
| 1929 | self._labels.remove(label) |
| 1930 | except ValueError: |
| 1931 | pass |
| 1932 | |
| 1933 | def get_visible(self): |
| 1934 | """Return a Message representation of visible headers.""" |
| 1935 | return Message(self._visible) |
| 1936 | |
| 1937 | def set_visible(self, visible): |
| 1938 | """Set the Message representation of visible headers.""" |
| 1939 | self._visible = Message(visible) |
| 1940 | |
| 1941 | def update_visible(self): |
| 1942 | """Update and/or sensibly generate a set of visible headers.""" |
| 1943 | for header in self._visible.keys(): |
| 1944 | if header in self: |
| 1945 | self._visible.replace_header(header, self[header]) |
| 1946 | else: |
| 1947 | del self._visible[header] |
| 1948 | for header in ('Date', 'From', 'Reply-To', 'To', 'CC', 'Subject'): |
| 1949 | if header in self and header not in self._visible: |
| 1950 | self._visible[header] = self[header] |
| 1951 | |
| 1952 | def _explain_to(self, message): |
| 1953 | """Copy Babyl-specific state to message insofar as possible.""" |
| 1954 | if isinstance(message, MaildirMessage): |
| 1955 | labels = set(self.get_labels()) |
| 1956 | if 'unseen' in labels: |