From: Sebastian Wagner Date: Mon, 2 Dec 2019 14:13:14 +0000 (+0100) Subject: mgr/ssh: Port raising exceptions from completion handlers to Py2 X-Git-Tag: v15.1.0~675^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=4757110564611349ff0a8bf8cdf0f1601de4cac2;p=ceph-ci.git mgr/ssh: Port raising exceptions from completion handlers to Py2 Signed-off-by: Sebastian Wagner --- diff --git a/src/pybind/mgr/ssh/module.py b/src/pybind/mgr/ssh/module.py index 92f0d980302..1b612882f2d 100644 --- a/src/pybind/mgr/ssh/module.py +++ b/src/pybind/mgr/ssh/module.py @@ -107,24 +107,34 @@ class AsyncCompletion(orchestrator.Completion): def error_callback(e): self.fail(e) + if six.PY3: + _callback = self.__on_complete + else: + def _callback(*args, **kwargs): + # Py2 only: _worker_pool doesn't call error_callback + try: + return self.__on_complete(*args, **kwargs) + except Exception as e: + self.fail(e) + def run(value): if self.many: if not value: logger.info('calling map_async without values') callback([]) if six.PY3: - SSHOrchestrator.instance._worker_pool.map_async(self.__on_complete, value, + SSHOrchestrator.instance._worker_pool.map_async(_callback, value, callback=callback, error_callback=error_callback) else: - SSHOrchestrator.instance._worker_pool.map_async(self.__on_complete, value, + SSHOrchestrator.instance._worker_pool.map_async(_callback, value, callback=callback) else: if six.PY3: - SSHOrchestrator.instance._worker_pool.apply_async(self.__on_complete, (value,), + SSHOrchestrator.instance._worker_pool.apply_async(_callback, (value,), callback=callback, error_callback=error_callback) else: - SSHOrchestrator.instance._worker_pool.apply_async(self.__on_complete, (value,), + SSHOrchestrator.instance._worker_pool.apply_async(_callback, (value,), callback=callback) return self.ASYNC_RESULT diff --git a/src/pybind/mgr/ssh/tests/test_completion.py b/src/pybind/mgr/ssh/tests/test_completion.py index f076de8f287..988f56455f7 100644 --- a/src/pybind/mgr/ssh/tests/test_completion.py +++ b/src/pybind/mgr/ssh/tests/test_completion.py @@ -160,7 +160,6 @@ class TestCompletion(object): self._wait(ssh_module, c) assert c.result == "['2', '3']" - @pytest.mark.skipif(sys.version_info < (3,0), reason="requires python3") def test_raise(self, ssh_module): @async_completion def run(x):