From: Alfredo Deza Date: Wed, 9 Oct 2013 14:37:17 +0000 (-0400) Subject: implement sudo python in the connection object X-Git-Tag: 0.0.6~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f64a259fa56227440fe5efd002e5e47e0e829152;p=remoto.git implement sudo python in the connection object --- diff --git a/remoto/connection.py b/remoto/connection.py index e24a15d..7399807 100644 --- a/remoto/connection.py +++ b/remoto/connection.py @@ -8,18 +8,27 @@ from .lib import execnet class Connection(object): - def __init__(self, hostname, logger=None, sudo=False, threads=1): + def __init__(self, hostname, logger=None, sudo=False, threads=1, eager=True): self.hostname = hostname - self.gateway = self._make_gateway(hostname) - self.logger = logger or FakeRemoteLogger() self.sudo = sudo + self.logger = logger or FakeRemoteLogger() + self.remote_module = None self.channel = None - self.gateway.remote_init_threads(threads) + if eager: + self.gateway = self._make_gateway(hostname) + self.gateway.remote_init_threads(threads) def _make_gateway(self, hostname): - if needs_ssh(hostname): - return execnet.makegateway('ssh=%s' % hostname) - return execnet.makegateway() + return execnet.makegateway( + self._make_connection_string(hostname) + ) + + def _make_connection_string(self, hostname, _needs_ssh=None): + _needs_ssh = _needs_ssh or needs_ssh(hostname) + interpreter = 'sudo python' if self.sudo else 'python' + if _needs_ssh(hostname): + return 'ssh=%s//python=%s' % (hostname, interpreter) + return 'python=%s' % interpreter def __enter__(self): return self @@ -35,7 +44,7 @@ class Connection(object): self.gateway.exit() def import_module(self, module): - return ModuleExecute(self.gateway, module, self.logger) + self.remote_module = ModuleExecute(self.gateway, module, self.logger) class ModuleExecute(object):