From 9f079d5baddf0dcbcf1c7fc68b20820fe81748ea Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Sun, 24 Oct 2010 10:04:24 -0400 Subject: [PATCH] Make pysawsim.invoke.CommandError picklable, and add doctest proof. --- pysawsim/invoke.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/pysawsim/invoke.py b/pysawsim/invoke.py index bb051d7..165701c 100644 --- a/pysawsim/invoke.py +++ b/pysawsim/invoke.py @@ -25,14 +25,40 @@ import sys class CommandError(Exception): - def __init__(self, command, status, stdout, stderr): - strerror = ["Command failed (%d):\n %s\n" % (status, stderr), - "while executing\n %s" % command] - Exception.__init__(self, "\n".join(strerror)) + """Represent errors in command execution. + + Instances are picklable (for passing through `multiprocessing.Queue`\s). + + >>> import pickle + >>> a = CommandError('somefunc', 1, '', 'could not find "somefunc"') + >>> x = pickle.dumps(a) + >>> b = pickle.loads(x) + >>> print b + Command failed (1): + could not find "somefunc" + + while executing + somefunc + """ + def __init__(self, command=None, status=None, stdout=None, stderr=None): self.command = command self.status = status self.stdout = stdout self.stderr = stderr + Exception.__init__(self, self.__str__()) + + def __getstate__(self): + return self.__dict__ + + def __setstate__(self, data): + self.__dict__.update(data) + + def __str__(self): + return "\n".join([ + "Command failed (%s):\n %s\n" % (self.status, self.stderr), + "while executing\n %s" % self.command, + ]) + def invoke(cmd_string, stdin=None, expect=(0,), cwd=None, verbose=False): """ -- 2.26.2