diff --git a/pulsar/client/transport/standard.py b/pulsar/client/transport/standard.py index bde2602e14649a08b868ff62bad5e218ebb931c7..01df9c71b80e07fb4d19da5f808e7e86f02d0efe 100644 --- a/pulsar/client/transport/standard.py +++ b/pulsar/client/transport/standard.py @@ -4,23 +4,27 @@ Pulsar HTTP Client layer based on Python Standard Library (urllib2) from __future__ import with_statement from os.path import getsize import mmap +import socket try: - from urllib2 import urlopen + from urllib2 import urlopen, URLError except ImportError: from urllib.request import urlopen + from urllib.error import URLError try: from urllib2 import Request except ImportError: from urllib.request import Request +from ..exceptions import PulsarClientTransportError + class Urllib2Transport(object): - def __init__(self, **kwrgs): - pass + def __init__(self, timeout=None, **kwrgs): + self.timeout = timeout def _url_open(self, request, data): - return urlopen(request, data) + return urlopen(request, data, self.timeout) def execute(self, url, method=None, data=None, input_path=None, output_path=None): request = self.__request(url, data, method) @@ -34,7 +38,12 @@ class Urllib2Transport(object): else: data = b"" request.add_header('Content-Length', str(size)) - response = self._url_open(request, data) + try: + response = self._url_open(request, data) + except socket.timeout as exc: + raise PulsarClientTransportError(code=PulsarClientTransportError.TIMEOUT) + except URLError as exc: + raise PulsarClientTransportError(transport_message=exc.reason) finally: if input: input.close()