]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
pwclient: Support proxy configuration
authorThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 13 Dec 2016 10:37:46 +0000 (11:37 +0100)
committerStephen Finucane <stephen@that.guru>
Tue, 13 Dec 2016 18:01:15 +0000 (18:01 +0000)
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>
patchwork/bin/pwclient

index 633ffc285c7057a7eea1210daf622ef2d96d646b..660ed760c8dbb37e180f4db5efdaebb18831c0dd 100755 (executable)
@@ -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."""