aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Monjalon <thomas.monjalon@6wind.com>2016-12-13 11:37:46 +0100
committerStephen Finucane <stephen@that.guru>2016-12-13 18:01:15 +0000
commit53fe8b16431833b7bff6271c41ca8b79b0a7701e (patch)
treeb1f3205bfa55d4ec3206887dbd43d342d93ab6fc
parent0bcb1bf6466461043bcb84c4856166105d5d5738 (diff)
downloadpatchwork-53fe8b16431833b7bff6271c41ca8b79b0a7701e.tar
patchwork-53fe8b16431833b7bff6271c41ca8b79b0a7701e.tar.gz
pwclient: Support proxy configuration
The environment variables http_proxy and https_proxy can be used to configure the HTTP transport. The TCP connection is made with the proxy host, whereas the original host is maintained in the HTTP POST URI via "handler" in "send_request". The send_request() method of xmlrpclib has a different signature and behaviour in Python 2 and 3. Fixes #47 Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Reviewed-by: Stephen Finucane <stephen@that.guru>
-rwxr-xr-xpatchwork/bin/pwclient24
1 files changed, 24 insertions, 0 deletions
diff --git a/patchwork/bin/pwclient b/patchwork/bin/pwclient
index 633ffc2..660ed76 100755
--- a/patchwork/bin/pwclient
+++ b/patchwork/bin/pwclient
@@ -107,12 +107,24 @@ class Transport(xmlrpclib.SafeTransport):
def __init__(self, url):
xmlrpclib.SafeTransport.__init__(self)
self.credentials = None
+ self.host = None
+ self.proxy = None
+ self.scheme = url.split('://', 1)[0]
self.https = url.startswith('https')
+ if self.https:
+ self.proxy = os.environ.get('https_proxy')
+ else:
+ self.proxy = os.environ.get('http_proxy')
+ if self.proxy:
+ self.https = self.proxy.startswith('https')
def set_credentials(self, username=None, password=None):
self.credentials = '%s:%s' % (username, password)
def make_connection(self, host):
+ self.host = host
+ if self.proxy:
+ host = self.proxy.split('://', 1)[-1]
if self.credentials:
host = '@'.join([self.credentials, host])
if self.https:
@@ -120,6 +132,18 @@ class Transport(xmlrpclib.SafeTransport):
else:
return xmlrpclib.Transport.make_connection(self, host)
+ if sys.version_info[0] == 2:
+
+ def send_request(self, connection, handler, request_body):
+ handler = '%s://%s%s' % (self.scheme, self.host, handler)
+ xmlrpclib.Transport.send_request(self, connection, handler, request_body)
+
+ else: # Python 3
+
+ def send_request(self, host, handler, request_body, debug):
+ handler = '%s://%s%s' % (self.scheme, host, handler)
+ return xmlrpclib.Transport.send_request(self, host, handler, request_body, debug)
+
def project_id_by_name(rpc, linkname):
"""Given a project short name, look up the Project ID."""