From 23d8a30c03b3467e163dbc7d7a48ef4a09450149 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 19 May 2009 16:19:05 +0700 Subject: [PATCH] fix green package not to use absolute_import and otherwise be nice on 2.4 --- eventlet/green/BaseHTTPServer.py | 10 ++++++---- eventlet/green/SocketServer.py | 16 +++++++++------- eventlet/green/select.py | 6 ++++-- eventlet/green/socket.py | 7 +++---- eventlet/green/thread.py | 22 +++++++++++----------- eventlet/green/threading.py | 8 ++++++-- eventlet/green/time.py | 9 +++------ eventlet/green/urllib.py | 19 +++++++++++-------- eventlet/green/urllib2.py | 15 ++++++++------- 9 files changed, 61 insertions(+), 51 deletions(-) diff --git a/eventlet/green/BaseHTTPServer.py b/eventlet/green/BaseHTTPServer.py index 45e5115..d11548a 100644 --- a/eventlet/green/BaseHTTPServer.py +++ b/eventlet/green/BaseHTTPServer.py @@ -1,10 +1,12 @@ -from __future__ import absolute_import import sys from eventlet.green import socket from eventlet.green import SocketServer -from BaseHTTPServer import (DEFAULT_ERROR_MESSAGE, _quote_html, __version__, __all__, - BaseHTTPRequestHandler as __BaseHTTPRequestHandler) +__import_lst = ['DEFAULT_ERROR_MESSAGE', '_quote_html', '__version__', '__all__', 'BaseHTTPRequestHandler'] +__BaseHTTPServer = __import__('BaseHTTPServer') +for var in __import_lst: + exec "%s = __BaseHTTPServer.%s" % (var, var) + class HTTPServer(SocketServer.TCPServer): @@ -18,7 +20,7 @@ class HTTPServer(SocketServer.TCPServer): self.server_port = port -class BaseHTTPRequestHandler(__BaseHTTPRequestHandler): +class BaseHTTPRequestHandler(BaseHTTPRequestHandler): def address_string(self): host, port = self.client_address[:2] diff --git a/eventlet/green/SocketServer.py b/eventlet/green/SocketServer.py index def033d..21b1ac2 100644 --- a/eventlet/green/SocketServer.py +++ b/eventlet/green/SocketServer.py @@ -1,13 +1,15 @@ -from __future__ import absolute_import -from SocketServer import (__all__, __version__, BaseServer, TCPServer as __TCPServer, - UDPServer as __UDPServer, ForkingMixIn, ThreadingMixIn as __ThreadingMixIn, - BaseRequestHandler, StreamRequestHandler, DatagramRequestHandler) +__import_lst = ['__all__', '__version__', 'BaseServer', 'TCPServer', 'UDPServer', 'ForkingMixIn', + 'ThreadingMixIn', 'BaseRequestHandler', 'StreamRequestHandler', 'DatagramRequestHandler'] +__SocketServer = __import__('SocketServer') +for var in __import_lst: + exec "%s = __SocketServer.%s" % (var, var) + # QQQ ForkingMixIn should be fixed to use green waitpid? from eventlet.green import socket -class TCPServer(__TCPServer): +class TCPServer(TCPServer): def __init__(self, server_address, RequestHandlerClass): """Constructor. May be extended, do not override.""" @@ -17,7 +19,7 @@ class TCPServer(__TCPServer): self.server_bind() self.server_activate() -class UDPServer(__UDPServer): +class UDPServer(UDPServer): def __init__(self, server_address, RequestHandlerClass): """Constructor. May be extended, do not override.""" @@ -27,7 +29,7 @@ class UDPServer(__UDPServer): self.server_bind() self.server_activate() -class ThreadingMixIn(__ThreadingMixIn): +class ThreadingMixIn(ThreadingMixIn): def process_request(self, request, client_address): """Start a new thread to process the request.""" diff --git a/eventlet/green/select.py b/eventlet/green/select.py index f54387e..8b5bba9 100644 --- a/eventlet/green/select.py +++ b/eventlet/green/select.py @@ -1,3 +1,5 @@ -from __future__ import absolute_import -from select import * +__select = __import__('select') +for var in dir(__select): + exec "%s = __select.%s" % (var, var) from eventlet.api import select +del poll diff --git a/eventlet/green/socket.py b/eventlet/green/socket.py index f6551a3..5fddd06 100644 --- a/eventlet/green/socket.py +++ b/eventlet/green/socket.py @@ -1,7 +1,6 @@ -from __future__ import absolute_import -import socket -import socket as __socket -from socket import * +__socket = __import__('socket') +for var in __socket.__all__: + exec "%s = __socket.%s" % (var, var) _fileobject = __socket._fileobject from eventlet.api import get_hub diff --git a/eventlet/green/thread.py b/eventlet/green/thread.py index 1c27152..17bb83d 100644 --- a/eventlet/green/thread.py +++ b/eventlet/green/thread.py @@ -1,11 +1,10 @@ """implements standard module 'thread' with greenlets""" -from __future__ import absolute_import -import thread as thread_module +__thread = __import__('thread') from eventlet.support import greenlets as greenlet from eventlet.api import spawn from eventlet.coros import Semaphore as LockType -error = thread_module.error +error = __thread.error def get_ident(gr=None): if gr is None: @@ -23,13 +22,14 @@ def allocate_lock(): def exit(): raise greenlet.GreenletExit -def stack_size(size=None): - if size is None: - return thread_module.stack_size() - if size > thread_module.stack_size(): - return thread_module.stack_size(size) - else: - pass - # not going to decrease stack_size, because otherwise other greenlets in this thread will suffer +if hasattr(__thread, 'stack_size'): + def stack_size(size=None): + if size is None: + return __thread.stack_size() + if size > __thread.stack_size(): + return __thread.stack_size(size) + else: + pass + # not going to decrease stack_size, because otherwise other greenlets in this thread will suffer # XXX interrupt_main diff --git a/eventlet/green/threading.py b/eventlet/green/threading.py index 5506afe..3799a7f 100644 --- a/eventlet/green/threading.py +++ b/eventlet/green/threading.py @@ -9,7 +9,7 @@ from collections import deque # Rename some stuff so "from threading import *" is safe __all__ = ['activeCount', 'Condition', 'currentThread', 'enumerate', 'Event', 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Thread', - 'Timer', 'setprofile', 'settrace', 'local', 'stack_size'] + 'Timer', 'setprofile', 'settrace', 'local'] _start_new_thread = thread.start_new_thread _allocate_lock = thread.allocate_lock @@ -743,7 +743,11 @@ def enumerate(): _active_limbo_lock.release() return active -from thread import stack_size +try: + from thread import stack_size + __all__.append('stack_size') +except ImportError: + pass # Create the main thread object, # and make it available for the interpreter diff --git a/eventlet/green/time.py b/eventlet/green/time.py index f133db9..95a845f 100644 --- a/eventlet/green/time.py +++ b/eventlet/green/time.py @@ -1,7 +1,4 @@ -from __future__ import absolute_import -from time import * +__time = __import__('time') +for var in dir(__time): + exec "%s = __time.%s" % (var, var) from eventlet.api import sleep - -def _install(): - import time - time.sleep = sleep diff --git a/eventlet/green/urllib.py b/eventlet/green/urllib.py index 2f034f2..207c57c 100644 --- a/eventlet/green/urllib.py +++ b/eventlet/green/urllib.py @@ -1,16 +1,19 @@ -from __future__ import absolute_import -import urllib -from urllib import * +urllib = __import__('urllib') +for var in dir(urllib): + exec "%s = urllib.%s" % (var, var) # import the following to be a better drop-in replacement -from urllib import (__all__, __version__, MAXFTPCACHE, ContentTooShortError, - ftpcache, _noheaders, noheaders, addbase, addclosehook, - addinfo, addinfourl, _is_unicode, toBytes, _hextochr, - always_safe, getproxies_environment, proxy_bypass) +__import_lst = ['__all__', '__version__', 'MAXFTPCACHE', 'ContentTooShortError', + 'ftpcache', '_noheaders', 'noheaders', 'addbase', 'addclosehook', + 'addinfo', 'addinfourl', '_is_unicode', 'toBytes', '_hextochr', + 'always_safe', 'getproxies_environment', 'proxy_bypass'] + +for var in __import_lst: + exec "%s = urllib.%s" % (var, var) from eventlet.green import socket import os -import time +from eventlet.green import time import sys from urlparse import urljoin as basejoin diff --git a/eventlet/green/urllib2.py b/eventlet/green/urllib2.py index 6e99aa2..8244af0 100644 --- a/eventlet/green/urllib2.py +++ b/eventlet/green/urllib2.py @@ -1,11 +1,12 @@ -from __future__ import absolute_import +urllib2 = __import__('urllib2') +for var in dir(urllib2): + exec "%s = urllib2.%s" % (var, var) -# XXX blocking builtin open() is used in randombytes() -# AbstractHTTPHandler uses socket.error and socket._fileobject but that's OK -# as long as evenlet.green.socket imports them, does not reimplement them -import urllib2 -from urllib2 import * -from urllib2 import __version__, _cut_port_re, _parse_proxy +# import the following to be a better drop-in replacement +__import_lst = ['__version__', '__cut_port_re', '_parse_proxy'] + +for var in __import_lst: + exec "%s = getattr(urllib2, %r, None)" % (var, var) del (urlopen, install_opener, build_opener, HTTPHandler, HTTPSHandler, HTTPCookieProcessor, FileHandler, FTPHandler, CacheFTPHandler, GopherError)