You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2014/08/21 12:50:16 UTC
git commit: Update proxy support so it also works with Python 2.6.
Repository: libcloud
Updated Branches:
refs/heads/trunk 816f3705e -> 06707ef0c
Update proxy support so it also works with Python 2.6.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/06707ef0
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/06707ef0
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/06707ef0
Branch: refs/heads/trunk
Commit: 06707ef0c8c52555f10ce9152388e6416a43fac4
Parents: 816f370
Author: Tomaz Muraus <to...@apache.org>
Authored: Thu Aug 21 12:33:22 2014 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Thu Aug 21 12:44:03 2014 +0200
----------------------------------------------------------------------
.../http_proxy/set_http_proxy_method.py | 11 ++++-
docs/other/using-http-proxy.rst | 42 +++++++++++++++-----
libcloud/httplib_ssl.py | 14 ++++---
libcloud/test/test_connection.py | 7 ----
4 files changed, 49 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/06707ef0/docs/examples/http_proxy/set_http_proxy_method.py
----------------------------------------------------------------------
diff --git a/docs/examples/http_proxy/set_http_proxy_method.py b/docs/examples/http_proxy/set_http_proxy_method.py
index b9d5bdf..9cebf97 100644
--- a/docs/examples/http_proxy/set_http_proxy_method.py
+++ b/docs/examples/http_proxy/set_http_proxy_method.py
@@ -3,10 +3,17 @@ from pprint import pprint
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
-PROXY_URL_NO_AUTH = 'http://<proxy hostname>:<proxy port>'
+PROXY_URL_NO_AUTH_1 = 'http://<proxy hostname 1>:<proxy port 2>'
+PROXY_URL_NO_AUTH_2 = 'http://<proxy hostname 1>:<proxy port 2>'
PROXY_URL_BASIC_AUTH = 'http://<user>:<pass>@<proxy hostname>:<proxy port>'
cls = get_driver(Provider.RACKSPACE)
driver = cls('username', 'api key', region='ord')
-driver.connection.set_http_proxy(proxy_url=PROXY_URL_NO_AUTH)
+
+# Use proxy 1 for this request
+driver.connection.set_http_proxy(proxy_url=PROXY_URL_NO_AUTH_1)
+pprint(driver.list_nodes())
+
+# Use proxy 2 for this request
+driver.connection.set_http_proxy(proxy_url=PROXY_URL_NO_AUTH_2)
pprint(driver.list_nodes())
http://git-wip-us.apache.org/repos/asf/libcloud/blob/06707ef0/docs/other/using-http-proxy.rst
----------------------------------------------------------------------
diff --git a/docs/other/using-http-proxy.rst b/docs/other/using-http-proxy.rst
index 4231bea..b59204b 100644
--- a/docs/other/using-http-proxy.rst
+++ b/docs/other/using-http-proxy.rst
@@ -5,9 +5,16 @@ Using an HTTP proxy
Support for HTTP proxies is only available in Libcloud trunk and higher.
-Libcloud supports using an HTTP proxy for outgoing HTTP and HTTPS requests. At
-the moment, using a proxy is only supported if you are using Python 2.7 or
-above (it has been tested with 2.7, PyPy, 3.1, 3.3, 3.3, 3.4).
+Libcloud supports using an HTTP proxy for outgoing HTTP and HTTPS requests.
+
+Proxy support has been tested with the following Python versions;
+
+* Python 2.6
+* Python 2.7 / PyPy
+* Python 3.1
+* Python 3.2
+* Python 3.3
+* Python 3.4
You can specify which HTTP proxy to use using one of the approaches described
bellow:
@@ -23,8 +30,7 @@ bellow:
Known limitations
-----------------
-* Python 2.6 is not supported
-* Only HTTP basic authentication proxy authorization method is supported
+* Only HTTP basic access authentication proxy authorization method is supported
Examples
--------
@@ -32,8 +38,12 @@ Examples
This section includes some code examples which show how to use an HTTP proxy
with Libcloud.
-1. Using http_proxy environment variable
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+1. Using ``http_proxy`` environment variable
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+By setting ``http_proxy`` environment variable you can specify which proxy to
+use for all of the outgoing requests for a duration / life-time of the process
+or a script.
Without authentication:
@@ -47,14 +57,24 @@ With basic auth authentication:
http_proxy=http://<username>:<password>@<proxy hostname>:<proxy port> python my_script.py
-2. Passing http_proxy argument to the connection class
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2. Passing ``http_proxy`` argument to the connection class constructor
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+By passing ``http_proxy`` argument to the
+:class:`libcloud.common.base.Connection` class constructor, you can specify
+which proxy to use for a particular connection.
.. literalinclude:: /examples/http_proxy/constructor_argument.py
:language: python
-3. Calling set_http_proxy method
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3. Calling ``set_http_proxy`` method
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Calling ``set_http_proxy`` method allows you to specify which proxy to use
+for all the outgoing requests which follow ``set_http_proxy`` method call.
+
+This method also allows you to use a different proxy for each request as shown
+in the example bellow.
.. literalinclude:: /examples/http_proxy/set_http_proxy_method.py
:language: python
http://git-wip-us.apache.org/repos/asf/libcloud/blob/06707ef0/libcloud/httplib_ssl.py
----------------------------------------------------------------------
diff --git a/libcloud/httplib_ssl.py b/libcloud/httplib_ssl.py
index d74ad40..4497da3 100644
--- a/libcloud/httplib_ssl.py
+++ b/libcloud/httplib_ssl.py
@@ -19,7 +19,6 @@ verification, depending on libcloud.security settings.
import os
import re
import socket
-import sys
import ssl
import base64
import warnings
@@ -65,9 +64,6 @@ class LibcloudBaseConnection(object):
basic auth authentication information.
:type proxy_url: ``str``
"""
- if sys.version_info[:2] == (2, 6):
- raise Exception('HTTP proxy support requires Python 2.7 or higher')
-
result = self._parse_proxy_url(proxy_url=proxy_url)
scheme = result[0]
host = result[1]
@@ -138,7 +134,15 @@ class LibcloudBaseConnection(object):
auth_header = 'Basic %s' % (encoded.decode('utf-8'))
headers['Proxy-Authorization'] = auth_header
- self.set_tunnel(host=self.host, port=self.port, headers=headers)
+ if hasattr(self, 'set_tunnel'):
+ # Python 2.7 and higher
+ self.set_tunnel(host=self.host, port=self.port, headers=headers)
+ elif hasattr(self, '_set_tunnel'):
+ # Python 2.6
+ self._set_tunnel(host=self.host, port=self.port, headers=headers)
+ else:
+ raise ValueError('Unsupported Python version')
+
self._set_hostport(host=self.proxy_host, port=self.proxy_port)
def _activate_http_proxy(self, sock):
http://git-wip-us.apache.org/repos/asf/libcloud/blob/06707ef0/libcloud/test/test_connection.py
----------------------------------------------------------------------
diff --git a/libcloud/test/test_connection.py b/libcloud/test/test_connection.py
index aabbd1d..c97cfb4 100644
--- a/libcloud/test/test_connection.py
+++ b/libcloud/test/test_connection.py
@@ -25,14 +25,10 @@ from libcloud.common.base import Connection
from libcloud.common.base import LoggingConnection
from libcloud.httplib_ssl import LibcloudBaseConnection
from libcloud.httplib_ssl import LibcloudHTTPConnection
-from libcloud.utils.py3 import PY26
class BaseConnectionClassTestCase(unittest.TestCase):
def test_parse_proxy_url(self):
- if PY26:
- return
-
conn = LibcloudBaseConnection()
proxy_url = 'http://127.0.0.1:3128'
@@ -64,9 +60,6 @@ class BaseConnectionClassTestCase(unittest.TestCase):
proxy_url=proxy_url)
def test_constructor(self):
- if PY26:
- return
-
conn = LibcloudHTTPConnection(host='localhost', port=80)
self.assertEqual(conn.proxy_scheme, None)
self.assertEqual(conn.proxy_host, None)