From 69a78db3b3221705f2ffc0e0cdd716b39c98b22f Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Thu, 30 Jul 2015 10:50:31 +0200 Subject: [PATCH] backport check_output for 2.6 --- modules/citibank/browser.py | 4 +++- modules/wellsfargo/browser.py | 3 ++- weboob/tools/application/console.py | 3 ++- weboob/tools/compat.py | 24 +++++++++++++++++++++++- weboob/tools/value.py | 6 ++++-- 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/modules/citibank/browser.py b/modules/citibank/browser.py index c1e9cf6a..0b38867a 100644 --- a/modules/citibank/browser.py +++ b/modules/citibank/browser.py @@ -31,7 +31,9 @@ import re import os from datetime import datetime from tempfile import mkstemp -from subprocess import check_output, STDOUT +from subprocess import STDOUT +from weboob.tools.compat import check_output + from time import sleep diff --git a/modules/wellsfargo/browser.py b/modules/wellsfargo/browser.py index 1da21248..3c1ca92c 100644 --- a/modules/wellsfargo/browser.py +++ b/modules/wellsfargo/browser.py @@ -25,7 +25,8 @@ import ssl import json import os from tempfile import mkstemp -from subprocess import check_output, STDOUT +from subprocess import STDOUT +from weboob.tools.compat import check_output from urllib import unquote from .pages import LoginProceedPage, LoginRedirectPage, \ diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py index 4ad33ca1..f14a3f9f 100644 --- a/weboob/tools/application/console.py +++ b/weboob/tools/application/console.py @@ -35,6 +35,7 @@ from weboob.core.repositories import ModuleInstallError, IProgress from weboob.exceptions import BrowserUnavailable, BrowserIncorrectPassword, BrowserForbidden, BrowserSSLError, BrowserQuestion from weboob.tools.value import Value, ValueBool, ValueFloat, ValueInt, ValueBackendPassword from weboob.tools.misc import to_unicode +from weboob.tools.compat import check_output from weboob.tools.ordereddict import OrderedDict from .base import Application, MoreResultsAvailable @@ -448,7 +449,7 @@ class ConsoleApplication(Application): while True: cmd = self.ask('') try: - subprocess.check_output(cmd, shell=True) + check_output(cmd, shell=True) except subprocess.CalledProcessError as e: print('%s' % e) else: diff --git a/weboob/tools/compat.py b/weboob/tools/compat.py index cc10099a..eff545f1 100644 --- a/weboob/tools/compat.py +++ b/weboob/tools/compat.py @@ -18,7 +18,7 @@ # along with weboob. If not, see . -__all__ = ['unicode', 'long', 'basestring'] +__all__ = ['unicode', 'long', 'basestring', 'check_output'] try: @@ -35,3 +35,25 @@ try: basestring = basestring except NameError: basestring = str + + +try: + from subprocess import check_output +except ImportError: + import subprocess + + def check_output(*popenargs, **kwargs): + r"""Run command with arguments and return its output as a byte string. + Backported from Python 2.7 as it's implemented as pure python on stdlib. + """ + process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs) + output, unused_err = process.communicate() + retcode = process.poll() + if retcode: + cmd = kwargs.get("args") + if cmd is None: + cmd = popenargs[0] + error = subprocess.CalledProcessError(retcode, cmd) + error.output = output + raise error + return output diff --git a/weboob/tools/value.py b/weboob/tools/value.py index 38dcf748..f0494bf3 100644 --- a/weboob/tools/value.py +++ b/weboob/tools/value.py @@ -20,8 +20,10 @@ import re import subprocess -from .ordereddict import OrderedDict + +from .compat import check_output from .misc import to_unicode +from .ordereddict import OrderedDict __all__ = ['ValuesDict', 'Value', 'ValueBackendPassword', 'ValueInt', 'ValueFloat', 'ValueBool'] @@ -149,7 +151,7 @@ class ValueBackendPassword(Value): if self.is_command(password): cmd = password[1:-1] try: - password = subprocess.check_output(cmd, shell=True) + password = check_output(cmd, shell=True) except subprocess.CalledProcessError as e: raise ValueError(u'The call to the external tool failed: %s' % e) else: