]> 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:06:51 +0000 (18:06 +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>
(cherry picked from commit 53fe8b16431833b7bff6271c41ca8b79b0a7701e)

patchwork/bin/pwclient

index 64b7025d952701cfbac3ca4ae0dc3b64d347f0fe..e1ef944ca60b347a6c56c8c2c0c8faa18c56857c 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."""