diff --git a/eventlet/httpc.py b/eventlet/httpc.py index 63c6caf..5d15e5e 100644 --- a/eventlet/httpc.py +++ b/eventlet/httpc.py @@ -44,9 +44,7 @@ try: def from_http_time(t, defaultdate=None): return int(DateTime.Parser.DateTimeFromString( t, defaultdate=defaultdate).gmticks()) - except ImportError: - import calendar parse_formats = (HTTP_TIME_FORMAT, # RFC 1123 '%A, %d-%b-%y %H:%M:%S GMT', # RFC 850 @@ -453,7 +451,7 @@ class HttpSuite(object): self.loader = loader self.fallback_content_type = fallback_content_type - def request_(self, params): + def request_(self, params, connection=None): '''Make an http request to a url, for internal use mostly.''' params = _LocalParams(params, instance=self) @@ -482,7 +480,7 @@ class HttpSuite(object): else: params.body = '' - params.response, params.response_body = self._get_response_body(params) + params.response, params.response_body = self._get_response_body(params, connection) response, body = params.response, params.response_body if self.loader is not None: @@ -501,8 +499,10 @@ class HttpSuite(object): klass = status_to_error_map.get(response.status, ConnectionError) raise klass(params) - def _get_response_body(self, params): - connection = connect(params.url, params.use_proxy) + def _get_response_body(self, params, connection): + print "CONENCTO", connection + if connection is None: + connection = connect(params.url, params.use_proxy) connection.request(params.method, params.path, params.body, params.headers) params.response = connection.getresponse() @@ -512,30 +512,40 @@ class HttpSuite(object): return params.response, params.response_body - def request(self, params): - return self.request_(params)[-1] + def request(self, params, connection=None): + return self.request_(params, connection=connection)[-1] - def head_(self, url, headers=None, use_proxy=False, ok=None, aux=None): - return self.request_(_Params(url, 'HEAD', headers=headers, - loader=self.loader, dumper=self.dumper, - use_proxy=use_proxy, ok=ok, aux=aux)) + def head_( + self, url, headers=None, use_proxy=False, + ok=None, aux=None, connection=None): + return self.request_( + _Params( + url, 'HEAD', headers=headers, + loader=self.loader, dumper=self.dumper, + use_proxy=use_proxy, ok=ok, aux=aux), + connection) def head(self, *args, **kwargs): return self.head_(*args, **kwargs)[-1] - def get_(self, url, headers=None, use_proxy=False, ok=None, aux=None): + def get_( + self, url, headers=None, use_proxy=False, ok=None, + aux=None, connection=None): if headers is None: headers = {} headers['accept'] = self.fallback_content_type+';q=1,*/*;q=0' - return self.request_(_Params(url, 'GET', headers=headers, - loader=self.loader, dumper=self.dumper, - use_proxy=use_proxy, ok=ok, aux=aux)) + return self.request_( + _Params( + url, 'GET', headers=headers, + loader=self.loader, dumper=self.dumper, + use_proxy=use_proxy, ok=ok, aux=aux), + connection) def get(self, *args, **kwargs): return self.get_(*args, **kwargs)[-1] def put_(self, url, data, headers=None, content_type=None, ok=None, - aux=None): + aux=None, connection=None): if headers is None: headers = {} if 'content-type' not in headers: @@ -544,22 +554,29 @@ class HttpSuite(object): else: headers['content-type'] = content_type headers['accept'] = headers['content-type']+';q=1,*/*;q=0' - return self.request_(_Params(url, 'PUT', body=data, headers=headers, - loader=self.loader, dumper=self.dumper, - ok=ok, aux=aux)) + return self.request_( + _Params( + url, 'PUT', body=data, headers=headers, + loader=self.loader, dumper=self.dumper, + ok=ok, aux=aux), + connection) def put(self, *args, **kwargs): return self.put_(*args, **kwargs)[-1] - def delete_(self, url, ok=None, aux=None): - return self.request_(_Params(url, 'DELETE', loader=self.loader, - dumper=self.dumper, ok=ok, aux=aux)) + def delete_(self, url, ok=None, aux=None, connection=None): + return self.request_( + _Params( + url, 'DELETE', loader=self.loader, + dumper=self.dumper, ok=ok, aux=aux), + connection) def delete(self, *args, **kwargs): return self.delete_(*args, **kwargs)[-1] - def post_(self, url, data='', headers=None, content_type=None, ok=None, - aux=None): + def post_( + self, url, data='', headers=None, content_type=None,ok=None, + aux=None, connection=None): if headers is None: headers = {} if 'content-type' not in headers: @@ -568,9 +585,12 @@ class HttpSuite(object): else: headers['content-type'] = content_type headers['accept'] = headers['content-type']+';q=1,*/*;q=0' - return self.request_(_Params(url, 'POST', body=data, - headers=headers, loader=self.loader, - dumper=self.dumper, ok=ok, aux=aux)) + return self.request_( + _Params( + url, 'POST', body=data, + headers=headers, loader=self.loader, + dumper=self.dumper, ok=ok, aux=aux), + connection) def post(self, *args, **kwargs): return self.post_(*args, **kwargs)[-1]