diff --git a/eventlet/api.py b/eventlet/api.py index 18bb4fb..e9877fa 100644 --- a/eventlet/api.py +++ b/eventlet/api.py @@ -231,6 +231,7 @@ def sleep(timeout=0): switch = greenlib.switch getcurrent = greenlet.getcurrent +GreenletExit = greenlet.GreenletExit class Spew(object): diff --git a/eventlet/coros.py b/eventlet/coros.py index d430969..9f02312 100644 --- a/eventlet/coros.py +++ b/eventlet/coros.py @@ -24,7 +24,6 @@ THE SOFTWARE. import time import traceback -import greenlet from eventlet import api @@ -62,7 +61,7 @@ class event(object): occured. """ if self._result is NOT_USED: - self._waiters[greenlet.getcurrent()] = True + self._waiters[api.getcurrent()] = True return api.get_hub().switch() if self._exc is not None: raise self._exc @@ -93,6 +92,15 @@ class event(object): for waiter in self._waiters: hub.schedule_call(0, greenlib.switch, waiter, self._result) + +def execute(func, *args, **kw): + evt = event() + def _really_execute(): + evt.send(func(*args, **kw)) + api.spawn(_really_execute) + return evt + + class CoroutinePool(pools.Pool): """ Like a thread pool, but with coroutines. """ def _main_loop(self, sender): @@ -104,7 +112,7 @@ class CoroutinePool(pools.Pool): result = func(*args, **kw) if evt is not None: evt.send(result) - except greenlet.GreenletExit: + except api.GreenletExit: pass except Exception, e: traceback.print_exc() diff --git a/eventlet/httpc.py b/eventlet/httpc.py index 981d2e2..3d68242 100644 --- a/eventlet/httpc.py +++ b/eventlet/httpc.py @@ -485,10 +485,11 @@ class HttpSuite(object): **kwargs): if headers is None: headers = {} - if content_type is None: - headers['content-type'] = self.fallback_content_type - else: - headers['content-type'] = content_type + if 'content-type' not in headers: + if content_type is None: + headers['content-type'] = self.fallback_content_type + else: + headers['content-type'] = content_type return self.request_(connect(url), method='PUT', url=url, body=data, headers=headers, dumper=self.dumper, loader=make_safe_loader(self.loader), ok=ok, @@ -508,7 +509,7 @@ class HttpSuite(object): **kwargs): if headers is None: headers = {} - if 'content-type' in headers: + if 'content-type' not in headers: if content_type is None: headers['content-type'] = self.fallback_content_type else: diff --git a/eventlet/httpd.py b/eventlet/httpd.py index fe0d3ba..e47d2ab 100644 --- a/eventlet/httpd.py +++ b/eventlet/httpd.py @@ -405,6 +405,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): self.close_connection = True continue + self._code = 200 request = Request(self, self.command, self.path, self.headers) request.set_header('Server', self.version_string()) request.set_header('Date', self.date_time_string()) diff --git a/eventlet/jsonhttp.py b/eventlet/jsonhttp.py index 3a22d0e..4228a39 100644 --- a/eventlet/jsonhttp.py +++ b/eventlet/jsonhttp.py @@ -29,4 +29,5 @@ import simplejson suite = httpc.HttpSuite(simplejson.dumps, simplejson.loads, 'application/json') head, get, put, delete, post = ( suite.head, suite.get, suite.put, suite.delete, suite.post) - +head_, get_, put_, delete_, post_ = ( + suite.head_, suite.get_, suite.put_, suite.delete_, suite.post_)