summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-11-20 10:24:54 +0100
committerAnton Khirnov <anton@khirnov.net>2021-11-20 10:24:54 +0100
commit9bbf5c4444f5ffebffa49c08ae84c859597735d9 (patch)
treeb72338ddc1263bfdb75b0eb18657fd44a422e39b
parent7aab36b6f9c968627d627e08a67c0ba758460d33 (diff)
db/message: work around python bug 39100
-rw-r--r--alot/db/message.py41
1 files 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