[PATCH] correctly reraise errors with six

Nicolas Sebrecht nicolas.s-dev at laposte.net
Wed Jun 29 02:45:01 BST 2016


Signed-off-by: Nicolas Sebrecht <nicolas.s-dev at laposte.net>
---

The following changes since commit 3293b75c9c735f054eb267afcc6f3f9713e6c1aa:

  release.sh: get_git_who(): remove unnecessary blank line (2016-06-27 16:11:44 +0200)

are available in the git repository at:

  https://github.com/nicolas33/offlineimap.git ns/reraise

for you to fetch changes up to 9ccfaa96697bff0154e010f76096ca5e34753546:

  correctly reraise errors with six (2016-06-29 03:42:57 +0200)

----------------------------------------------------------------

 offlineimap/CustomConfig.py             | 11 ++++++-----
 offlineimap/accounts.py                 | 19 ++++++++++++-------
 offlineimap/folder/Gmail.py             | 17 ++++++++++-------
 offlineimap/folder/GmailMaildir.py      |  9 ++++++---
 offlineimap/folder/IMAP.py              | 31 +++++++++++++++++++------------
 offlineimap/folder/LocalStatus.py       |  6 +++---
 offlineimap/folder/LocalStatusSQLite.py | 13 ++++++++-----
 offlineimap/folder/Maildir.py           | 31 +++++++++++++++++++------------
 offlineimap/folder/UIDMaps.py           | 28 ++++++++++++++++++----------
 offlineimap/imaplibutil.py              | 10 ++++++----
 offlineimap/imapserver.py               | 33 ++++++++++++++++++++-------------
 offlineimap/repository/IMAP.py          |  8 ++++++--
 offlineimap/repository/__init__.py      | 14 ++++++++------
 13 files changed, 141 insertions(+), 89 deletions(-)

diff --git a/offlineimap/CustomConfig.py b/offlineimap/CustomConfig.py
index 445a04f..f9a252d 100644
--- a/offlineimap/CustomConfig.py
+++ b/offlineimap/CustomConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2003-2015 John Goerzen & contributors
+# Copyright (C) 2003-2016 John Goerzen & contributors
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -16,9 +16,8 @@
 
 import os
 import re
-from sys import exc_info
-
 import six
+from sys import exc_info
 
 try:
     from ConfigParser import SafeConfigParser, Error
@@ -77,8 +76,10 @@ class CustomConfigParser(SafeConfigParser):
             val = self.get(section, option).strip()
             return re.split(separator_re, val)
         except re.error as e:
-            six.reraise(Error("Bad split regexp '%s': %s" % \
-              (separator_re, e)), None, exc_info()[2])
+            six.reraise(Error,
+                        Error("Bad split regexp '%s': %s"%
+                            (separator_re, e)),
+                        exc_info()[2])
 
     def getdefaultlist(self, section, option, default, separator_re):
         """Same as getlist, but returns the value of `default`
diff --git a/offlineimap/accounts.py b/offlineimap/accounts.py
index 8a9492e..fb0ef0e 100644
--- a/offlineimap/accounts.py
+++ b/offlineimap/accounts.py
@@ -228,9 +228,12 @@ class SyncableAccount(Account):
             pass
         except IOError:
             self._lockfd.close()
-            six.reraise(OfflineImapError("Could not lock account %s. Is another "
-                "instance using this account?"% self,
-                OfflineImapError.ERROR.REPO), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                        OfflineImapError(
+                            "Could not lock account %s. Is another "
+                            "instance using this account?"% self,
+                            OfflineImapError.ERROR.REPO),
+                        exc_info()[2])
 
     def _unlock(self):
         """Unlock the account, deleting the lock file"""
@@ -537,10 +540,12 @@ def syncfolder(account, remotefolder, quick):
         localstart = localfolder.getstartdate()
         remotestart = remotefolder.getstartdate()
         if (maxage != None) + (localstart != None) + (remotestart != None) > 1:
-            six.reraise(OfflineImapError("You can set at most one of the "
-                "following: maxage, startdate (for the local folder), "
-                "startdate (for the remote folder)",
-                OfflineImapError.ERROR.REPO), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                        OfflineImapError("You can set at most one of the "
+                            "following: maxage, startdate (for the local "
+                            "folder), startdate (for the remote folder)",
+                            OfflineImapError.ERROR.REPO),
+                        exc_info()[2])
         if (maxage != None or localstart or remotestart) and quick:
             # IMAP quickchanged isn't compatible with options that
             # involve restricting the messagelist, since the "quick"
diff --git a/offlineimap/folder/Gmail.py b/offlineimap/folder/Gmail.py
index 968e23e..b55010c 100644
--- a/offlineimap/folder/Gmail.py
+++ b/offlineimap/folder/Gmail.py
@@ -1,6 +1,6 @@
 # Gmail IMAP folder support
 # Copyright (C) 2008 Riccardo Murri <riccardo.murri at gmail.com>
-# Copyright (C) 2002-2007 John Goerzen <jgoerzen at complete.org>
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
 import re
+import six
 from sys import exc_info
 
 from offlineimap import imaputil, OfflineImapError
@@ -24,8 +25,6 @@ from offlineimap import imaplibutil
 import offlineimap.accounts
 from .IMAP import IMAPFolder
 
-import six
-
 """Folder implementation to support features of the Gmail IMAP server."""
 
 class GmailFolder(IMAPFolder):
@@ -141,10 +140,14 @@ class GmailFolder(IMAPFolder):
             res_type, response = imapobj.fetch("'%s'"% msgsToFetch,
               '(FLAGS X-GM-LABELS UID)')
             if res_type != 'OK':
-                six.reraise(OfflineImapError("FETCHING UIDs in folder [%s]%s failed. " % \
-                  (self.getrepository(), self) + \
-                  "Server responded '[%s] %s'" % \
-                  (res_type, response), OfflineImapError.ERROR.FOLDER), None, exc_info()[2])
+                six.reraise(OfflineImapError,
+                            OfflineImapError(
+                                "FETCHING UIDs in folder [%s]%s failed. "%
+                                (self.getrepository(), self) +
+                                "Server responded '[%s] %s'"%
+                                (res_type, response),
+                                OfflineImapError.ERROR.FOLDER),
+                            exc_info()[2])
         finally:
             self.imapserver.releaseconnection(imapobj)
 
diff --git a/offlineimap/folder/GmailMaildir.py b/offlineimap/folder/GmailMaildir.py
index 65626ea..8301623 100644
--- a/offlineimap/folder/GmailMaildir.py
+++ b/offlineimap/folder/GmailMaildir.py
@@ -1,5 +1,5 @@
 # Maildir folder support with labels
-# Copyright (C) 2002 - 2016 John Goerzen & contributors
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -176,8 +176,11 @@ class GmailMaildirFolder(MaildirFolder):
         try:
             os.rename(tmppath, filepath)
         except OSError as e:
-            six.reraise(OfflineImapError("Can't rename file '%s' to '%s': %s" % \
-              (tmppath, filepath, e[1]), OfflineImapError.ERROR.FOLDER), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                    OfflineImapError("Can't rename file '%s' to '%s': %s"%
+                        (tmppath, filepath, e[1]),
+                        OfflineImapError.ERROR.FOLDER),
+                    exc_info()[2])
 
         # if utime_from_header=true, we don't want to change the mtime.
         if self.utime_from_header and mtime:
diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py
index 11a3a2a..a3fbe08 100644
--- a/offlineimap/folder/IMAP.py
+++ b/offlineimap/folder/IMAP.py
@@ -1,5 +1,5 @@
 # IMAP folder support
-# Copyright (C) 2002-2016 John Goerzen & contributors
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -84,8 +84,11 @@ class IMAPFolder(BaseFolder):
     def getmaxage(self):
         if self.config.getdefault("Account %s"%
                 self.accountname, "maxage", None):
-            six.reraise(OfflineImapError("maxage is not supported on IMAP-IMAP sync",
-                OfflineImapError.ERROR.REPO), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                        OfflineImapError(
+                            "maxage is not supported on IMAP-IMAP sync",
+                            OfflineImapError.ERROR.REPO),
+                        exc_info()[2])
 
     # Interface from BaseFolder
     def getinstancelimitnamespace(self):
@@ -613,11 +616,13 @@ class IMAPFolder(BaseFolder):
                     self.imapserver.releaseconnection(imapobj, True)
                     imapobj = self.imapserver.acquireconnection()
                     if not retry_left:
-                        six.reraise(OfflineImapError("Saving msg (%s) in folder '%s', "
-                              "repository '%s' failed (abort). Server responded: %s\n"
-                              "Message content was: %s"%
-                              (msg_id, self, self.getrepository(), str(e), dbg_output),
-                                               OfflineImapError.ERROR.MESSAGE), None, exc_info()[2])
+                        six.reraise(OfflineImapError,
+                                    OfflineImapError("Saving msg (%s) in folder '%s', "
+                                        "repository '%s' failed (abort). Server responded: %s\n"
+                                        "Message content was: %s"%
+                                        (msg_id, self, self.getrepository(), str(e), dbg_output),
+                                        OfflineImapError.ERROR.MESSAGE),
+                                    exc_info()[2])
                     # XXX: is this still needed?
                     self.ui.error(e, exc_info()[2])
                 except imapobj.error as e: # APPEND failed
@@ -626,10 +631,12 @@ class IMAPFolder(BaseFolder):
                     # drop conn, it might be bad.
                     self.imapserver.releaseconnection(imapobj, True)
                     imapobj = None
-                    six.reraise(OfflineImapError("Saving msg (%s) folder '%s', repo '%s'"
-                        "failed (error). Server responded: %s\nMessage content was: "
-                        "%s" % (msg_id, self, self.getrepository(), str(e), dbg_output),
-                            OfflineImapError.ERROR.MESSAGE), None, exc_info()[2])
+                    six.reraise(OfflineImapError,
+                                OfflineImapError("Saving msg (%s) folder '%s', repo '%s'"
+                                    "failed (error). Server responded: %s\nMessage content was: "
+                                    "%s"% (msg_id, self, self.getrepository(), str(e), dbg_output),
+                                    OfflineImapError.ERROR.MESSAGE),
+                                exc_info()[2])
             # Checkpoint. Let it write out stuff, etc. Eg searches for
             # just uploaded messages won't work if we don't do this.
             (typ,dat) = imapobj.check()
diff --git a/offlineimap/folder/LocalStatus.py b/offlineimap/folder/LocalStatus.py
index 356918f..9d4075a 100644
--- a/offlineimap/folder/LocalStatus.py
+++ b/offlineimap/folder/LocalStatus.py
@@ -1,5 +1,5 @@
 # Local status cache virtual folder
-# Copyright (C) 2002-2016 John Goerzen & contributors
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -75,7 +75,7 @@ class LocalStatusFolder(BaseFolder):
                 errstr = ("Corrupt line '%s' in cache file '%s'"%
                     (line, self.filename))
                 self.ui.warn(errstr)
-                six.reraise(ValueError(errstr), None, exc_info()[2])
+                six.reraise(ValueError, ValueError(errstr), exc_info()[2])
             self.messagelist[uid] = self.msglist_item_initializer(uid)
             self.messagelist[uid]['flags'] = flags
 
@@ -98,7 +98,7 @@ class LocalStatusFolder(BaseFolder):
                 errstr = "Corrupt line '%s' in cache file '%s'"% \
                     (line, self.filename)
                 self.ui.warn(errstr)
-                six.reraise(ValueError(errstr), None, exc_info()[2])
+                six.reraise(ValueError, ValueError(errstr), exc_info()[2])
             self.messagelist[uid] = self.msglist_item_initializer(uid)
             self.messagelist[uid]['flags'] = flags
             self.messagelist[uid]['mtime'] = mtime
diff --git a/offlineimap/folder/LocalStatusSQLite.py b/offlineimap/folder/LocalStatusSQLite.py
index 1806796..efff16e 100644
--- a/offlineimap/folder/LocalStatusSQLite.py
+++ b/offlineimap/folder/LocalStatusSQLite.py
@@ -1,5 +1,5 @@
 # Local status cache virtual folder: SQLite backend
-# Copyright (C) 2009-2016 Stewart Smith and contributors
+# Copyright (C) 2009-2016 Stewart Smith and contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -67,10 +67,13 @@ class LocalStatusSQLiteFolder(BaseFolder):
             self.connection = sqlite.connect(self.filename, check_same_thread=False)
         except sqlite.OperationalError as e:
             # Operation had failed.
-            six.reraise(UserWarning("cannot open database file '%s': %s.\nYou might "
-                "want to check the rights to that file and if it cleanly opens "
-                "with the 'sqlite<3>' command."%
-                (self.filename, e)), None, exc_info()[2])
+            six.reraise(UserWarning,
+                        UserWarning(
+                            "cannot open database file '%s': %s.\nYou might "
+                            "want to check the rights to that file and if it "
+                            "cleanly opens with the 'sqlite<3>' command."%
+                            (self.filename, e)),
+                        exc_info()[2])
 
         # Make sure sqlite is in multithreading SERIALIZE mode.
         assert sqlite.threadsafety == 1, 'Your sqlite is not multithreading safe.'
diff --git a/offlineimap/folder/Maildir.py b/offlineimap/folder/Maildir.py
index f5b208c..1a2830f 100644
--- a/offlineimap/folder/Maildir.py
+++ b/offlineimap/folder/Maildir.py
@@ -1,5 +1,5 @@
 # Maildir folder support
-# Copyright (C) 2002-2016 John Goerzen & contributors
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -22,8 +22,6 @@ import os
 import six
 from sys import exc_info
 from threading import Lock
-from .Base import BaseFolder
-
 try:
     from hashlib import md5
 except ImportError:
@@ -34,6 +32,7 @@ except NameError:
     from sets import Set as set
 
 from offlineimap import OfflineImapError, emailutil
+from .Base import BaseFolder
 
 # Find the UID in a message filename
 re_uidmatch = re.compile(',U=(\d+)')
@@ -311,8 +310,11 @@ class MaildirFolder(BaseFolder):
                         time.sleep(0.23)
                         continue
                     severity = OfflineImapError.ERROR.MESSAGE
-                    six.reraise(OfflineImapError("Unique filename %s already exists."%
-                        filename, severity), None, exc_info()[2])
+                    six.reraise(OfflineImapError,
+                                OfflineImapError(
+                                    "Unique filename %s already exists."%
+                                    filename, severity),
+                                exc_info()[2])
                 else:
                     raise
 
@@ -432,9 +434,12 @@ class MaildirFolder(BaseFolder):
                 os.rename(os.path.join(self.getfullname(), oldfilename),
                           os.path.join(self.getfullname(), newfilename))
             except OSError as e:
-                six.reraise(OfflineImapError("Can't rename file '%s' to '%s': %s" % (
-                                       oldfilename, newfilename, e[1]),
-                                       OfflineImapError.ERROR.FOLDER), None, exc_info()[2])
+                six.reraise(OfflineImapError,
+                            OfflineImapError(
+                                "Can't rename file '%s' to '%s': %s"%
+                                (oldfilename, newfilename, e[1]),
+                                OfflineImapError.ERROR.FOLDER),
+                            exc_info()[2])
 
             self.messagelist[uid]['flags'] = flags
             self.messagelist[uid]['filename'] = newfilename
@@ -512,10 +517,12 @@ class MaildirFolder(BaseFolder):
                     try:
                         os.rename(filename, newfilename)
                     except OSError as e:
-                        six.reraise(OfflineImapError(
-                            "Can't rename file '%s' to '%s': %s" % (
-                                filename, newfilename, e[1]),
-                            OfflineImapError.ERROR.FOLDER), None, exc_info()[2])
+                        six.reraise(OfflineImapError,
+                                OfflineImapError(
+                                    "Can't rename file '%s' to '%s': %s"%
+                                    (filename, newfilename, e[1]),
+                                    OfflineImapError.ERROR.FOLDER),
+                                exc_info()[2])
             elif match.group(1) != self._foldermd5:
                 self.ui.warn(("Inconsistent FMD5 for file `%s':"
                               " Neither `%s' nor `%s' found")
diff --git a/offlineimap/folder/UIDMaps.py b/offlineimap/folder/UIDMaps.py
index 45c94bd..d4ec1e3 100644
--- a/offlineimap/folder/UIDMaps.py
+++ b/offlineimap/folder/UIDMaps.py
@@ -1,5 +1,5 @@
 # Base folder support
-# Copyright (C) 2002-2015 John Goerzen & contributors
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -15,13 +15,14 @@
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
-from sys import exc_info
+import six
 from threading import Lock
+from sys import exc_info
+import os.path
+
 from offlineimap import OfflineImapError
 from .IMAP import IMAPFolder
-import os.path
 
-import six
 
 class MappedIMAPFolder(IMAPFolder):
     """IMAP class to map between Folder() instances where both side assign a uid
@@ -63,8 +64,11 @@ class MappedIMAPFolder(IMAPFolder):
                 try:
                     line = line.strip()
                 except ValueError:
-                    six.reraise(Exception("Corrupt line '%s' in UID mapping file '%s'"%
-                        (line, mapfilename)), None, exc_info()[2])
+                    six.reraise(Exception,
+                            Exception(
+                                "Corrupt line '%s' in UID mapping file '%s'"%
+                                (line, mapfilename)),
+                            exc_info()[2])
                 (str1, str2) = line.split(':')
                 loc = int(str1)
                 rem = int(str2)
@@ -90,10 +94,14 @@ class MappedIMAPFolder(IMAPFolder):
         try:
             return [mapping[x] for x in items]
         except KeyError as e:
-            six.reraise(OfflineImapError("Could not find UID for msg '{0}' (f:'{1}'."
-                " This is usually a bad thing and should be reported on the ma"
-                "iling list.".format(e.args[0], self),
-                OfflineImapError.ERROR.MESSAGE), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                        OfflineImapError(
+                            "Could not find UID for msg '{0}' (f:'{1}'."
+                            " This is usually a bad thing and should be "
+                            "reported on the mailing list.".format(
+                                e.args[0], self),
+                            OfflineImapError.ERROR.MESSAGE),
+                        exc_info()[2])
 
     # Interface from BaseFolder
     def cachemessagelist(self, min_date=None, min_uid=None):
diff --git a/offlineimap/imaplibutil.py b/offlineimap/imaplibutil.py
index 4d6f64e..a3824dd 100644
--- a/offlineimap/imaplibutil.py
+++ b/offlineimap/imaplibutil.py
@@ -18,16 +18,16 @@ import os
 import fcntl
 import time
 import subprocess
-from sys import exc_info
 import threading
-from hashlib import sha1
 import socket
 import errno
 import zlib
 import six
+from sys import exc_info
+from hashlib import sha1
 
-from offlineimap.ui import getglobalui
 from offlineimap import OfflineImapError
+from offlineimap.ui import getglobalui
 from offlineimap.virtual_imaplib2 import IMAP4, IMAP4_SSL, InternalDate, Mon2num
 
 
@@ -58,7 +58,9 @@ class UsefulIMAPMixIn(object):
             errstr = "Server '%s' closed connection, error on SELECT '%s'. Ser"\
                 "ver said: %s" % (self.host, mailbox, e.args[0])
             severity = OfflineImapError.ERROR.FOLDER_RETRY
-            six.reraise(OfflineImapError(errstr, severity), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                        OfflineImapError(errstr, severity),
+                        exc_info()[2])
         if result[0] != 'OK':
             #in case of error, bail out with OfflineImapError
             errstr = "Error SELECTing mailbox '%s', server reply:\n%s" %\
diff --git a/offlineimap/imapserver.py b/offlineimap/imapserver.py
index 9b39672..c0a5697 100644
--- a/offlineimap/imapserver.py
+++ b/offlineimap/imapserver.py
@@ -1,5 +1,5 @@
 # IMAP server support
-# Copyright (C) 2002 - 2016 John Goerzen & contributors
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -15,24 +15,22 @@
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
-from threading import Lock, BoundedSemaphore, Thread, Event, currentThread
 import hmac
 import socket
 import base64
-
 import json
 import urllib
-
 import socket
 import time
 import errno
+import six
 from sys import exc_info
 from socket import gaierror
 from ssl import SSLError, cert_time_to_seconds
-import six
+from threading import Lock, BoundedSemaphore, Thread, Event, currentThread
 
-from offlineimap import imaplibutil, imaputil, threadutil, OfflineImapError
 import offlineimap.accounts
+from offlineimap import imaplibutil, imaputil, threadutil, OfflineImapError
 from offlineimap.ui import getglobalui
 
 
@@ -574,7 +572,9 @@ class IMAPServer(object):
                          "'%s'. Make sure you have configured the ser"\
                          "ver name correctly and that you are online."%\
                          (self.hostname, self.repos)
-                six.reraise(OfflineImapError(reason, severity), None, exc_info()[2])
+                six.reraise(OfflineImapError,
+                            OfflineImapError(reason, severity),
+                            exc_info()[2])
 
             elif isinstance(e, SSLError) and e.errno == errno.EPERM:
                 # SSL unknown protocol error
@@ -587,7 +587,9 @@ class IMAPServer(object):
                     reason = "Unknown SSL protocol connecting to host '%s' for "\
                          "repository '%s'. OpenSSL responded:\n%s"\
                          % (self.hostname, self.repos, e)
-                six.reraise(OfflineImapError(reason, severity), None, exc_info()[2])
+                six.reraise(OfflineImapError,
+                            OfflineImapError(reason, severity),
+                            exc_info()[2])
 
             elif isinstance(e, socket.error) and e.args[0] == errno.ECONNREFUSED:
                 # "Connection refused", can be a non-existing port, or an unauthorized
@@ -596,14 +598,19 @@ class IMAPServer(object):
                     "refused. Make sure you have the right host and port "\
                     "configured and that you are actually able to access the "\
                     "network."% (self.hostname, self.port, self.repos)
-                six.reraise(OfflineImapError(reason, severity), None, exc_info()[2])
+                six.reraise(OfflineImapError,
+                            OfflineImapError(reason, severity),
+                            exc_info()[2])
             # Could not acquire connection to the remote;
             # socket.error(last_error) raised
             if str(e)[:24] == "can't open socket; error":
-                six.reraise(OfflineImapError("Could not connect to remote server '%s' "\
-                    "for repository '%s'. Remote does not answer."
-                    % (self.hostname, self.repos),
-                    OfflineImapError.ERROR.REPO), None, exc_info()[2])
+                six.reraise(OfflineImapError,
+                            OfflineImapError(
+                                "Could not connect to remote server '%s' "
+                                "for repository '%s'. Remote does not answer."%
+                                (self.hostname, self.repos),
+                                OfflineImapError.ERROR.REPO),
+                            exc_info()[2])
             else:
                 # re-raise all other errors
                 raise
diff --git a/offlineimap/repository/IMAP.py b/offlineimap/repository/IMAP.py
index fdd9955..5057a79 100644
--- a/offlineimap/repository/IMAP.py
+++ b/offlineimap/repository/IMAP.py
@@ -110,8 +110,12 @@ class IMAPRepository(BaseRepository):
             try:
                 host = self.localeval.eval(host)
             except Exception as e:
-                six.reraise(OfflineImapError("remotehosteval option for repository "
-                    "'%s' failed:\n%s"% (self, e), OfflineImapError.ERROR.REPO), None, exc_info()[2])
+                six.reraise(OfflineImapError,
+                            OfflineImapError(
+                                "remotehosteval option for repository "
+                                "'%s' failed:\n%s"% (self, e),
+                                OfflineImapError.ERROR.REPO),
+                            exc_info()[2])
             if host:
                 self._host = host
                 return self._host
diff --git a/offlineimap/repository/__init__.py b/offlineimap/repository/__init__.py
index e594e9d..90b2366 100644
--- a/offlineimap/repository/__init__.py
+++ b/offlineimap/repository/__init__.py
@@ -1,5 +1,4 @@
-# Copyright (C) 2002-2007 John Goerzen <jgoerzen at complete.org>
-#               2010 Sebastian Spaeth <Sebastian at SSpaeth.de> and contributors
+# Copyright (C) 2002-2016 John Goerzen & contributors.
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -15,9 +14,8 @@
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
-from sys import exc_info
-
 import six
+from sys import exc_info
 
 try:
     from configparser import NoSectionError
@@ -70,14 +68,18 @@ class Repository(object):
         except NoSectionError as e:
             errstr = ("Could not find section '%s' in configuration. Required "
                       "for account '%s'." % ('Repository %s' % name, account))
-            six.reraise(OfflineImapError(errstr, OfflineImapError.ERROR.REPO), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                        OfflineImapError(errstr, OfflineImapError.ERROR.REPO),
+                        exc_info()[2])
 
         try:
             repo = typemap[repostype]
         except KeyError:
             errstr = "'%s' repository not supported for '%s' repositories."% \
                 (repostype, reqtype)
-            six.reraise(OfflineImapError(errstr, OfflineImapError.ERROR.REPO), None, exc_info()[2])
+            six.reraise(OfflineImapError,
+                        OfflineImapError(errstr, OfflineImapError.ERROR.REPO),
+                        exc_info()[2])
 
         return repo(name, account)
 
-- 
2.7.4



More information about the OfflineIMAP-project mailing list