From c5eb1c50cfbe8f9186dcad6e036e113fbd2a5bc6 Mon Sep 17 00:00:00 2001 From: Joe Julian Date: Wed, 26 Oct 2016 18:25:46 -0700 Subject: [PATCH] rpc: support python 2.6 Fixes #4 --- splitmount/rpc.py | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/splitmount/rpc.py b/splitmount/rpc.py index 21888ad..3733d75 100755 --- a/splitmount/rpc.py +++ b/splitmount/rpc.py @@ -23,9 +23,51 @@ import ctypes.util import os import subprocess +import sys + +# Monkeypatch subprocess for 2.6 +if sys.version_info[:2] == (2,6): + try: + from subprocess import STDOUT, check_output, CalledProcessError + except ImportError: # pragma: no cover + # python 2.6 doesn't include check_output + # monkey patch it in! + import subprocess + STDOUT = subprocess.STDOUT + + def check_output(*popenargs, **kwargs): + if 'stdout' in kwargs: # pragma: no cover + raise ValueError('stdout argument not allowed, ' + 'it will be overridden.') + process = subprocess.Popen(stdout=subprocess.PIPE, + *popenargs, **kwargs) + output, _ = process.communicate() + retcode = process.poll() + if retcode: + cmd = kwargs.get("args") + if cmd is None: + cmd = popenargs[0] + raise subprocess.CalledProcessError(retcode, cmd, + output=output) + return output + subprocess.check_output = check_output + + # overwrite CalledProcessError due to `output` + # keyword not being available (in 2.6) + class CalledProcessError(Exception): + + def __init__(self, returncode, cmd, output=None): + self.returncode = returncode + self.cmd = cmd + self.output = output + + def __str__(self): + return "Command '%s' returned non-zero exit status %d" % ( + self.cmd, self.returncode) + subprocess.CalledProcessError = CalledProcessError def cli_get_volfile (host, volume): - res = subprocess.check_output(["/usr/sbin/gluster","--remote-host={}".format(host), + res = subprocess.check_output(["/usr/sbin/gluster","--remote-host={0}".format(host), "system","getspec",volume]) return res @@ -90,5 +132,5 @@ def api_get_volfile (host, volume): for line in res.split(u'\n'): print(line) except: - print("bad return value {}".format(res)) + print("bad return value {0}".format(res)) raise