[svn r37] Bugfix in httpc with setting content-type; move more greenlet accesses into api; add coros.execute which is like api.spawn but returns an event object for the return value of the function
This commit is contained in:
@@ -231,6 +231,7 @@ def sleep(timeout=0):
|
|||||||
|
|
||||||
switch = greenlib.switch
|
switch = greenlib.switch
|
||||||
getcurrent = greenlet.getcurrent
|
getcurrent = greenlet.getcurrent
|
||||||
|
GreenletExit = greenlet.GreenletExit
|
||||||
|
|
||||||
|
|
||||||
class Spew(object):
|
class Spew(object):
|
||||||
|
@@ -24,7 +24,6 @@ THE SOFTWARE.
|
|||||||
|
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
import greenlet
|
|
||||||
|
|
||||||
|
|
||||||
from eventlet import api
|
from eventlet import api
|
||||||
@@ -62,7 +61,7 @@ class event(object):
|
|||||||
occured.
|
occured.
|
||||||
"""
|
"""
|
||||||
if self._result is NOT_USED:
|
if self._result is NOT_USED:
|
||||||
self._waiters[greenlet.getcurrent()] = True
|
self._waiters[api.getcurrent()] = True
|
||||||
return api.get_hub().switch()
|
return api.get_hub().switch()
|
||||||
if self._exc is not None:
|
if self._exc is not None:
|
||||||
raise self._exc
|
raise self._exc
|
||||||
@@ -93,6 +92,15 @@ class event(object):
|
|||||||
for waiter in self._waiters:
|
for waiter in self._waiters:
|
||||||
hub.schedule_call(0, greenlib.switch, waiter, self._result)
|
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):
|
class CoroutinePool(pools.Pool):
|
||||||
""" Like a thread pool, but with coroutines. """
|
""" Like a thread pool, but with coroutines. """
|
||||||
def _main_loop(self, sender):
|
def _main_loop(self, sender):
|
||||||
@@ -104,7 +112,7 @@ class CoroutinePool(pools.Pool):
|
|||||||
result = func(*args, **kw)
|
result = func(*args, **kw)
|
||||||
if evt is not None:
|
if evt is not None:
|
||||||
evt.send(result)
|
evt.send(result)
|
||||||
except greenlet.GreenletExit:
|
except api.GreenletExit:
|
||||||
pass
|
pass
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
@@ -485,10 +485,11 @@ class HttpSuite(object):
|
|||||||
**kwargs):
|
**kwargs):
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
if content_type is None:
|
if 'content-type' not in headers:
|
||||||
headers['content-type'] = self.fallback_content_type
|
if content_type is None:
|
||||||
else:
|
headers['content-type'] = self.fallback_content_type
|
||||||
headers['content-type'] = content_type
|
else:
|
||||||
|
headers['content-type'] = content_type
|
||||||
return self.request_(connect(url), method='PUT', url=url, body=data,
|
return self.request_(connect(url), method='PUT', url=url, body=data,
|
||||||
headers=headers, dumper=self.dumper,
|
headers=headers, dumper=self.dumper,
|
||||||
loader=make_safe_loader(self.loader), ok=ok,
|
loader=make_safe_loader(self.loader), ok=ok,
|
||||||
@@ -508,7 +509,7 @@ class HttpSuite(object):
|
|||||||
**kwargs):
|
**kwargs):
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
if 'content-type' in headers:
|
if 'content-type' not in headers:
|
||||||
if content_type is None:
|
if content_type is None:
|
||||||
headers['content-type'] = self.fallback_content_type
|
headers['content-type'] = self.fallback_content_type
|
||||||
else:
|
else:
|
||||||
|
@@ -405,6 +405,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
self.close_connection = True
|
self.close_connection = True
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
self._code = 200
|
||||||
request = Request(self, self.command, self.path, self.headers)
|
request = Request(self, self.command, self.path, self.headers)
|
||||||
request.set_header('Server', self.version_string())
|
request.set_header('Server', self.version_string())
|
||||||
request.set_header('Date', self.date_time_string())
|
request.set_header('Date', self.date_time_string())
|
||||||
|
@@ -29,4 +29,5 @@ import simplejson
|
|||||||
suite = httpc.HttpSuite(simplejson.dumps, simplejson.loads, 'application/json')
|
suite = httpc.HttpSuite(simplejson.dumps, simplejson.loads, 'application/json')
|
||||||
head, get, put, delete, post = (
|
head, get, put, delete, post = (
|
||||||
suite.head, suite.get, suite.put, suite.delete, suite.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_)
|
||||||
|
Reference in New Issue
Block a user