Author: gregory.p.smith Date: Mon Sep 10 01:55:55 2007 New Revision: 58068 Modified: python/branches/py3k/Doc/library/exceptions.rst python/branches/py3k/Doc/library/socket.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Lib/test/test_urllib2net.py python/branches/py3k/Lib/urllib2.py python/branches/py3k/Modules/socketmodule.c Log: merge this from trunk:
r58067 | gregory.p.smith | 2007-09-09 16:36:46 -0700 (Sun, 09 Sep 2007) | 22 lin es Change socket.error to inherit from IOError rather than being a stand alone class. This addresses the primary concern in http://bugs.python.org/issue1706815 python-dev discussion here: http://mail.python.org/pipermail/python-dev/2007-July/073749.html I chose IOError rather than EnvironmentError as the base class since socket objects are often used as transparent duck typed file objects in code already prepared to deal with IOError exceptions. also a minor fix: urllib2 - fix a couple places where IOError was raised rather than URLError. for better or worse, URLError already inherits from IOError so this won't break any existing code. test_urllib2net - replace bad ftp urls. Modified: python/branches/py3k/Doc/library/exceptions.rst ============================================================================== --- python/branches/py3k/Doc/library/exceptions.rst (original) +++ python/branches/py3k/Doc/library/exceptions.rst Mon Sep 10 01:55:55 2007 @@ -147,6 +147,9 @@ This class is derived from :exc:`EnvironmentError`. See the discussion above for more information on exception instance attributes. + .. versionchanged:: 2.6 + Changed :exc:`socket.error` to use this as a base class. + .. exception:: ImportError Modified: python/branches/py3k/Doc/library/socket.rst ============================================================================== --- python/branches/py3k/Doc/library/socket.rst (original) +++ python/branches/py3k/Doc/library/socket.rst Mon Sep 10 01:55:55 2007 @@ -85,6 +85,9 @@ accompanying :exc:`os.error`. See the module :mod:`errno`, which contains names for the error codes defined by the underlying operating system. + .. versionchanged:: 2.6 + :exc:`socket.error` is now a child class of :exc:`IOError`. + .. exception:: herror Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Mon Sep 10 01:55:55 2007 @@ -282,7 +282,8 @@ This section lists previously described changes that may require changes to your code: -* Everything is all in the details! +* The :mod:`socket` module exception :exc:`socket.error` now inherits from + :exc:`IOError`. .. % ====================================================================== Modified: python/branches/py3k/Lib/test/test_urllib2net.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllib2net.py (original) +++ python/branches/py3k/Lib/test/test_urllib2net.py Mon Sep 10 01:55:55 2007 @@ -164,8 +164,9 @@ def test_ftp(self): urls = [ - 'ftp://www.python.org/pub/python/misc/sousa.au', - 'ftp://www.python.org/pub/tmp/blat', + 'ftp://ftp.kernel.org/pub/linux/kernel/README', + 'ftp://ftp.kernel.org/pub/linux/kernel/non-existant-file', + #'ftp://ftp.kernel.org/pub/leenox/kernel/test', 'ftp://gatekeeper.research.compaq.com/pub/DEC/SRC' '/research-reports/00README-Legal-Rules-Regs', ] @@ -179,10 +180,7 @@ f.close() urls = [ 'file:'+sanepathname2url(os.path.abspath(TESTFN)), - - # XXX bug, should raise URLError - #('file://nonsensename/etc/passwd', None, urllib2.URLError) - ('file://nonsensename/etc/passwd', None, (EnvironmentError, socket.error)) + ('file:///nonsensename/etc/passwd', None, urllib2.URLError), ] self._test_urls(urls, self._extra_handlers()) finally: @@ -242,11 +240,11 @@ debug(url) try: f = urllib2.urlopen(url, req) - except (IOError, socket.error, OSError) as err: + except EnvironmentError as err: debug(err) if expected_err: - msg = ("Didn't get expected error(s) %s for %s %s, got %s" % - (expected_err, url, req, err)) + msg = ("Didn't get expected error(s) %s for %s %s, got %s: %s" % + (expected_err, url, req, type(err), err)) self.assert_(isinstance(err, expected_err), msg) else: with test_support.transient_internet(): Modified: python/branches/py3k/Lib/urllib2.py ============================================================================== --- python/branches/py3k/Lib/urllib2.py (original) +++ python/branches/py3k/Lib/urllib2.py Mon Sep 10 01:55:55 2007 @@ -1240,7 +1240,7 @@ import mimetypes host = req.get_host() if not host: - raise IOError('ftp error', 'no host given') + raise URLError('ftp error', 'no host given') host, port = splitport(host) if port is None: port = ftplib.FTP_PORT @@ -1286,7 +1286,7 @@ headers = mimetools.Message(sf) return addinfourl(fp, headers, req.get_full_url()) except ftplib.all_errors as msg: - raise IOError('ftp error', msg).with_traceback(sys.exc_info()[2]) + raise URLError('ftp error', msg).with_traceback(sys.exc_info()[2]) def connect_ftp(self, user, passwd, host, port, dirs, timeout): fw = ftpwrapper(user, passwd, host, port, dirs, timeout) Modified: python/branches/py3k/Modules/socketmodule.c ============================================================================== --- python/branches/py3k/Modules/socketmodule.c (original) +++ python/branches/py3k/Modules/socketmodule.c Mon Sep 10 01:55:55 2007 @@ -4035,7 +4035,8 @@ if (m == NULL) return; - socket_error = PyErr_NewException("socket.error", NULL, NULL); + socket_error = PyErr_NewException("socket.error", + PyExc_IOError, NULL); if (socket_error == NULL) return; PySocketModuleAPI.error = socket_error; _______________________________________________ Python-3000-checkins mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000-checkins
