Merged in changes to api.py, nginx support
This commit is contained in:
@@ -68,8 +68,8 @@ def tcp_listener(address):
|
||||
which accepts connections forever and spawns greenlets for
|
||||
each incoming connection.
|
||||
"""
|
||||
from eventlet import wrappedfd, util
|
||||
socket = wrappedfd.GreenSocket(util.tcp_socket())
|
||||
from eventlet import greenio, util
|
||||
socket = greenio.GreenSocket(util.tcp_socket())
|
||||
util.socket_bind_and_listen(socket, address)
|
||||
return socket
|
||||
|
||||
@@ -94,8 +94,8 @@ def connect_tcp(address):
|
||||
"""
|
||||
Create a TCP connection to address (host, port) and return the socket.
|
||||
"""
|
||||
from eventlet import wrappedfd, util
|
||||
desc = wrappedfd.GreenSocket(util.tcp_socket())
|
||||
from eventlet import greenio, util
|
||||
desc = greenio.GreenSocket(util.tcp_socket())
|
||||
desc.connect(address)
|
||||
return desc
|
||||
|
||||
@@ -186,14 +186,7 @@ def exc_after(seconds, exc):
|
||||
return call_after(seconds, switch, getcurrent(), None, exc)
|
||||
|
||||
|
||||
def get_default_hub():
|
||||
## TODO some sort of plugin system?
|
||||
try:
|
||||
import eventlet.hubs.nginx
|
||||
return eventlet.hubs.nginx
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
def get_default_hub():
|
||||
try:
|
||||
import eventlet.hubs.libevent
|
||||
return eventlet.hubs.libevent
|
||||
|
@@ -23,7 +23,7 @@ THE SOFTWARE.
|
||||
"""
|
||||
|
||||
from eventlet import tests
|
||||
from eventlet import api, wrappedfd, util
|
||||
from eventlet import api, greenio, util
|
||||
import socket
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ class TestApi(tests.TestCase):
|
||||
bound_port = server.getsockname()[1]
|
||||
|
||||
try:
|
||||
desc = wrappedfd.GreenSocket(util.tcp_socket())
|
||||
desc = greenio.GreenSocket(util.tcp_socket())
|
||||
api.trampoline(desc, read=True, write=True, timeout=0.1)
|
||||
except api.TimeoutError:
|
||||
pass # test passed
|
||||
@@ -120,7 +120,7 @@ class TestApi(tests.TestCase):
|
||||
def go():
|
||||
client = util.tcp_socket()
|
||||
|
||||
desc = wrappedfd.GreenSocket(client)
|
||||
desc = greenio.GreenSocket(client)
|
||||
desc.connect(('127.0.0.1', bound_port))
|
||||
try:
|
||||
api.trampoline(desc, read=True, write=True, timeout=0.1)
|
||||
|
@@ -1,6 +1,5 @@
|
||||
"""\
|
||||
@file wrappedfd.py
|
||||
@author Bob Ippolito
|
||||
@file greenio.py
|
||||
|
||||
Copyright (c) 2005-2006, Bob Ippolito
|
||||
Copyright (c) 2007, Linden Research, Inc.
|
@@ -1,5 +1,5 @@
|
||||
"""\
|
||||
@file wrappedfd_test.py
|
||||
@file greenio_test.py
|
||||
|
||||
Copyright (c) 2006-2007, Linden Research, Inc.
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
@@ -22,12 +22,12 @@ THE SOFTWARE.
|
||||
"""
|
||||
|
||||
from eventlet import tests
|
||||
from eventlet import api, wrappedfd, util
|
||||
from eventlet import api, greenio, util
|
||||
import socket
|
||||
|
||||
# TODO try and reuse unit tests from within Python itself
|
||||
|
||||
class TestWrappedFd(tests.TestCase):
|
||||
class TestGreenIo(tests.TestCase):
|
||||
def test_close_with_makefile(self):
|
||||
def accept_close_early(listener):
|
||||
# verify that the makefile and the socket are truly independent
|
||||
@@ -100,6 +100,6 @@ class TestWrappedFd(tests.TestCase):
|
||||
assert fd.read() == ''
|
||||
|
||||
timer.cancel()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
tests.main()
|
@@ -125,7 +125,7 @@ class TestHttpd(tests.TestCase):
|
||||
fd.close()
|
||||
|
||||
def test_003_passing_non_int_to_read(self):
|
||||
# This should go in test_wrappedfd
|
||||
# This should go in greenio_test
|
||||
sock = api.connect_tcp(
|
||||
('127.0.0.1', 12346))
|
||||
|
||||
|
@@ -203,12 +203,16 @@ class BaseHub(object):
|
||||
def add_timer(self, timer):
|
||||
scheduled_time = self.clock() + timer.seconds
|
||||
self._add_absolute_timer(scheduled_time, timer)
|
||||
timer.greenlet = current_greenlet
|
||||
self.track_timer(timer)
|
||||
return scheduled_time
|
||||
|
||||
def track_timer(self, timer):
|
||||
current_greenlet = greenlet.getcurrent()
|
||||
if current_greenlet not in self.timers_by_greenlet:
|
||||
self.timers_by_greenlet[current_greenlet] = {}
|
||||
self.timers_by_greenlet[current_greenlet][timer] = True
|
||||
timer.greenlet = current_greenlet
|
||||
return scheduled_time
|
||||
|
||||
|
||||
def prepare_timers(self):
|
||||
ins = bisect.insort_right
|
||||
@@ -258,5 +262,5 @@ class BaseHub(object):
|
||||
## actually eventlet's silly way of specifying whether
|
||||
## a coroutine is "ready to run" or not.
|
||||
timer.cancel()
|
||||
print 'Runloop cancelling left-over timer %s' % timer
|
||||
print 'Hub cancelling left-over timer %s' % timer
|
||||
del self.timers_by_greenlet[greenlet]
|
||||
|
@@ -38,14 +38,14 @@ import greenlet
|
||||
#raise ImportError()
|
||||
|
||||
try:
|
||||
# use rel if it's available
|
||||
import event
|
||||
except ImportError:
|
||||
# use rel if pyevent isn't available
|
||||
# (rel prints out some annoying notice upon initialization)
|
||||
import rel
|
||||
rel.initialize()
|
||||
rel.override()
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
import event
|
||||
import event
|
||||
|
||||
|
||||
class Hub(hub.BaseHub):
|
||||
@@ -101,4 +101,5 @@ class Hub(hub.BaseHub):
|
||||
|
||||
def add_timer(self, timer):
|
||||
event.timeout(timer.seconds, timer).add()
|
||||
self.track_timer(timer)
|
||||
|
||||
|
@@ -28,7 +28,7 @@ import signal
|
||||
|
||||
|
||||
from eventlet import util, pools
|
||||
from eventlet import wrappedfd
|
||||
from eventlet import greenio
|
||||
|
||||
class DeadProcess(RuntimeError):
|
||||
pass
|
||||
@@ -55,9 +55,9 @@ class Process(object):
|
||||
child_stdin = self.popen4.tochild
|
||||
util.set_nonblocking(child_stdout_stderr)
|
||||
util.set_nonblocking(child_stdin)
|
||||
self.child_stdout_stderr = wrappedfd.GreenPipe(child_stdout_stderr)
|
||||
self.child_stdout_stderr = greenio.GreenPipe(child_stdout_stderr)
|
||||
self.child_stdout_stderr.newlines = '\n' # the default is \r\n, which aren't sent over pipes
|
||||
self.child_stdin = wrappedfd.GreenPipe(child_stdin)
|
||||
self.child_stdin = greenio.GreenPipe(child_stdin)
|
||||
self.child_stdin.newlines = '\n'
|
||||
|
||||
self.sendall = self.child_stdin.write
|
||||
|
@@ -4,6 +4,8 @@ import sys
|
||||
from eventlet import api
|
||||
from eventlet import httpc
|
||||
|
||||
from eventlet.hubs import nginx
|
||||
|
||||
|
||||
def real_application(env, start_response):
|
||||
#result = httpc.get('http://127.0.0.1:8081/')
|
||||
@@ -23,6 +25,9 @@ def wrap_application(master, env, start_response):
|
||||
def application(env, start_response):
|
||||
hub = api.get_hub()
|
||||
|
||||
if not isinstance(hub, nginx.Hub):
|
||||
api.use_hub(nginx)
|
||||
|
||||
hub.poll_register = env['ngx.poll_register']
|
||||
hub.poll_unregister = env['ngx.poll_unregister']
|
||||
hub.sleep = env['ngx.sleep']
|
||||
|
@@ -23,12 +23,12 @@ import Queue
|
||||
from sys import stdout
|
||||
from Queue import Empty, Queue
|
||||
|
||||
from eventlet import api, coros, httpc, httpd, util, wrappedfd
|
||||
from eventlet import api, coros, httpc, httpd, util, greenio
|
||||
from eventlet.api import trampoline, get_hub
|
||||
|
||||
_rpipe, _wpipe = os.pipe()
|
||||
_rfile = os.fdopen(_rpipe,"r",0)
|
||||
_wrap_rfile = wrappedfd.GreenPipe(_rfile)
|
||||
_wrap_rfile = greenio.GreenPipe(_rfile)
|
||||
util.set_nonblocking(_rfile)
|
||||
|
||||
def _signal_t2e():
|
||||
|
@@ -76,7 +76,7 @@ __original_ssl__ = socket.ssl
|
||||
|
||||
def wrap_ssl(sock, certificate=None, private_key=None):
|
||||
from OpenSSL import SSL
|
||||
from eventlet import wrappedfd, util
|
||||
from eventlet import greenio, util
|
||||
context = SSL.Context(SSL.SSLv23_METHOD)
|
||||
print certificate, private_key
|
||||
if certificate is not None:
|
||||
@@ -88,15 +88,15 @@ def wrap_ssl(sock, certificate=None, private_key=None):
|
||||
## TODO only do this on client sockets? how?
|
||||
connection = SSL.Connection(context, sock)
|
||||
connection.set_connect_state()
|
||||
return wrappedfd.GreenSocket(connection)
|
||||
return greenio.GreenSocket(connection)
|
||||
|
||||
|
||||
def wrap_socket_with_coroutine_socket():
|
||||
def new_socket(*args, **kw):
|
||||
from eventlet import wrappedfd
|
||||
from eventlet import greenio
|
||||
s = __original_socket__(*args, **kw)
|
||||
set_nonblocking(s)
|
||||
return wrappedfd.GreenSocket(s)
|
||||
return greenio.GreenSocket(s)
|
||||
socket.socket = new_socket
|
||||
|
||||
socket.ssl = wrap_ssl
|
||||
|
Reference in New Issue
Block a user