From 22b5143ee9060fb6f783ccbb777e6e84df92d3f6 Mon Sep 17 00:00:00 2001 From: donovan Date: Fri, 9 May 2008 10:27:10 -0700 Subject: [PATCH 1/3] Whooooops. --- eventlet/wsgi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eventlet/wsgi.py b/eventlet/wsgi.py index 983dda6..0e2ba39 100644 --- a/eventlet/wsgi.py +++ b/eventlet/wsgi.py @@ -35,7 +35,7 @@ import BaseHTTPServer from eventlet import api from eventlet.httpdate import format_date_time -from eventlet import pools +from eventlet import coros DEFAULT_MAX_SIMULTANEOUS_REQUESTS = 1024 @@ -313,7 +313,7 @@ def server(sock, site, log=None, environ=None, max_size=None, max_http_version=D serv = Server(sock, sock.getsockname(), site, log, environ=None, max_http_version=max_http_version) if max_size is None: max_size = DEFAULT_MAX_SIMULTANEOUS_REQUESTS - pool = pools.CoroutinePool(max_size=max_size) + pool = coros.CoroutinePool(max_size=max_size) try: print "wsgi starting up on", sock.getsockname() while True: From caf46df3519605942b94d3695b78f251dd3af852 Mon Sep 17 00:00:00 2001 From: donovan Date: Fri, 9 May 2008 12:09:06 -0700 Subject: [PATCH 2/3] Allow for overriding the protocol object --- eventlet/wsgi.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/eventlet/wsgi.py b/eventlet/wsgi.py index 0e2ba39..e3fd027 100644 --- a/eventlet/wsgi.py +++ b/eventlet/wsgi.py @@ -101,6 +101,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): return self.environ = self.get_environ() + self.application = self.server.app try: self.handle_one_response() except socket.error, e: @@ -168,7 +169,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): return write try: - result = self.server.app(self.environ, start_response) + result = self.application(self.environ, start_response) except Exception, e: exc = ''.join(traceback.format_exception(*sys.exc_info())) print exc @@ -275,7 +276,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): class Server(BaseHTTPServer.HTTPServer): - def __init__(self, socket, address, app, log, environ=None, max_http_version=None): + def __init__(self, socket, address, app, log=None, environ=None, max_http_version=None, protocol=HttpProtocol): self.socket = socket self.address = address if log: @@ -284,7 +285,8 @@ class Server(BaseHTTPServer.HTTPServer): self.log = sys.stderr self.app = app self.environ = environ - self.max_http_version = max_http_version + self.max_http_version = max_http_version + self.protocol = protocol def get_environ(self): socket = self.socket @@ -301,7 +303,7 @@ class Server(BaseHTTPServer.HTTPServer): return d def process_request(self, (socket, address)): - proto = HttpProtocol(socket, address, self) + proto = self.protocol(socket, address, self) proto.handle() def log_message(self, message): @@ -309,8 +311,8 @@ class Server(BaseHTTPServer.HTTPServer): -def server(sock, site, log=None, environ=None, max_size=None, max_http_version=DEFAULT_MAX_HTTP_VERSION): - serv = Server(sock, sock.getsockname(), site, log, environ=None, max_http_version=max_http_version) +def server(sock, site, log=None, environ=None, max_size=None, max_http_version=DEFAULT_MAX_HTTP_VERSION, protocol=HttpProtocol): + serv = Server(sock, sock.getsockname(), site, log, environ=None, max_http_version=max_http_version, protocol=protocol) if max_size is None: max_size = DEFAULT_MAX_SIMULTANEOUS_REQUESTS pool = coros.CoroutinePool(max_size=max_size) From 96dfd16585fe31d1ba8b7b6d70cf85b6fc13c55c Mon Sep 17 00:00:00 2001 From: donovan Date: Fri, 9 May 2008 13:23:52 -0700 Subject: [PATCH 3/3] Add optional connection argument --- eventlet/httpc.py | 76 ++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 28 deletions(-) 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]