Disabling warnings in saranwrap child processes so its own warning doesn't cause stderr problems. Moved named in there so as to remove a dependency on api.

This commit is contained in:
Ryan Williams
2010-02-20 14:23:31 -05:00
parent 94f1ca553b
commit 092b17ce9f

View File

@@ -4,7 +4,7 @@ import struct
import sys import sys
from eventlet.processes import Process, DeadProcess from eventlet.processes import Process, DeadProcess
from eventlet import api, pools from eventlet import pools
import warnings import warnings
warnings.warn("eventlet.saranwrap is deprecated due to underuse. If you love " warnings.warn("eventlet.saranwrap is deprecated due to underuse. If you love "
@@ -36,9 +36,9 @@ def wrap(obj, dead_callback = None):
return wrap_module(obj.__name__, dead_callback) return wrap_module(obj.__name__, dead_callback)
pythonpath_sync() pythonpath_sync()
if _g_debug_mode: if _g_debug_mode:
p = Process(sys.executable, [__file__, '--child', '--logfile', os.path.join(tempfile.gettempdir(), 'saranwrap.log')], dead_callback) p = Process(sys.executable, ["-W", "ignore", __file__, '--child', '--logfile', os.path.join(tempfile.gettempdir(), 'saranwrap.log')], dead_callback)
else: else:
p = Process(sys.executable, [__file__, '--child'], dead_callback) p = Process(sys.executable, ["-W", "ignore", __file__, '--child'], dead_callback)
prox = Proxy(ChildProcess(p, p)) prox = Proxy(ChildProcess(p, p))
prox.obj = obj prox.obj = obj
return prox.obj return prox.obj
@@ -53,9 +53,9 @@ def wrap_module(fqname, dead_callback = None):
pythonpath_sync() pythonpath_sync()
global _g_debug_mode global _g_debug_mode
if _g_debug_mode: if _g_debug_mode:
p = Process(sys.executable, [__file__, '--module', fqname, '--logfile', os.path.join(tempfile.gettempdir(), 'saranwrap.log')], dead_callback) p = Process(sys.executable, ["-W", "ignore", __file__, '--module', fqname, '--logfile', os.path.join(tempfile.gettempdir(), 'saranwrap.log')], dead_callback)
else: else:
p = Process(sys.executable, [__file__, '--module', fqname,], dead_callback) p = Process(sys.executable, ["-W", "ignore", __file__, '--module', fqname,], dead_callback)
prox = Proxy(ChildProcess(p,p)) prox = Proxy(ChildProcess(p,p))
return prox return prox
@@ -598,6 +598,41 @@ def print_string(str):
def err_string(str): def err_string(str):
print >>sys.stderr, str print >>sys.stderr, str
def named(name):
"""Return an object given its name.
The name uses a module-like syntax, eg::
os.path.join
or::
mulib.mu.Resource
"""
toimport = name
obj = None
import_err_strings = []
while toimport:
try:
obj = __import__(toimport)
break
except ImportError, err:
# print 'Import error on %s: %s' % (toimport, err) # debugging spam
import_err_strings.append(err.__str__())
toimport = '.'.join(toimport.split('.')[:-1])
if obj is None:
raise ImportError('%s could not be imported. Import errors: %r' % (name, import_err_strings))
for seg in name.split('.')[1:]:
try:
obj = getattr(obj, seg)
except AttributeError:
dirobj = dir(obj)
dirobj.sort()
raise AttributeError('attribute %r missing from %r (%r) %r. Import errors: %r' % (
seg, obj, dirobj, name, import_err_strings))
return obj
def main(): def main():
import optparse import optparse
parser = optparse.OptionParser( parser = optparse.OptionParser(
@@ -622,7 +657,7 @@ def main():
if options.module: if options.module:
def get_module(): def get_module():
if base_obj[0] is None: if base_obj[0] is None:
base_obj[0] = api.named(options.module) base_obj[0] = named(options.module)
return base_obj[0] return base_obj[0]
server = Server(tpool.Proxy(sys.stdin), server = Server(tpool.Proxy(sys.stdin),
tpool.Proxy(sys.stdout), tpool.Proxy(sys.stdout),