merge
This commit is contained in:
@@ -44,9 +44,7 @@ try:
|
|||||||
def from_http_time(t, defaultdate=None):
|
def from_http_time(t, defaultdate=None):
|
||||||
return int(DateTime.Parser.DateTimeFromString(
|
return int(DateTime.Parser.DateTimeFromString(
|
||||||
t, defaultdate=defaultdate).gmticks())
|
t, defaultdate=defaultdate).gmticks())
|
||||||
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|
||||||
import calendar
|
import calendar
|
||||||
parse_formats = (HTTP_TIME_FORMAT, # RFC 1123
|
parse_formats = (HTTP_TIME_FORMAT, # RFC 1123
|
||||||
'%A, %d-%b-%y %H:%M:%S GMT', # RFC 850
|
'%A, %d-%b-%y %H:%M:%S GMT', # RFC 850
|
||||||
@@ -453,7 +451,7 @@ class HttpSuite(object):
|
|||||||
self.loader = loader
|
self.loader = loader
|
||||||
self.fallback_content_type = fallback_content_type
|
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.'''
|
'''Make an http request to a url, for internal use mostly.'''
|
||||||
|
|
||||||
params = _LocalParams(params, instance=self)
|
params = _LocalParams(params, instance=self)
|
||||||
@@ -482,7 +480,7 @@ class HttpSuite(object):
|
|||||||
else:
|
else:
|
||||||
params.body = ''
|
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
|
response, body = params.response, params.response_body
|
||||||
|
|
||||||
if self.loader is not None:
|
if self.loader is not None:
|
||||||
@@ -501,8 +499,10 @@ class HttpSuite(object):
|
|||||||
klass = status_to_error_map.get(response.status, ConnectionError)
|
klass = status_to_error_map.get(response.status, ConnectionError)
|
||||||
raise klass(params)
|
raise klass(params)
|
||||||
|
|
||||||
def _get_response_body(self, params):
|
def _get_response_body(self, params, connection):
|
||||||
connection = connect(params.url, params.use_proxy)
|
print "CONENCTO", connection
|
||||||
|
if connection is None:
|
||||||
|
connection = connect(params.url, params.use_proxy)
|
||||||
connection.request(params.method, params.path, params.body,
|
connection.request(params.method, params.path, params.body,
|
||||||
params.headers)
|
params.headers)
|
||||||
params.response = connection.getresponse()
|
params.response = connection.getresponse()
|
||||||
@@ -512,30 +512,40 @@ class HttpSuite(object):
|
|||||||
|
|
||||||
return params.response, params.response_body
|
return params.response, params.response_body
|
||||||
|
|
||||||
def request(self, params):
|
def request(self, params, connection=None):
|
||||||
return self.request_(params)[-1]
|
return self.request_(params, connection=connection)[-1]
|
||||||
|
|
||||||
def head_(self, url, headers=None, use_proxy=False, ok=None, aux=None):
|
def head_(
|
||||||
return self.request_(_Params(url, 'HEAD', headers=headers,
|
self, url, headers=None, use_proxy=False,
|
||||||
loader=self.loader, dumper=self.dumper,
|
ok=None, aux=None, connection=None):
|
||||||
use_proxy=use_proxy, ok=ok, aux=aux))
|
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):
|
def head(self, *args, **kwargs):
|
||||||
return self.head_(*args, **kwargs)[-1]
|
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:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
headers['accept'] = self.fallback_content_type+';q=1,*/*;q=0'
|
headers['accept'] = self.fallback_content_type+';q=1,*/*;q=0'
|
||||||
return self.request_(_Params(url, 'GET', headers=headers,
|
return self.request_(
|
||||||
loader=self.loader, dumper=self.dumper,
|
_Params(
|
||||||
use_proxy=use_proxy, ok=ok, aux=aux))
|
url, 'GET', headers=headers,
|
||||||
|
loader=self.loader, dumper=self.dumper,
|
||||||
|
use_proxy=use_proxy, ok=ok, aux=aux),
|
||||||
|
connection)
|
||||||
|
|
||||||
def get(self, *args, **kwargs):
|
def get(self, *args, **kwargs):
|
||||||
return self.get_(*args, **kwargs)[-1]
|
return self.get_(*args, **kwargs)[-1]
|
||||||
|
|
||||||
def put_(self, url, data, headers=None, content_type=None, ok=None,
|
def put_(self, url, data, headers=None, content_type=None, ok=None,
|
||||||
aux=None):
|
aux=None, connection=None):
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
if 'content-type' not in headers:
|
if 'content-type' not in headers:
|
||||||
@@ -544,22 +554,29 @@ class HttpSuite(object):
|
|||||||
else:
|
else:
|
||||||
headers['content-type'] = content_type
|
headers['content-type'] = content_type
|
||||||
headers['accept'] = headers['content-type']+';q=1,*/*;q=0'
|
headers['accept'] = headers['content-type']+';q=1,*/*;q=0'
|
||||||
return self.request_(_Params(url, 'PUT', body=data, headers=headers,
|
return self.request_(
|
||||||
loader=self.loader, dumper=self.dumper,
|
_Params(
|
||||||
ok=ok, aux=aux))
|
url, 'PUT', body=data, headers=headers,
|
||||||
|
loader=self.loader, dumper=self.dumper,
|
||||||
|
ok=ok, aux=aux),
|
||||||
|
connection)
|
||||||
|
|
||||||
def put(self, *args, **kwargs):
|
def put(self, *args, **kwargs):
|
||||||
return self.put_(*args, **kwargs)[-1]
|
return self.put_(*args, **kwargs)[-1]
|
||||||
|
|
||||||
def delete_(self, url, ok=None, aux=None):
|
def delete_(self, url, ok=None, aux=None, connection=None):
|
||||||
return self.request_(_Params(url, 'DELETE', loader=self.loader,
|
return self.request_(
|
||||||
dumper=self.dumper, ok=ok, aux=aux))
|
_Params(
|
||||||
|
url, 'DELETE', loader=self.loader,
|
||||||
|
dumper=self.dumper, ok=ok, aux=aux),
|
||||||
|
connection)
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
return self.delete_(*args, **kwargs)[-1]
|
return self.delete_(*args, **kwargs)[-1]
|
||||||
|
|
||||||
def post_(self, url, data='', headers=None, content_type=None, ok=None,
|
def post_(
|
||||||
aux=None):
|
self, url, data='', headers=None, content_type=None,ok=None,
|
||||||
|
aux=None, connection=None):
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
if 'content-type' not in headers:
|
if 'content-type' not in headers:
|
||||||
@@ -568,9 +585,12 @@ class HttpSuite(object):
|
|||||||
else:
|
else:
|
||||||
headers['content-type'] = content_type
|
headers['content-type'] = content_type
|
||||||
headers['accept'] = headers['content-type']+';q=1,*/*;q=0'
|
headers['accept'] = headers['content-type']+';q=1,*/*;q=0'
|
||||||
return self.request_(_Params(url, 'POST', body=data,
|
return self.request_(
|
||||||
headers=headers, loader=self.loader,
|
_Params(
|
||||||
dumper=self.dumper, ok=ok, aux=aux))
|
url, 'POST', body=data,
|
||||||
|
headers=headers, loader=self.loader,
|
||||||
|
dumper=self.dumper, ok=ok, aux=aux),
|
||||||
|
connection)
|
||||||
|
|
||||||
def post(self, *args, **kwargs):
|
def post(self, *args, **kwargs):
|
||||||
return self.post_(*args, **kwargs)[-1]
|
return self.post_(*args, **kwargs)[-1]
|
||||||
|
@@ -35,7 +35,7 @@ import BaseHTTPServer
|
|||||||
|
|
||||||
from eventlet import api
|
from eventlet import api
|
||||||
from eventlet.httpdate import format_date_time
|
from eventlet.httpdate import format_date_time
|
||||||
from eventlet import pools
|
from eventlet import coros
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_MAX_SIMULTANEOUS_REQUESTS = 1024
|
DEFAULT_MAX_SIMULTANEOUS_REQUESTS = 1024
|
||||||
@@ -101,6 +101,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self.environ = self.get_environ()
|
self.environ = self.get_environ()
|
||||||
|
self.application = self.server.app
|
||||||
try:
|
try:
|
||||||
self.handle_one_response()
|
self.handle_one_response()
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
@@ -168,7 +169,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
return write
|
return write
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = self.server.app(self.environ, start_response)
|
result = self.application(self.environ, start_response)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
exc = ''.join(traceback.format_exception(*sys.exc_info()))
|
exc = ''.join(traceback.format_exception(*sys.exc_info()))
|
||||||
print exc
|
print exc
|
||||||
@@ -275,7 +276,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
|
|
||||||
|
|
||||||
class Server(BaseHTTPServer.HTTPServer):
|
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.socket = socket
|
||||||
self.address = address
|
self.address = address
|
||||||
if log:
|
if log:
|
||||||
@@ -284,7 +285,8 @@ class Server(BaseHTTPServer.HTTPServer):
|
|||||||
self.log = sys.stderr
|
self.log = sys.stderr
|
||||||
self.app = app
|
self.app = app
|
||||||
self.environ = environ
|
self.environ = environ
|
||||||
self.max_http_version = max_http_version
|
self.max_http_version = max_http_version
|
||||||
|
self.protocol = protocol
|
||||||
|
|
||||||
def get_environ(self):
|
def get_environ(self):
|
||||||
socket = self.socket
|
socket = self.socket
|
||||||
@@ -301,7 +303,7 @@ class Server(BaseHTTPServer.HTTPServer):
|
|||||||
return d
|
return d
|
||||||
|
|
||||||
def process_request(self, (socket, address)):
|
def process_request(self, (socket, address)):
|
||||||
proto = HttpProtocol(socket, address, self)
|
proto = self.protocol(socket, address, self)
|
||||||
proto.handle()
|
proto.handle()
|
||||||
|
|
||||||
def log_message(self, message):
|
def log_message(self, message):
|
||||||
@@ -309,11 +311,11 @@ class Server(BaseHTTPServer.HTTPServer):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def server(sock, site, log=None, environ=None, max_size=None, max_http_version=DEFAULT_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)
|
serv = Server(sock, sock.getsockname(), site, log, environ=None, max_http_version=max_http_version, protocol=protocol)
|
||||||
if max_size is None:
|
if max_size is None:
|
||||||
max_size = DEFAULT_MAX_SIMULTANEOUS_REQUESTS
|
max_size = DEFAULT_MAX_SIMULTANEOUS_REQUESTS
|
||||||
pool = pools.CoroutinePool(max_size=max_size)
|
pool = coros.CoroutinePool(max_size=max_size)
|
||||||
try:
|
try:
|
||||||
print "wsgi starting up on", sock.getsockname()
|
print "wsgi starting up on", sock.getsockname()
|
||||||
while True:
|
while True:
|
||||||
|
Reference in New Issue
Block a user