From 1f3b4e12e8ba9cd896625ba02ea1ab6849ca3a07 Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Sun, 7 Mar 2010 12:14:25 +0000 Subject: Fix some py3k warnings in the standard library. --- Lib/_pyio.py | 17 +++++++++++++---- Lib/calendar.py | 4 ++++ Lib/ctypes/test/test_callbacks.py | 4 ++-- Lib/distutils/util.py | 2 +- Lib/shutil.py | 3 ++- Lib/test/test_calendar.py | 8 +++----- Lib/test/test_memoryio.py | 8 ++------ Lib/unittest/case.py | 37 +++++++++++++++++-------------------- Lib/warnings.py | 2 +- 9 files changed, 45 insertions(+), 40 deletions(-) diff --git a/Lib/_pyio.py b/Lib/_pyio.py index a1c21d3..8098681 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -839,8 +839,8 @@ class BytesIO(BufferedIOBase): if self.closed: raise ValueError("seek on closed file") try: - pos = pos.__index__() - except AttributeError as err: + pos.__index__ + except AttributeError: raise TypeError("an integer is required") if whence == 0: if pos < 0: @@ -864,8 +864,13 @@ class BytesIO(BufferedIOBase): raise ValueError("truncate on closed file") if pos is None: pos = self._pos - elif pos < 0: - raise ValueError("negative truncate position %r" % (pos,)) + else: + try: + pos.__index__ + except AttributeError: + raise TypeError("an integer is required") + if pos < 0: + raise ValueError("negative truncate position %r" % (pos,)) del self._buffer[pos:] return pos @@ -1813,6 +1818,10 @@ class TextIOWrapper(TextIOBase): if n is None: n = -1 decoder = self._decoder or self._get_decoder() + try: + n.__index__ + except AttributeError: + raise TypeError("an integer is required") if n < 0: # Read everything. result = (self._get_decoded_chars() + diff --git a/Lib/calendar.py b/Lib/calendar.py index ab14c7d..2e45e24 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -564,6 +564,10 @@ c = TextCalendar() firstweekday = c.getfirstweekday def setfirstweekday(firstweekday): + try: + firstweekday.__index__ + except AttributeError: + raise IllegalWeekdayError(firstweekday) if not MONDAY <= firstweekday <= SUNDAY: raise IllegalWeekdayError(firstweekday) c.firstweekday = firstweekday diff --git a/Lib/ctypes/test/test_callbacks.py b/Lib/ctypes/test/test_callbacks.py index 6f517b1..c758d56 100644 --- a/Lib/ctypes/test/test_callbacks.py +++ b/Lib/ctypes/test/test_callbacks.py @@ -132,7 +132,7 @@ class Callbacks(unittest.TestCase): gc.collect() live = [x for x in gc.get_objects() if isinstance(x, X)] - self.failUnlessEqual(len(live), 0) + self.assertEqual(len(live), 0) try: WINFUNCTYPE @@ -164,7 +164,7 @@ class SampleCallbacksTestCase(unittest.TestCase): result = integrate(0.0, 1.0, CALLBACK(func), 10) diff = abs(result - 1./3.) - self.assertTrue(diff < 0.01, "%s not less than 0.01" % diff) + self.assertLess(diff, 0.01, "%s not less than 0.01" % diff) ################################################################ diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py index 36ac721..1a55f70 100644 --- a/Lib/distutils/util.py +++ b/Lib/distutils/util.py @@ -406,7 +406,7 @@ def execute (func, args, msg=None, verbose=0, dry_run=0): log.info(msg) if not dry_run: - apply(func, args) + func(*args) def strtobool (val): diff --git a/Lib/shutil.py b/Lib/shutil.py index 0cc9262..df571e7 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -10,6 +10,7 @@ import stat from os.path import abspath import fnmatch from warnings import warn +import collections try: from pwd import getpwnam @@ -500,7 +501,7 @@ def register_archive_format(name, function, extra_args=None, description=''): """ if extra_args is None: extra_args = [] - if not callable(function): + if not isinstance(function, collections.Callable): raise TypeError('The %s object is not callable' % function) if not isinstance(extra_args, (tuple, list)): raise TypeError('extra_args needs to be a sequence') diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py index 39d4fe8..fad517c 100644 --- a/Lib/test/test_calendar.py +++ b/Lib/test/test_calendar.py @@ -212,11 +212,9 @@ class CalendarTestCase(unittest.TestCase): self.assertEqual(calendar.isleap(2003), 0) def test_setfirstweekday(self): - # Silence a py3k warning claiming to affect Lib/calendar.py - with test_support.check_warnings(): - self.assertRaises(ValueError, calendar.setfirstweekday, 'flabber') - self.assertRaises(ValueError, calendar.setfirstweekday, -1) - self.assertRaises(ValueError, calendar.setfirstweekday, 200) + self.assertRaises(ValueError, calendar.setfirstweekday, 'flabber') + self.assertRaises(ValueError, calendar.setfirstweekday, -1) + self.assertRaises(ValueError, calendar.setfirstweekday, 200) orig = calendar.firstweekday() calendar.setfirstweekday(calendar.SUNDAY) self.assertEqual(calendar.firstweekday(), calendar.SUNDAY) diff --git a/Lib/test/test_memoryio.py b/Lib/test/test_memoryio.py index 13fa826..2b4c76e 100644 --- a/Lib/test/test_memoryio.py +++ b/Lib/test/test_memoryio.py @@ -133,9 +133,7 @@ class MemoryTestMixin: pos = memio.tell() self.assertEqual(memio.truncate(None), pos) self.assertEqual(memio.tell(), pos) - # Silence a py3k warning - with support.check_warnings(): - self.assertRaises(TypeError, memio.truncate, '0') + self.assertRaises(TypeError, memio.truncate, '0') memio.close() self.assertRaises(ValueError, memio.truncate, 0) @@ -172,9 +170,7 @@ class MemoryTestMixin: self.assertEqual(type(memio.read()), type(buf)) memio.seek(0) self.assertEqual(memio.read(None), buf) - # Silence a py3k warning - with support.check_warnings(): - self.assertRaises(TypeError, memio.read, '') + self.assertRaises(TypeError, memio.read, '') memio.close() self.assertRaises(ValueError, memio.read) diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 88d1bec..aacd67c 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -774,26 +774,23 @@ class TestCase(object): set(actual))`` but it works with sequences of unhashable objects as well. """ - try: - expected = set(expected_seq) - actual = set(actual_seq) - missing = list(expected.difference(actual)) - unexpected = list(actual.difference(expected)) - missing.sort() - unexpected.sort() - except TypeError: - # Fall back to slower list-compare if any of the objects are - # not hashable. - expected = list(expected_seq) - actual = list(actual_seq) - with warnings.catch_warnings(): - if sys.py3kwarning: - # Silence Py3k warning - warnings.filterwarnings("ignore", - "dict inequality comparisons " - "not supported", DeprecationWarning) - expected.sort() - actual.sort() + with warnings.catch_warnings(): + if sys.py3kwarning: + # Silence Py3k warning raised during the sorting + for msg in ["dict inequality comparisons", + "builtin_function_or_method order comparisons", + "comparing unequal types"]: + warnings.filterwarnings("ignore", msg, DeprecationWarning) + try: + expected = set(expected_seq) + actual = set(actual_seq) + missing = sorted(expected.difference(actual)) + unexpected = sorted(actual.difference(expected)) + except TypeError: + # Fall back to slower list-compare if any of the objects are + # not hashable. + expected = sorted(expected_seq) + actual = sorted(actual_seq) missing, unexpected = sorted_list_difference(expected, actual) errors = [] if missing: diff --git a/Lib/warnings.py b/Lib/warnings.py index 70b3d43..134ba13 100644 --- a/Lib/warnings.py +++ b/Lib/warnings.py @@ -29,7 +29,7 @@ def _show_warning(message, category, filename, lineno, file=None, line=None): file.write(formatwarning(message, category, filename, lineno, line)) except IOError: pass # the file (probably stderr) is invalid - this warning gets lost. -# Keep a worrking version around in case the deprecation of the old API is +# Keep a working version around in case the deprecation of the old API is # triggered. showwarning = _show_warning -- cgit v0.12