Add a patch for python eventlet, when using install_venv.py (see FAQ # 1485)

This commit is contained in:
John Tran 2011-04-05 18:35:15 -07:00
parent 94ccd2f4a1
commit d137ffdc2f
2 changed files with 30 additions and 0 deletions

24
tools/eventlet-patch Normal file
View File

@ -0,0 +1,24 @@
# HG changeset patch
# User Soren Hansen <soren@linux2go.dk>
# Date 1297678255 -3600
# Node ID 4c846d555010bb5a91ab4da78dfe596451313742
# Parent 5b7e9946c79f005c028eb63207cf5eb7bb21d1c3
Don't attempt to wrap GreenPipes in GreenPipe
If the os module is monkeypatched, Python's standard subprocess module
will return greenio.GreenPipe instances for Popen objects' stdin, stdout,
and stderr attributes. However, eventlet.green.subprocess tries to wrap
these attributes in another greenio.GreenPipe, which GreenPipe refuses.
diff -r 5b7e9946c79f -r 4c846d555010 eventlet/green/subprocess.py
--- a/eventlet/green/subprocess.py Sat Feb 05 13:05:05 2011 -0800
+++ b/eventlet/green/subprocess.py Mon Feb 14 11:10:55 2011 +0100
@@ -27,7 +27,7 @@
# eventlet.processes.Process.run() method.
for attr in "stdin", "stdout", "stderr":
pipe = getattr(self, attr)
- if pipe is not None:
+ if pipe is not None and not type(pipe) == greenio.GreenPipe:
wrapped_pipe = greenio.GreenPipe(pipe, pipe.mode, bufsize)
setattr(self, attr, wrapped_pipe)
__init__.__doc__ = subprocess_orig.Popen.__init__.__doc__

View File

@ -103,6 +103,12 @@ def install_dependencies(venv=VENV):
pthfile = os.path.join(venv, "lib", "python2.6", "site-packages", "nova.pth")
f = open(pthfile, 'w')
f.write("%s\n" % ROOT)
# Patch eventlet (see FAQ # 1485)
patchsrc = os.path.join(ROOT, 'tools', 'eventlet-patch')
patchfile = os.path.join(venv, "lib", "python2.6", "site-packages", "eventlet",
"green", "subprocess.py")
patch_cmd = "patch %s %s" % (patchfile, patchsrc)
os.system(patch_cmd)
def print_help():