From b9d4963a989accce30234b7b74bce874c0142209 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Mon, 4 Jan 2010 23:22:44 +0000 Subject: Issue #7092: Fix the DeprecationWarnings emitted by the standard library when using the -3 flag. Patch by Florent Xicluna. --- Lib/binhex.py | 3 ++- Lib/bsddb/__init__.py | 2 +- Lib/compiler/ast.py | 58 +++++++++++++++++++++---------------------- Lib/compiler/pycodegen.py | 4 +-- Lib/dbhash.py | 2 +- Lib/formatter.py | 3 ++- Lib/imputil.py | 3 ++- Lib/lib2to3/pgen2/tokenize.py | 4 ++- Lib/mailbox.py | 8 +++++- Lib/pprint.py | 17 +++++++++---- Lib/pstats.py | 4 +-- Lib/sets.py | 44 ++++++++------------------------ Lib/sunau.py | 3 ++- Lib/unittest/case.py | 12 ++++++--- Lib/wave.py | 3 ++- Lib/webbrowser.py | 2 +- Misc/NEWS | 3 +++ Tools/compiler/astgen.py | 12 ++++++--- 18 files changed, 99 insertions(+), 88 deletions(-) diff --git a/Lib/binhex.py b/Lib/binhex.py index 9059880..bd4e8b3 100644 --- a/Lib/binhex.py +++ b/Lib/binhex.py @@ -170,7 +170,8 @@ class _Rlecoderengine: del self.ofp class BinHex: - def __init__(self, (name, finfo, dlen, rlen), ofp): + def __init__(self, name_finfo_dlen_rlen, ofp): + name, finfo, dlen, rlen = name_finfo_dlen_rlen if type(ofp) == type(''): ofname = ofp ofp = open(ofname, 'w') diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py index 0af679f..07c7c9d 100644 --- a/Lib/bsddb/__init__.py +++ b/Lib/bsddb/__init__.py @@ -44,7 +44,7 @@ absolute_import = (sys.version_info[0] >= 3) if sys.py3kwarning: import warnings - warnings.warnpy3k("in 3.x, bsddb has been removed; " + warnings.warnpy3k("in 3.x, the bsddb module has been removed; " "please use the pybsddb project instead", DeprecationWarning, 2) diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py index 43b1659..f923077 100644 --- a/Lib/compiler/ast.py +++ b/Lib/compiler/ast.py @@ -51,9 +51,9 @@ class Expression(Node): return "Expression(%s)" % (repr(self.node)) class Add(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -431,9 +431,9 @@ class Discard(Node): return "Discard(%s)" % (repr(self.expr),) class Div(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -485,9 +485,9 @@ class Exec(Node): return "Exec(%s, %s, %s)" % (repr(self.expr), repr(self.locals), repr(self.globals)) class FloorDiv(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -560,7 +560,6 @@ class Function(Node): self.kwargs = 1 - def getChildren(self): children = [] children.append(self.decorators) @@ -590,6 +589,7 @@ class GenExpr(Node): self.argnames = ['.0'] self.varargs = self.kwargs = None + def getChildren(self): return self.code, @@ -607,7 +607,6 @@ class GenExprFor(Node): self.lineno = lineno self.is_outmost = False - def getChildren(self): children = [] children.append(self.assign) @@ -784,7 +783,6 @@ class Lambda(Node): self.kwargs = 1 - def getChildren(self): children = [] children.append(self.argnames) @@ -803,9 +801,9 @@ class Lambda(Node): return "Lambda(%s, %s, %s, %s)" % (repr(self.argnames), repr(self.defaults), repr(self.flags), repr(self.code)) class LeftShift(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -893,9 +891,9 @@ class ListCompIf(Node): return "ListCompIf(%s)" % (repr(self.test),) class Mod(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -923,9 +921,9 @@ class Module(Node): return "Module(%s, %s)" % (repr(self.doc), repr(self.node)) class Mul(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -995,9 +993,9 @@ class Pass(Node): return "Pass()" class Power(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -1095,9 +1093,9 @@ class Return(Node): return "Return(%s)" % (repr(self.value),) class RightShift(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): @@ -1170,9 +1168,9 @@ class Stmt(Node): return "Stmt(%s)" % (repr(self.nodes),) class Sub(Node): - def __init__(self, (left, right), lineno=None): - self.left = left - self.right = right + def __init__(self, leftright, lineno=None): + self.left = leftright[0] + self.right = leftright[1] self.lineno = lineno def getChildren(self): diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py index 81234d1..960c4fc 100644 --- a/Lib/compiler/pycodegen.py +++ b/Lib/compiler/pycodegen.py @@ -870,10 +870,10 @@ class CodeGenerator: level = node.level if level == 0 and not self.graph.checkFlag(CO_FUTURE_ABSIMPORT): level = -1 - fromlist = map(lambda (name, alias): name, node.names) + fromlist = tuple(name for (name, alias) in node.names) if VERSION > 1: self.emit('LOAD_CONST', level) - self.emit('LOAD_CONST', tuple(fromlist)) + self.emit('LOAD_CONST', fromlist) self.emit('IMPORT_NAME', node.modname) for name, alias in node.names: if VERSION > 1: diff --git a/Lib/dbhash.py b/Lib/dbhash.py index 5ca0bc1..77a878e 100644 --- a/Lib/dbhash.py +++ b/Lib/dbhash.py @@ -3,7 +3,7 @@ import sys if sys.py3kwarning: import warnings - warnings.warnpy3k("in 3.x, dbhash has been removed", DeprecationWarning, 2) + warnings.warnpy3k("in 3.x, the dbhash module has been removed", DeprecationWarning, 2) try: import bsddb except ImportError: diff --git a/Lib/formatter.py b/Lib/formatter.py index 834b560..e0a8fe1 100644 --- a/Lib/formatter.py +++ b/Lib/formatter.py @@ -228,7 +228,8 @@ class AbstractFormatter: self.align = None self.writer.new_alignment(None) - def push_font(self, (size, i, b, tt)): + def push_font(self, font): + size, i, b, tt = font if self.softspace: self.hard_break = self.para_end = self.softspace = 0 self.nospace = 1 diff --git a/Lib/imputil.py b/Lib/imputil.py index a907287..600cfa5 100644 --- a/Lib/imputil.py +++ b/Lib/imputil.py @@ -281,7 +281,8 @@ class Importer: setattr(parent, modname, module) return module - def _process_result(self, (ispkg, code, values), fqname): + def _process_result(self, result, fqname): + ispkg, code, values = result # did get_code() return an actual module? (rather than a code object) is_module = isinstance(code, _ModuleType) diff --git a/Lib/lib2to3/pgen2/tokenize.py b/Lib/lib2to3/pgen2/tokenize.py index 163c561..e0f45f9 100644 --- a/Lib/lib2to3/pgen2/tokenize.py +++ b/Lib/lib2to3/pgen2/tokenize.py @@ -144,7 +144,9 @@ class TokenError(Exception): pass class StopTokenizing(Exception): pass -def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing +def printtoken(type, token, start, end, line): # for testing + (srow, scol) = start + (erow, ecol) = end print "%d,%d-%d,%d:\t%s\t%s" % \ (srow, scol, erow, ecol, tok_name[type], repr(token)) diff --git a/Lib/mailbox.py b/Lib/mailbox.py index 74359b7..4da5569 100755 --- a/Lib/mailbox.py +++ b/Lib/mailbox.py @@ -18,7 +18,6 @@ import copy import email import email.message import email.generator -import rfc822 import StringIO try: if sys.platform == 'os2emx': @@ -28,6 +27,13 @@ try: except ImportError: fcntl = None +import warnings +with warnings.catch_warnings(): + if sys.py3kwarning: + warnings.filterwarnings("ignore", ".*rfc822 has been removed", + DeprecationWarning) + import rfc822 + __all__ = [ 'Mailbox', 'Maildir', 'mbox', 'MH', 'Babyl', 'MMDF', 'Message', 'MaildirMessage', 'mboxMessage', 'MHMessage', 'BabylMessage', 'MMDFMessage', 'UnixMailbox', diff --git a/Lib/pprint.py b/Lib/pprint.py index c48465b..910283e 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -35,6 +35,7 @@ saferepr() """ import sys as _sys +import warnings from cStringIO import StringIO as _StringIO @@ -70,6 +71,13 @@ def isrecursive(object): """Determine if object requires a recursive representation.""" return _safe_repr(object, {}, None, 0)[2] +def _sorted(iterable): + with warnings.catch_warnings(): + if _sys.py3kwarning: + warnings.filterwarnings("ignore", "comparing unequal types " + "not supported", DeprecationWarning) + return sorted(iterable) + class PrettyPrinter: def __init__(self, indent=1, width=80, depth=None, stream=None): """Handle pretty printing operations onto a stream using a set of @@ -144,8 +152,7 @@ class PrettyPrinter: if length: context[objid] = 1 indent = indent + self._indent_per_level - items = object.items() - items.sort() + items = _sorted(object.items()) key, ent = items[0] rep = self._repr(key, context, level) write(rep) @@ -181,7 +188,7 @@ class PrettyPrinter: return write('set([') endchar = '])' - object = sorted(object) + object = _sorted(object) indent += 4 elif issubclass(typ, frozenset): if not length: @@ -189,7 +196,7 @@ class PrettyPrinter: return write('frozenset([') endchar = '])' - object = sorted(object) + object = _sorted(object) indent += 10 else: write('(') @@ -274,7 +281,7 @@ def _safe_repr(object, context, maxlevels, level): append = components.append level += 1 saferepr = _safe_repr - for k, v in sorted(object.items()): + for k, v in _sorted(object.items()): krepr, kreadable, krecur = saferepr(k, context, maxlevels, level) vrepr, vreadable, vrecur = saferepr(v, context, maxlevels, level) append("%s: %s" % (krepr, vrepr)) diff --git a/Lib/pstats.py b/Lib/pstats.py index a6844fb..6beb0b3 100644 --- a/Lib/pstats.py +++ b/Lib/pstats.py @@ -442,12 +442,12 @@ class Stats: if nc == 0: print >> self.stream, ' '*8, else: - print >> self.stream, f8(tt/nc), + print >> self.stream, f8(float(tt)/nc), print >> self.stream, f8(ct), if cc == 0: print >> self.stream, ' '*8, else: - print >> self.stream, f8(ct/cc), + print >> self.stream, f8(float(ct)/cc), print >> self.stream, func_std_string(func) class TupleComp: diff --git a/Lib/sets.py b/Lib/sets.py index b1743da..fe31a0b 100644 --- a/Lib/sets.py +++ b/Lib/sets.py @@ -54,29 +54,7 @@ what's tested is actually `z in y'. # - Raymond Hettinger added a number of speedups and other # improvements. -from __future__ import generators -try: - from itertools import ifilter, ifilterfalse -except ImportError: - # Code to make the module run under Py2.2 - def ifilter(predicate, iterable): - if predicate is None: - def predicate(x): - return x - for x in iterable: - if predicate(x): - yield x - def ifilterfalse(predicate, iterable): - if predicate is None: - def predicate(x): - return x - for x in iterable: - if not predicate(x): - yield x - try: - True, False - except NameError: - True, False = (0==0, 0!=0) +from itertools import ifilter, ifilterfalse __all__ = ['BaseSet', 'Set', 'ImmutableSet'] @@ -235,7 +213,7 @@ class BaseSet(object): little, big = self, other else: little, big = other, self - common = ifilter(big._data.has_key, little) + common = ifilter(big._data.__contains__, little) return self.__class__(common) def __xor__(self, other): @@ -260,9 +238,9 @@ class BaseSet(object): otherdata = other._data except AttributeError: otherdata = Set(other)._data - for elt in ifilterfalse(otherdata.has_key, selfdata): + for elt in ifilterfalse(otherdata.__contains__, selfdata): data[elt] = value - for elt in ifilterfalse(selfdata.has_key, otherdata): + for elt in ifilterfalse(selfdata.__contains__, otherdata): data[elt] = value return result @@ -287,7 +265,7 @@ class BaseSet(object): except AttributeError: otherdata = Set(other)._data value = True - for elt in ifilterfalse(otherdata.has_key, self): + for elt in ifilterfalse(otherdata.__contains__, self): data[elt] = value return result @@ -313,7 +291,7 @@ class BaseSet(object): self._binary_sanity_check(other) if len(self) > len(other): # Fast check for obvious cases return False - for elt in ifilterfalse(other._data.has_key, self): + for elt in ifilterfalse(other._data.__contains__, self): return False return True @@ -322,7 +300,7 @@ class BaseSet(object): self._binary_sanity_check(other) if len(self) < len(other): # Fast check for obvious cases return False - for elt in ifilterfalse(self._data.has_key, other): + for elt in ifilterfalse(self._data.__contains__, other): return False return True @@ -338,6 +316,9 @@ class BaseSet(object): self._binary_sanity_check(other) return len(self) > len(other) and self.issuperset(other) + # We inherit object.__hash__, so we must deny this explicitly + __hash__ = None + # Assorted helpers def _binary_sanity_check(self, other): @@ -439,9 +420,6 @@ class Set(BaseSet): def __setstate__(self, data): self._data, = data - # We inherit object.__hash__, so we must deny this explicitly - __hash__ = None - # In-place union, intersection, differences. # Subtle: The xyz_update() functions deliberately return None, # as do all mutating operations on built-in container types. @@ -503,7 +481,7 @@ class Set(BaseSet): other = Set(other) if self is other: self.clear() - for elt in ifilter(data.has_key, other): + for elt in ifilter(data.__contains__, other): del data[elt] # Python dict-like mass mutations: update, clear diff --git a/Lib/sunau.py b/Lib/sunau.py index 0a40295..a04d8c0 100644 --- a/Lib/sunau.py +++ b/Lib/sunau.py @@ -364,7 +364,8 @@ class Au_write: else: return 'not compressed' - def setparams(self, (nchannels, sampwidth, framerate, nframes, comptype, compname)): + def setparams(self, params): + nchannels, sampwidth, framerate, nframes, comptype, compname = params self.setnchannels(nchannels) self.setsampwidth(sampwidth) self.setframerate(framerate) diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 8da5743..2ebf2da 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -746,9 +746,15 @@ class TestCase(object): # not hashable. expected = list(expected_seq) actual = list(actual_seq) - expected.sort() - actual.sort() - missing, unexpected = util.sorted_list_difference(expected, actual) + with warnings.catch_warnings(): + if sys.py3kwarning: + # Silence Py3k warning + warnings.filterwarnings("ignore", + "dict inequality comparisons " + "not supported", DeprecationWarning) + expected.sort() + actual.sort() + missing, unexpected = util.sorted_list_difference(expected, actual) errors = [] if missing: errors.append('Expected, but missing:\n %r' % missing) diff --git a/Lib/wave.py b/Lib/wave.py index b993b40..718e1eb 100644 --- a/Lib/wave.py +++ b/Lib/wave.py @@ -384,7 +384,8 @@ class Wave_write: def getcompname(self): return self._compname - def setparams(self, (nchannels, sampwidth, framerate, nframes, comptype, compname)): + def setparams(self, params): + nchannels, sampwidth, framerate, nframes, comptype, compname = params if self._datawritten: raise Error, 'cannot change parameters after starting to write' self.setnchannels(nchannels) diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 74f0270..01922f4 100644 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -650,7 +650,7 @@ def main(): for o, a in opts: if o == '-n': new_win = 1 elif o == '-t': new_win = 2 - if len(args) <> 1: + if len(args) != 1: print >>sys.stderr, usage sys.exit(1) diff --git a/Misc/NEWS b/Misc/NEWS index 06fb9ee..274b150 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -65,6 +65,9 @@ Core and Builtins Library ------- +- Issue #7092: Fix the DeprecationWarnings emitted by the standard library + when using the -3 flag. Patch by Florent Xicluna. + - Issue #7471: Improve the performance of GzipFile's buffering mechanism, and make it implement the `io.BufferedIOBase` ABC to allow for further speedups by wrapping it in an `io.BufferedReader`. Patch by Nir Aides. diff --git a/Tools/compiler/astgen.py b/Tools/compiler/astgen.py index c431d22..1724276 100644 --- a/Tools/compiler/astgen.py +++ b/Tools/compiler/astgen.py @@ -105,12 +105,18 @@ class NodeInfo: def _gen_init(self, buf): if self.args: - print >> buf, " def __init__(self, %s, lineno=None):" % self.args + argtuple = '(' in self.args + args = self.args if not argtuple else ''.join(self.argnames) + print >> buf, " def __init__(self, %s, lineno=None):" % args else: print >> buf, " def __init__(self, lineno=None):" if self.argnames: - for name in self.argnames: - print >> buf, " self.%s = %s" % (name, name) + if argtuple: + for idx, name in enumerate(self.argnames): + print >> buf, " self.%s = %s[%s]" % (name, args, idx) + else: + for name in self.argnames: + print >> buf, " self.%s = %s" % (name, name) print >> buf, " self.lineno = lineno" # Copy the lines in self.init, indented four spaces. The rstrip() # business is to get rid of the four spaces if line happens to be -- cgit v0.12