From 9bbf5c4444f5ffebffa49c08ae84c859597735d9 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 20 Nov 2021 10:24:54 +0100 Subject: db/message: work around python bug 39100 --- alot/db/message.py | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/alot/db/message.py b/alot/db/message.py index 4a7728ee..014218a6 100644 --- a/alot/db/message.py +++ b/alot/db/message.py @@ -63,30 +63,61 @@ class _MessageHeaders: def __contains__(self, key): return key in self._msg + # workaround for https://bugs.python.org/issue39100 + def _exc_is_bp39100(self, e): + if (e.args and len(e.args) >= 1 and + 'Group' in e.args[0] and 'local_part' in e.args[0]): + logging.error('Working around Python bug 39100') + return True + return False + + def _get_all_wrapper(self, key, failobj = None): + try: + return self._msg.get_all(key, failobj) + except AttributeError as e: + if self._exc_is_bp39100(e): + return [] + raise + def __getitem__(self, key): if not key in self._msg: raise KeyError(key) - return self._msg.get_all(key) + return self._get_all_wrapper(key) def get(self, key): """ Get the value of the first header with the name equal to key, None if the header is not present. """ - return self._msg.get(key) + try: + return self._msg.get(key) + except AttributeError as e: + if self._exc_is_bp39100(e): + return [] + raise def get_all(self, key): """ Get the list of all values of the header with the name equal to key, empty list of the header is not present. """ - return self._msg.get_all(key, []) + return self._get_all_wrapper(key, []) def keys(self): - return self._msg.keys() + try: + return self._msg.keys() + except AttributeError as e: + if self._exc_is_bp39100(e): + return [] + raise def items(self): - return self._msg.items() + try: + return self._msg.items() + except AttributeError as e: + if self._exc_is_bp39100(e): + return [] + raise class _MimeTree: _part = None -- cgit v1.2.3