diff options
| author | Sergey Shepelev <temotor@gmail.com> | 2014-07-16 18:15:57 +0400 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2014-07-18 09:41:28 +0400 |
| commit | b73399116d19f5e4c0bd0de6723ad85a9c414bfe (patch) | |
| tree | d1a8d9e41a2742555d2bd67f73810858213a6392 | |
| parent | 2f49f860b8f61c7f305556c5a7f7cba0804c533d (diff) | |
| download | eventlet-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.py | 33 | ||||
| -rw-r--r-- | eventlet/processes.py | 6 | ||||
| -rw-r--r-- | tests/processes_test.py | 31 |
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 |
