summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/errors2.py14
-rw-r--r--ipalib/plugable.py6
-rw-r--r--tests/test_ipalib/test_plugable.py3
3 files changed, 13 insertions, 10 deletions
diff --git a/ipalib/errors2.py b/ipalib/errors2.py
index 7793a914..7fd4b9c9 100644
--- a/ipalib/errors2.py
+++ b/ipalib/errors2.py
@@ -67,15 +67,19 @@ class SubprocessError(PrivateError):
For example:
+ >>> raise SubprocessError(returncode=2, argv=('ls', '-lh', '/no-foo/'))
+ Traceback (most recent call last):
+ ...
+ SubprocessError: return code 2 from ('ls', '-lh', '/no-foo/')
+
+ The exit code of the sub-process is available via the ``returncode``
+ instance attribute. For example:
+
>>> e = SubprocessError(returncode=1, argv=('/bin/false',))
>>> e.returncode
1
- >>> e.argv
+ >>> e.argv # argv is also available
('/bin/false',)
- >>> e.message
- "return code 1 from ('/bin/false',)"
- >>> str(e)
- "return code 1 from ('/bin/false',)"
"""
format = 'return code %(returncode)d from %(argv)r'
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index 094634d3..f7baa2a1 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -291,9 +291,9 @@ class Plugin(ReadOnly):
"""
argv = (executable,) + args
self.debug('Calling %r', argv)
- returncode = subprocess.call(argv)
- if returncode != 0:
- raise errors.SubprocessError(returncode, argv)
+ code = subprocess.call(argv)
+ if code != 0:
+ raise errors2.SubprocessError(returncode=code, argv=argv)
def __repr__(self):
"""
diff --git a/tests/test_ipalib/test_plugable.py b/tests/test_ipalib/test_plugable.py
index dbf0cc3f..c6c84fa1 100644
--- a/tests/test_ipalib/test_plugable.py
+++ b/tests/test_ipalib/test_plugable.py
@@ -372,8 +372,7 @@ class test_Plugin(ClassChecker):
"""
o = self.cls()
o.call('/bin/true') is None
- e = raises(errors.SubprocessError, o.call, '/bin/false')
- assert str(e) == 'return code %d from %r' % (1, ('/bin/false',))
+ e = raises(errors2.SubprocessError, o.call, '/bin/false')
assert e.returncode == 1
assert e.argv == ('/bin/false',)