diff options
author | Senthil Kumaran <orsenthil@gmail.com> | 2009-07-19 02:43:43 (GMT) |
---|---|---|
committer | Senthil Kumaran <orsenthil@gmail.com> | 2009-07-19 02:43:43 (GMT) |
commit | 5fee460bfabc248ca8c14fc2403fdfabf5051dad (patch) | |
tree | 8090bef8304ca359e9c0071b6cc17d518997c7b0 | |
parent | 5215875a95c0a08a688e897f4675be038f83a117 (diff) | |
download | cpython-5fee460bfabc248ca8c14fc2403fdfabf5051dad.zip cpython-5fee460bfabc248ca8c14fc2403fdfabf5051dad.tar.gz cpython-5fee460bfabc248ca8c14fc2403fdfabf5051dad.tar.bz2 |
Fix for issue5102, timeout value propages between redirects, proxy, digest and
auth handlers. Fixed tests to reflect the same.
-rw-r--r-- | Lib/test/test_urllib2.py | 8 | ||||
-rw-r--r-- | Lib/urllib2.py | 8 |
2 files changed, 10 insertions, 6 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 1dcd616..d4288f8 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -224,8 +224,8 @@ def test_password_manager_default_port(self): class MockOpener: addheaders = [] - def open(self, req, data=None): - self.req, self.data = req, data + def open(self, req, data=None,timeout=socket._GLOBAL_DEFAULT_TIMEOUT): + self.req, self.data, self.timeout = req, data, timeout def error(self, proto, *args): self.proto, self.args = proto, args @@ -850,6 +850,7 @@ class HandlerTests(unittest.TestCase): method = getattr(h, "http_error_%s" % code) req = Request(from_url, data) req.add_header("Nonsense", "viking=withhold") + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT if data is not None: req.add_header("Content-Length", str(len(data))) req.add_unredirected_header("Spam", "spam") @@ -878,6 +879,7 @@ class HandlerTests(unittest.TestCase): # loop detection req = Request(from_url) + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT def redirect(h, req, url=to_url): h.http_error_302(req, MockFile(), 302, "Blah", MockHeaders({"location": url})) @@ -887,6 +889,7 @@ class HandlerTests(unittest.TestCase): # detect infinite loop redirect of a URL to itself req = Request(from_url, origin_req_host="example.com") count = 0 + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT try: while 1: redirect(h, req, "http://example.com/") @@ -898,6 +901,7 @@ class HandlerTests(unittest.TestCase): # detect endless non-repeating chain of redirects req = Request(from_url, origin_req_host="example.com") count = 0 + req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT try: while 1: redirect(h, req, "http://example.com/%d" % count) diff --git a/Lib/urllib2.py b/Lib/urllib2.py index 03aaf79..7ccf14b 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -600,7 +600,7 @@ class HTTPRedirectHandler(BaseHandler): fp.read() fp.close() - return self.parent.open(new) + return self.parent.open(new, timeout=req.timeout) http_error_301 = http_error_303 = http_error_307 = http_error_302 @@ -716,7 +716,7 @@ class ProxyHandler(BaseHandler): # {'http': 'ftp://proxy.example.com'}, we may end up turning # a request for http://acme.example.com/a into one for # ftp://proxy.example.com/a - return self.parent.open(req) + return self.parent.open(req, timeout=req.timeout) class HTTPPasswordMgr: @@ -832,7 +832,7 @@ class AbstractBasicAuthHandler: if req.headers.get(self.auth_header, None) == auth: return None req.add_header(self.auth_header, auth) - return self.parent.open(req) + return self.parent.open(req, timeout=req.timeout) else: return None @@ -923,7 +923,7 @@ class AbstractDigestAuthHandler: if req.headers.get(self.auth_header, None) == auth_val: return None req.add_unredirected_header(self.auth_header, auth_val) - resp = self.parent.open(req) + resp = self.parent.open(req, timeout=req.timeout) return resp def get_cnonce(self, nonce): |