summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Shepelev <temotor@gmail.com>2014-07-16 18:15:57 +0400
committerSergey Shepelev <temotor@gmail.com>2014-07-18 09:41:28 +0400
commitb73399116d19f5e4c0bd0de6723ad85a9c414bfe (patch)
treed1a8d9e41a2742555d2bd67f73810858213a6392
parent2f49f860b8f61c7f305556c5a7f7cba0804c533d (diff)
downloadeventlet-github-107-none-compare-int.tar.gz
greenio: processes: None >= 0 TypeErrorgithub-107-none-compare-int
https://github.com/eventlet/eventlet/issues/107
-rw-r--r--eventlet/greenio.py33
-rw-r--r--eventlet/processes.py6
-rw-r--r--tests/processes_test.py31
3 files changed, 33 insertions, 37 deletions
diff --git a/eventlet/greenio.py b/eventlet/greenio.py
index 51336bd..f6533d2 100644
--- a/eventlet/greenio.py
+++ b/eventlet/greenio.py
@@ -382,32 +382,29 @@ class _SocketDuckForFd(object):
buf[:nbytes] = data
return len(data)
+ @staticmethod
+ def _try_send(fd, data, sent=0, write=os.write):
+ try:
+ sent = write(fd, data)
+ except OSError as e:
+ if get_errno(e) not in SOCKET_BLOCKING:
+ raise IOError(*e.args)
+ return sent
+
def send(self, data):
- while True:
- try:
- os.write(self._fileno, data)
- except OSError as e:
- if get_errno(e) not in SOCKET_BLOCKING:
- raise IOError(*e.args)
+ sent = self._try_send(self._fileno, data)
+ if sent == 0:
trampoline(self, write=True)
+ sent = self._try_send(self._fileno, data)
+ return sent
def sendall(self, data):
len_data = len(data)
- os_write = os.write
fileno = self._fileno
- try:
- total_sent = os_write(fileno, data)
- except OSError as e:
- if get_errno(e) != errno.EAGAIN:
- raise IOError(*e.args)
- total_sent = 0
+ total_sent = self._try_send(fileno, data)
while total_sent < len_data:
trampoline(self, write=True)
- try:
- total_sent += os_write(fileno, data[total_sent:])
- except OSError as e:
- if get_errno(e) != errno. EAGAIN:
- raise IOError(*e.args)
+ total_sent += self._try_send(fileno, data[total_sent:])
def __del__(self):
self._close()
diff --git a/eventlet/processes.py b/eventlet/processes.py
index 544acc1..48891d1 100644
--- a/eventlet/processes.py
+++ b/eventlet/processes.py
@@ -9,7 +9,7 @@ import os
import signal
import eventlet
-from eventlet import greenio, pools
+from eventlet import pools
from eventlet.green import subprocess
@@ -31,7 +31,7 @@ def cooperative_wait(pobj, check_interval=0.01):
try:
while True:
status = pobj.poll()
- if status >= 0:
+ if status is not None:
return status
eventlet.sleep(check_interval)
except OSError as e:
@@ -96,7 +96,7 @@ class Process(object):
return self.child_stdin
raise RuntimeError("Unknown mode", mode)
- def read(self, amount=None):
+ def read(self, amount=-1):
"""Reads from the stdout and stderr of the child process.
The first call to read() will return a string; subsequent
calls may raise a DeadProcess when EOF occurs on the pipe.
diff --git a/tests/processes_test.py b/tests/processes_test.py
index 8510f6a..72eb352 100644
--- a/tests/processes_test.py
+++ b/tests/processes_test.py
@@ -1,11 +1,14 @@
-import sys
import warnings
-from tests import LimitedTestCase, main, skip_on_windows
+
+import eventlet
warnings.simplefilter('ignore', DeprecationWarning)
-from eventlet import processes, api
+from eventlet import processes
warnings.simplefilter('default', DeprecationWarning)
+from tests import LimitedTestCase, main, skip_on_windows
+
+
class TestEchoPool(LimitedTestCase):
def setUp(self):
super(TestEchoPool, self).setUp()
@@ -20,7 +23,7 @@ class TestEchoPool(LimitedTestCase):
result = proc.read()
finally:
self.pool.put(proc)
- self.assertEqual(result, 'hello\n')
+ self.assertEqual(result, b'hello\n')
@skip_on_windows
def test_read_eof(self):
@@ -34,14 +37,14 @@ class TestEchoPool(LimitedTestCase):
@skip_on_windows
def test_empty_echo(self):
p = processes.Process('echo', ['-n'])
- self.assertEqual('', p.read())
+ self.assertEqual(b'', p.read())
self.assertRaises(processes.DeadProcess, p.read)
class TestCatPool(LimitedTestCase):
def setUp(self):
super(TestCatPool, self).setUp()
- api.sleep(0)
+ eventlet.sleep(0)
self.pool = processes.ProcessPool('cat')
@skip_on_windows
@@ -50,34 +53,30 @@ class TestCatPool(LimitedTestCase):
proc = self.pool.get()
try:
- proc.write('goodbye')
+ proc.write(b'goodbye')
proc.close_stdin()
result = proc.read()
finally:
self.pool.put(proc)
- self.assertEqual(result, 'goodbye')
+ self.assertEqual(result, b'goodbye')
@skip_on_windows
def test_write_to_dead(self):
- result = None
-
proc = self.pool.get()
try:
- proc.write('goodbye')
+ proc.write(b'goodbye')
proc.close_stdin()
- result = proc.read()
+ proc.read()
self.assertRaises(processes.DeadProcess, proc.write, 'foo')
finally:
self.pool.put(proc)
@skip_on_windows
def test_close(self):
- result = None
-
proc = self.pool.get()
try:
- proc.write('hello')
+ proc.write(b'hello')
proc.close()
self.assertRaises(processes.DeadProcess, proc.write, 'goodbye')
finally:
@@ -95,7 +94,7 @@ class TestDyingProcessesLeavePool(LimitedTestCase):
try:
try:
result = proc.read()
- self.assertEqual(result, 'hello\n')
+ self.assertEqual(result, b'hello\n')
result = proc.read()
except processes.DeadProcess:
pass