diff options
author | jortel <devnull@localhost> | 2010-02-01 21:22:57 +0000 |
---|---|---|
committer | jortel <devnull@localhost> | 2010-02-01 21:22:57 +0000 |
commit | cd793e3955a75af60a5d755291e7921563cf1508 (patch) | |
tree | f59271265fecc6add78a44f65ecfd883327a9537 | |
parent | f11026be7465c1923d60c6e1fc5999abbfdecba3 (diff) | |
download | suds-cd793e3955a75af60a5d755291e7921563cf1508.tar.gz |
Refactor transports to use urllib2 ProxyHandler.
-rw-r--r-- | suds/__init__.py | 2 | ||||
-rw-r--r-- | suds/transport/http.py | 56 | ||||
-rw-r--r-- | suds/transport/https.py | 22 |
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 |