summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSenthil Kumaran <orsenthil@gmail.com>2009-07-19 04:20:12 (GMT)
committerSenthil Kumaran <orsenthil@gmail.com>2009-07-19 04:20:12 (GMT)
commite9da06f57443fd8cfe9e16fb950cfaf84a41f735 (patch)
tree31ae4487ec44cf4ba59b6c1ad19aefdbfaf4e4c1 /Lib
parent10fc39563cdb2953bc0eae634ac1efd2ff82eb5d (diff)
downloadcpython-e9da06f57443fd8cfe9e16fb950cfaf84a41f735.zip
cpython-e9da06f57443fd8cfe9e16fb950cfaf84a41f735.tar.gz
cpython-e9da06f57443fd8cfe9e16fb950cfaf84a41f735.tar.bz2
Fix for issue5102, timeout value propages between redirects, proxy, digest and
auth handlers. Fixed tests to reflect the same.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_urllib2.py8
-rw-r--r--Lib/urllib/request.py8
2 files changed, 10 insertions, 6 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index 39ec498..5c9cb8c 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -222,8 +222,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
@@ -854,6 +854,7 @@ class HandlerTests(unittest.TestCase):
for data in None, "blah\nblah\n":
method = getattr(h, "http_error_%s" % code)
req = Request(from_url, data)
+ req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
req.add_header("Nonsense", "viking=withhold")
if data is not None:
req.add_header("Content-Length", str(len(data)))
@@ -883,6 +884,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}))
@@ -892,6 +894,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/")
@@ -903,6 +906,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/urllib/request.py b/Lib/urllib/request.py
index bb67267..b133fe4 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -552,7 +552,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
@@ -669,7 +669,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:
@@ -785,7 +785,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
@@ -866,7 +866,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):