summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjortel <devnull@localhost>2010-02-01 21:22:57 +0000
committerjortel <devnull@localhost>2010-02-01 21:22:57 +0000
commitcd793e3955a75af60a5d755291e7921563cf1508 (patch)
treef59271265fecc6add78a44f65ecfd883327a9537
parentf11026be7465c1923d60c6e1fc5999abbfdecba3 (diff)
downloadsuds-cd793e3955a75af60a5d755291e7921563cf1508.tar.gz
Refactor transports to use urllib2 ProxyHandler.
-rw-r--r--suds/__init__.py2
-rw-r--r--suds/transport/http.py56
-rw-r--r--suds/transport/https.py22
3 files changed, 42 insertions, 38 deletions
diff --git a/suds/__init__.py b/suds/__init__.py
index c3d788b..e6094aa 100644
--- a/suds/__init__.py
+++ b/suds/__init__.py
@@ -27,7 +27,7 @@ import sys
#
__version__ = '0.3.9'
-__build__="(beta) R653-20100129"
+__build__="(beta) R654-20100201"
#
# Exceptions
diff --git a/suds/transport/http.py b/suds/transport/http.py
index cf00615..c4162b4 100644
--- a/suds/transport/http.py
+++ b/suds/transport/http.py
@@ -50,6 +50,7 @@ class HttpTransport(Transport):
Transport.__init__(self)
Unskin(self.options).update(kwargs)
self.cookiejar = CookieJar()
+ self.proxy = {}
self.urlopener = None
def open(self, request):
@@ -57,7 +58,7 @@ class HttpTransport(Transport):
url = request.url
log.debug('opening (%s)', url)
u2request = u2.Request(url)
- self.setproxy(url, u2request)
+ self.proxy = self.options.proxy
return self.u2open(u2request)
except u2.HTTPError, e:
raise TransportError(str(e), e.code, e.fp)
@@ -70,7 +71,7 @@ class HttpTransport(Transport):
try:
u2request = u2.Request(url, msg, headers)
self.addcookies(u2request)
- self.setproxy(url, u2request)
+ self.proxy = self.options.proxy
request.headers.update(u2request.headers)
log.debug('sending:\n%s', request)
fp = self.u2open(u2request)
@@ -109,17 +110,33 @@ class HttpTransport(Transport):
@rtype: fp
"""
tm = self.options.timeout
- if self.u2ver() >= 2.6:
- if self.urlopener is None:
- return u2.urlopen(u2request, timeout=tm)
- else:
- return self.urlopener.open(u2request, timeout=tm)
- else:
+ url = self.u2opener()
+ if self.u2ver() < 2.6:
socket.setdefaulttimeout(tm)
- if self.urlopener is None:
- return u2.urlopen(u2request)
- else:
- return self.urlopener.open(u2request)
+ return url.open(u2request)
+ else:
+ return url.open(u2request, timeout=tm)
+
+ def u2opener(self):
+ """
+ Create a urllib opener.
+ @return: An opener.
+ @rtype: I{OpenerDirector}
+ """
+ if self.urlopener is None:
+ return u2.build_opener(*self.u2handlers())
+ else:
+ return self.urlopener
+
+ def u2handlers(self):
+ """
+ Get a collection of urllib handlers.
+ @return: A list of handlers to be installed in the opener.
+ @rtype: [Handler,...]
+ """
+ handlers = []
+ handlers.append(u2.ProxyHandler(self.proxy))
+ return handlers
def u2ver(self):
"""
@@ -135,21 +152,6 @@ class HttpTransport(Transport):
log.exception(e)
return 0
- def setproxy(self, url, u2request):
- """
- Setup the http/https proxy.
- @param url: The URL to be opened.
- @type url: str
- @param u2request: A urllib2 request.
- @rtype: u2request: urllib2.Requet.
- """
- protocol = urlparse(url)[0]
- proxy = self.options.proxy.get(protocol, None)
- if proxy is None:
- return
- protocol = u2request.type
- u2request.set_proxy(proxy, protocol)
-
def __deepcopy__(self, memo={}):
clone = self.__class__()
p = Unskin(self.options)
diff --git a/suds/transport/https.py b/suds/transport/https.py
index 52b463f..811b221 100644
--- a/suds/transport/https.py
+++ b/suds/transport/https.py
@@ -54,8 +54,11 @@ class HttpAuthenticated(HttpTransport):
"""
HttpTransport.__init__(self, **kwargs)
self.pm = u2.HTTPPasswordMgrWithDefaultRealm()
- self.handler = u2.HTTPBasicAuthHandler(self.pm)
- self.urlopener = u2.build_opener(self.handler)
+
+ def u2handlers(self):
+ handlers = HttpTransport.u2handlers(self)
+ handlers.append(u2.HTTPBasicAuthHandler(self.pm))
+ return handlers
def open(self, request):
credentials = self.credentials()
@@ -76,14 +79,13 @@ class WindowsHttpAuthenticated(HttpAuthenticated):
@ivar handler: The authentication handler.
@author: Christopher Bess
"""
-
- def __init__(self, **kwargs):
- # try to import ntlm support
+
+ def u2handlers(self):
+ # try to import ntlm support
try:
from ntlm import HTTPNtlmAuthHandler
except ImportError:
- raise Exception("Cannot import python-ntlm module")
- HttpTransport.__init__(self, **kwargs)
- self.pm = u2.HTTPPasswordMgrWithDefaultRealm()
- self.handler = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(self.pm)
- self.urlopener = u2.build_opener(self.handler) \ No newline at end of file
+ raise Exception("Cannot import python-ntlm module")
+ handlers = HttpTransport.u2handlers(self)
+ handlers.append(HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(self.pm))
+ return handlers