130 lines
4.9 KiB
Python
130 lines
4.9 KiB
Python
import os
|
|
import socket
|
|
import errno
|
|
import warnings
|
|
|
|
from eventlet import greenio
|
|
|
|
def g_log(*args):
|
|
warnings.warn("eventlet.util.g_log is deprecated because we're pretty sure no one uses it. Send mail to eventletdev@lists.secondlife.com if you are actually using it.",
|
|
DeprecationWarning, stacklevel=2)
|
|
import sys
|
|
from eventlet.support import greenlets as greenlet
|
|
g_id = id(greenlet.getcurrent())
|
|
if g_id is None:
|
|
if greenlet.getcurrent().parent is None:
|
|
ident = 'greenlet-main'
|
|
else:
|
|
g_id = id(greenlet.getcurrent())
|
|
if g_id < 0:
|
|
g_id += 1 + ((sys.maxint + 1) << 1)
|
|
ident = '%08X' % (g_id,)
|
|
else:
|
|
ident = 'greenlet-%d' % (g_id,)
|
|
print >>sys.stderr, '[%s] %s' % (ident, ' '.join(map(str, args)))
|
|
|
|
|
|
__original_socket__ = socket.socket
|
|
def tcp_socket():
|
|
warnings.warn("eventlet.util.tcp_socket is deprecated."
|
|
"Please use the standard socket technique for this instead:"
|
|
"sock = socket.socket()",
|
|
DeprecationWarning, stacklevel=2)
|
|
s = __original_socket__(socket.AF_INET, socket.SOCK_STREAM)
|
|
return s
|
|
|
|
try:
|
|
# if ssl is available, use eventlet.green.ssl for our ssl implementation
|
|
from eventlet.green import ssl
|
|
def wrap_ssl(sock, certificate=None, private_key=None, server_side=False):
|
|
return ssl.wrap_socket(sock,
|
|
keyfile=private_key, certfile=certificate,
|
|
server_side=server_side, cert_reqs=ssl.CERT_NONE,
|
|
ssl_version=ssl.PROTOCOL_SSLv23, ca_certs=None,
|
|
do_handshake_on_connect=True,
|
|
suppress_ragged_eofs=True)
|
|
except ImportError:
|
|
# if ssl is not available, use PyOpenSSL
|
|
def wrap_ssl(sock, certificate=None, private_key=None, server_side=False):
|
|
try:
|
|
from eventlet.green.OpenSSL import SSL
|
|
except ImportError:
|
|
raise ImportError("To use SSL with Eventlet, you must install PyOpenSSL or use Python 2.6 or later.")
|
|
context = SSL.Context(SSL.SSLv23_METHOD)
|
|
if certificate is not None:
|
|
context.use_certificate_file(certificate)
|
|
if private_key is not None:
|
|
context.use_privatekey_file(private_key)
|
|
context.set_verify(SSL.VERIFY_NONE, lambda *x: True)
|
|
|
|
connection = SSL.Connection(context, sock)
|
|
if server_side:
|
|
connection.set_accept_state()
|
|
else:
|
|
connection.set_connect_state()
|
|
return connection
|
|
|
|
def wrap_socket_with_coroutine_socket(use_thread_pool=None):
|
|
warnings.warn("eventlet.util.wrap_socket_with_coroutine_socket() is now "
|
|
"eventlet.patcher.monkey_patch(all=False, socket=True)",
|
|
DeprecationWarning, stacklevel=2)
|
|
from eventlet import patcher
|
|
patcher.monkey_patch(all=False, socket=True)
|
|
|
|
|
|
def wrap_pipes_with_coroutine_pipes():
|
|
warnings.warn("eventlet.util.wrap_pipes_with_coroutine_pipes() is now "
|
|
"eventlet.patcher.monkey_patch(all=False, os=True)",
|
|
DeprecationWarning, stacklevel=2)
|
|
from eventlet import patcher
|
|
patcher.monkey_patch(all=False, os=True)
|
|
|
|
def wrap_select_with_coroutine_select():
|
|
warnings.warn("eventlet.util.wrap_select_with_coroutine_select() is now "
|
|
"eventlet.patcher.monkey_patch(all=False, select=True)",
|
|
DeprecationWarning, stacklevel=2)
|
|
from eventlet import patcher
|
|
patcher.monkey_patch(all=False, select=True)
|
|
|
|
def wrap_threading_local_with_coro_local():
|
|
"""
|
|
monkey patch ``threading.local`` with something that is greenlet aware.
|
|
Since greenlets cannot cross threads, so this should be semantically
|
|
identical to ``threadlocal.local``
|
|
"""
|
|
warnings.warn("eventlet.util.wrap_threading_local_with_coro_local() is now "
|
|
"eventlet.patcher.monkey_patch(all=False, thread=True) -- though"
|
|
"note that more than just _local is patched now.",
|
|
DeprecationWarning, stacklevel=2)
|
|
|
|
from eventlet import patcher
|
|
patcher.monkey_patch(all=False, thread=True)
|
|
|
|
|
|
def socket_bind_and_listen(descriptor, addr=('', 0), backlog=50):
|
|
warnings.warn("eventlet.util.socket_bind_and_listen is deprecated."
|
|
"Please use the standard socket methodology for this instead:"
|
|
"sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)"
|
|
"sock.bind(addr)"
|
|
"sock.listen(backlog)",
|
|
DeprecationWarning, stacklevel=2)
|
|
set_reuse_addr(descriptor)
|
|
descriptor.bind(addr)
|
|
descriptor.listen(backlog)
|
|
return descriptor
|
|
|
|
|
|
def set_reuse_addr(descriptor):
|
|
warnings.warn("eventlet.util.set_reuse_addr is deprecated."
|
|
"Please use the standard socket methodology for this instead:"
|
|
"sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)",
|
|
DeprecationWarning, stacklevel=2)
|
|
try:
|
|
descriptor.setsockopt(
|
|
socket.SOL_SOCKET,
|
|
socket.SO_REUSEADDR,
|
|
descriptor.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) | 1)
|
|
except socket.error:
|
|
pass
|
|
|