diff --git a/internetarchive/item.py b/internetarchive/item.py index 2a67032d..b2f500bc 100644 --- a/internetarchive/item.py +++ b/internetarchive/item.py @@ -45,7 +45,12 @@ from six.moves import urllib from requests import Response from tqdm import tqdm -from requests.exceptions import HTTPError +from requests.exceptions import HTTPError, ConnectionError +from urllib3.exceptions import ProtocolError +try: + from http.client import RemoteDisconnected +except ImportError: + from httplib import BadStatusLine as RemoteDisconnected from internetarchive.utils import (IdentifierListAsItems, get_md5, chunk_generator, IterableToFileAdapter, @@ -1095,6 +1100,21 @@ def _build_request(): print(' error uploading {0}: {1}'.format(key, msg), file=sys.stderr) # Raise HTTPError with error message. raise type(exc)(error_msg, response=exc.response, request=exc.request) + except ConnectionError as exc: # from requests + exc = exc.args[0] + if isinstance(exc, ProtocolError): # from urllib3 + exc = exc.args[1] + if isinstance(exc, RemoteDisconnected): # from http.client + msg = ("The server closed the connection after the file was uploaded. " + "The upload might have succeeded anyway.") + error_msg = (' error uploading {0} to {1}, ' + '{2}'.format(key, self.identifier, msg)) + log.error(error_msg) + return Response() + else: + raise + else: + raise finally: body.close()