diff options
author | Facundo Batista <facundobatista@gmail.com> | 2007-06-06 17:15:23 (GMT) |
---|---|---|
committer | Facundo Batista <facundobatista@gmail.com> | 2007-06-06 17:15:23 (GMT) |
commit | 10951d51e27f52ab5b92748b459a5fd40da6b871 (patch) | |
tree | 227688e2502f1de358e5939c7626d0a9dfba3598 /Lib/urllib2.py | |
parent | 92493120209565d6db37fe97c5bdb2f14d6a9c25 (diff) | |
download | cpython-10951d51e27f52ab5b92748b459a5fd40da6b871.zip cpython-10951d51e27f52ab5b92748b459a5fd40da6b871.tar.gz cpython-10951d51e27f52ab5b92748b459a5fd40da6b871.tar.bz2 |
Added an optional timeout parameter to function urllib2.urlopen,
with tests in test_urllib2net.py (must have network resource
enabled to execute them). Also modified test_urllib2.py because
testing mock classes must take it into acount. Docs are also
updated.
Diffstat (limited to 'Lib/urllib2.py')
-rw-r--r-- | Lib/urllib2.py | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/Lib/urllib2.py b/Lib/urllib2.py index fe32b2d..a1badb7 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -117,11 +117,11 @@ from urllib import localhost, url2pathname, getproxies __version__ = sys.version[:3] _opener = None -def urlopen(url, data=None): +def urlopen(url, data=None, timeout=None): global _opener if _opener is None: _opener = build_opener() - return _opener.open(url, data) + return _opener.open(url, data, timeout) def install_opener(opener): global _opener @@ -355,7 +355,7 @@ class OpenerDirector: if result is not None: return result - def open(self, fullurl, data=None): + def open(self, fullurl, data=None, timeout=None): # accept a URL or a Request object if isinstance(fullurl, basestring): req = Request(fullurl, data) @@ -364,6 +364,7 @@ class OpenerDirector: if data is not None: req.add_data(data) + req.timeout = timeout protocol = req.get_type() # pre-process request @@ -1057,7 +1058,7 @@ class AbstractHTTPHandler(BaseHandler): if not host: raise URLError('no host given') - h = http_class(host) # will parse host:port + h = http_class(host, timeout=req.timeout) # will parse host:port h.set_debuglevel(self._debuglevel) headers = dict(req.headers) @@ -1269,7 +1270,7 @@ class FTPHandler(BaseHandler): if dirs and not dirs[0]: dirs = dirs[1:] try: - fw = self.connect_ftp(user, passwd, host, port, dirs) + fw = self.connect_ftp(user, passwd, host, port, dirs, req.timeout) type = file and 'I' or 'D' for attr in attrs: attr, value = splitvalue(attr) @@ -1289,8 +1290,8 @@ class FTPHandler(BaseHandler): except ftplib.all_errors, msg: raise IOError, ('ftp error', msg), sys.exc_info()[2] - def connect_ftp(self, user, passwd, host, port, dirs): - fw = ftpwrapper(user, passwd, host, port, dirs) + def connect_ftp(self, user, passwd, host, port, dirs, timeout): + fw = ftpwrapper(user, passwd, host, port, dirs, timeout) ## fw.ftp.set_debuglevel(1) return fw @@ -1310,12 +1311,12 @@ class CacheFTPHandler(FTPHandler): def setMaxConns(self, m): self.max_conns = m - def connect_ftp(self, user, passwd, host, port, dirs): - key = user, host, port, '/'.join(dirs) + def connect_ftp(self, user, passwd, host, port, dirs, timeout): + key = user, host, port, '/'.join(dirs), timeout if key in self.cache: self.timeout[key] = time.time() + self.delay else: - self.cache[key] = ftpwrapper(user, passwd, host, port, dirs) + self.cache[key] = ftpwrapper(user, passwd, host, port, dirs, timeout) self.timeout[key] = time.time() + self.delay self.check_cache() return self.cache[key] |