Properly re-raise exception to save original tracebacks
We usually mutate some exceptions to OfflineImapError() and it is a whole lot better if such exception will show up with the original traceback, so all valid occurrences of such mutations were transformed to the 3-tuple form of "raise". Had also added coding guidelines document where this re-raise strategy is documented. Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
This commit is contained in:
@ -206,8 +206,8 @@ class IMAPServer:
|
||||
imapobj.starttls()
|
||||
except imapobj.error as e:
|
||||
raise OfflineImapError("Failed to start "
|
||||
"TLS connection: %s"% str(e),
|
||||
OfflineImapError.ERROR.REPO)
|
||||
"TLS connection: %s" % str(e),
|
||||
OfflineImapError.ERROR.REPO, None, exc_info()[2])
|
||||
|
||||
|
||||
## All __authn_* procedures are helpers that do authentication.
|
||||
@ -466,7 +466,7 @@ class IMAPServer:
|
||||
"'%s'. Make sure you have configured the ser"\
|
||||
"ver name correctly and that you are online."%\
|
||||
(self.hostname, self.repos)
|
||||
raise OfflineImapError(reason, severity)
|
||||
raise OfflineImapError(reason, severity), None, exc_info()[2]
|
||||
|
||||
elif isinstance(e, SSLError) and e.errno == 1:
|
||||
# SSL unknown protocol error
|
||||
@ -479,7 +479,7 @@ class IMAPServer:
|
||||
reason = "Unknown SSL protocol connecting to host '%s' for "\
|
||||
"repository '%s'. OpenSSL responded:\n%s"\
|
||||
% (self.hostname, self.repos, e)
|
||||
raise OfflineImapError(reason, severity)
|
||||
raise OfflineImapError(reason, severity), None, 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
|
||||
@ -487,15 +487,15 @@ class IMAPServer:
|
||||
reason = "Connection to host '%s:%d' for repository '%s' was "\
|
||||
"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)
|
||||
raise OfflineImapError(reason, severity)
|
||||
"network." % (self.hostname, self.port, self.repos)
|
||||
raise OfflineImapError(reason, severity), None, exc_info()[2]
|
||||
# Could not acquire connection to the remote;
|
||||
# socket.error(last_error) raised
|
||||
if str(e)[:24] == "can't open socket; error":
|
||||
raise OfflineImapError("Could not connect to remote server '%s' "\
|
||||
"for repository '%s'. Remote does not answer."
|
||||
% (self.hostname, self.repos),
|
||||
OfflineImapError.ERROR.REPO)
|
||||
OfflineImapError.ERROR.REPO), None, exc_info()[2]
|
||||
else:
|
||||
# re-raise all other errors
|
||||
raise
|
||||
@ -702,7 +702,7 @@ class IdleThread(object):
|
||||
self.ui.error(e, exc_info()[2])
|
||||
self.parent.releaseconnection(imapobj, True)
|
||||
else:
|
||||
raise e
|
||||
raise
|
||||
else:
|
||||
success = True
|
||||
if "IDLE" in imapobj.capabilities:
|
||||
|
Reference in New Issue
Block a user