diff options
author | Guido van Rossum <guido@python.org> | 2007-05-15 18:46:22 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-05-15 18:46:22 (GMT) |
commit | 1bc535dc7854b6be009a6bf3413a3a470e3fe749 (patch) | |
tree | 7a43646468849a9ae624bd4314ff26b7b0e30f21 /Lib | |
parent | 360e4b8fb19f34360093bc15ef9aad13115a6069 (diff) | |
download | cpython-1bc535dc7854b6be009a6bf3413a3a470e3fe749.zip cpython-1bc535dc7854b6be009a6bf3413a3a470e3fe749.tar.gz cpython-1bc535dc7854b6be009a6bf3413a3a470e3fe749.tar.bz2 |
Merged revisions 55328-55341 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
........
r55329 | brett.cannon | 2007-05-14 16:36:56 -0700 (Mon, 14 May 2007) | 3 lines
Implement the removal of tuple parameter unpacking (PEP 3113).
Thanks, Tony Lownds for the patch.
........
r55331 | neal.norwitz | 2007-05-14 16:40:30 -0700 (Mon, 14 May 2007) | 1 line
Update to use Python 3.0
........
r55332 | brett.cannon | 2007-05-14 16:47:18 -0700 (Mon, 14 May 2007) | 2 lines
Mention PEP 3113. And thanks to Tony Lownds for the PEP 3113 patch.
........
r55333 | neal.norwitz | 2007-05-14 16:57:06 -0700 (Mon, 14 May 2007) | 1 line
Fix exception printing (no more exceptions module)
........
r55334 | neal.norwitz | 2007-05-14 17:11:10 -0700 (Mon, 14 May 2007) | 1 line
Remove popen* functions from os
........
r55335 | neal.norwitz | 2007-05-14 18:03:38 -0700 (Mon, 14 May 2007) | 1 line
Get rid of most of popen. There are still some uses I need to cleanup.
........
r55336 | neal.norwitz | 2007-05-14 21:11:34 -0700 (Mon, 14 May 2007) | 1 line
Remove a few more remnants of the compiler package
........
r55337 | neal.norwitz | 2007-05-14 22:28:27 -0700 (Mon, 14 May 2007) | 1 line
Get test_[cx]pickle working on 64-bit platforms (avoid overflow int/long)
........
Diffstat (limited to 'Lib')
36 files changed, 107 insertions, 645 deletions
diff --git a/Lib/aifc.py b/Lib/aifc.py index bc82f48..4e88256 100644 --- a/Lib/aifc.py +++ b/Lib/aifc.py @@ -665,7 +665,8 @@ class Aifc_write: ## raise Error, 'cannot change parameters after starting to write' ## self._version = version - def setparams(self, (nchannels, sampwidth, framerate, nframes, comptype, compname)): + def setparams(self, params): + nchannels, sampwidth, framerate, nframes, comptype, compname = params if self._nframeswritten: raise Error, 'cannot change parameters after starting to write' if comptype not in ('NONE', 'ULAW', 'ALAW', 'G722'): @@ -151,7 +151,7 @@ class Bdb: """This method is called when a return trap is set here.""" pass - def user_exception(self, frame, (exc_type, exc_value, exc_traceback)): + def user_exception(self, frame, exc_info): """This method is called if an exception occurs, but only if we are to stop at or just below this level.""" pass diff --git a/Lib/binhex.py b/Lib/binhex.py index 0f3e3c4..69ac097 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/cgitb.py b/Lib/cgitb.py index 19118ea..3f36ab1 100644 --- a/Lib/cgitb.py +++ b/Lib/cgitb.py @@ -94,10 +94,11 @@ def scanvars(reader, frame, locals): lasttoken = token return vars -def html((etype, evalue, etb), context=5): +def html(einfo, context=5): """Return a nice HTML document describing a given traceback.""" import os, types, time, traceback, linecache, inspect, pydoc + etype, evalue, etb = einfo if type(etype) is types.ClassType: etype = etype.__name__ pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable @@ -184,10 +185,11 @@ function calls leading up to the error, in the order they occurred.</p>''' --> ''' % ''.join(traceback.format_exception(etype, evalue, etb)) -def text((etype, evalue, etb), context=5): +def text(einfo, context=5): """Return a plain text document describing a given traceback.""" import os, types, time, traceback, linecache, inspect, pydoc + etype, evalue, etb = einfo if type(etype) is types.ClassType: etype = etype.__name__ pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable diff --git a/Lib/formatter.py b/Lib/formatter.py index 50a9cd8..99b4740 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/idlelib/CallTips.py b/Lib/idlelib/CallTips.py index 9152eaa..6f362f9 100644 --- a/Lib/idlelib/CallTips.py +++ b/Lib/idlelib/CallTips.py @@ -183,7 +183,6 @@ if __name__=='__main__': def t4(*args): "(...)" def t5(a, *args): "(a, ...)" def t6(a, b=None, *args, **kw): "(a, b=None, ..., ***)" - def t7((a, b), c, (d, e)): "(<tuple>, c, <tuple>)" class TC(object): "(ai=None, ...)" @@ -194,7 +193,6 @@ if __name__=='__main__': def t4(self, *args): "(...)" def t5(self, ai, *args): "(ai, ...)" def t6(self, ai, b=None, *args, **kw): "(ai, b=None, ..., ***)" - def t7(self, (ai, b), c, (d, e)): "(<tuple>, c, <tuple>)" def test(tests): ct = CallTips() @@ -215,7 +213,7 @@ if __name__=='__main__': print("%d of %d tests failed" % (len(failed), len(tests))) tc = TC() - tests = (t1, t2, t3, t4, t5, t6, t7, - TC, tc.t1, tc.t2, tc.t3, tc.t4, tc.t5, tc.t6, tc.t7) + tests = (t1, t2, t3, t4, t5, t6, + TC, tc.t1, tc.t2, tc.t3, tc.t4, tc.t5, tc.t6) test(tests) diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py index df691ed..3dbe23d 100644 --- a/Lib/idlelib/Debugger.py +++ b/Lib/idlelib/Debugger.py @@ -253,7 +253,8 @@ class Debugger: if self.vsource.get(): self.sync_source_line() - def show_frame(self, (frame, lineno)): + def show_frame(self, stackitem): + frame, lineno = stackitem self.frame = frame self.show_variables() diff --git a/Lib/imputil.py b/Lib/imputil.py index 88d288f..213799f 100644 --- a/Lib/imputil.py +++ b/Lib/imputil.py @@ -278,7 +278,10 @@ class Importer: setattr(parent, modname, module) return module - def _process_result(self, (ispkg, code, values), fqname): + def _process_result(self, result, fqname): + # unpack result + 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/inspect.py b/Lib/inspect.py index ff25be7..d2546f1 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -366,8 +366,8 @@ def getfile(object): def getmoduleinfo(path): """Get the module name, suffix, mode, and module type for a given file.""" filename = os.path.basename(path) - suffixes = map(lambda (suffix, mode, mtype): - (-len(suffix), suffix, mode, mtype), imp.get_suffixes()) + suffixes = [(-len(suffix), suffix, mode, mtype) + for suffix, mode, mtype in imp.get_suffixes()] suffixes.sort() # try longest suffixes first, in case they overlap for neglen, suffix, mode, mtype in suffixes: if filename[neglen:] == suffix: @@ -568,7 +568,7 @@ class BlockFinder: self.passline = False self.last = 1 - def tokeneater(self, type, token, (srow, scol), (erow, ecol), line): + def tokeneater(self, type, token, srowcol, erowcol, line): if not self.started: # look for the first "def", "class" or "lambda" if token in ("def", "class", "lambda"): @@ -578,7 +578,7 @@ class BlockFinder: self.passline = True # skip to the end of the line elif type == tokenize.NEWLINE: self.passline = False # stop skipping when a NEWLINE is seen - self.last = srow + self.last = srowcol[0] if self.islambda: # lambdas always end at the first NEWLINE raise EndOfBlock elif self.passline: @@ -698,40 +698,6 @@ def _getfullargs(co): kwonlyargs = list(names[nargs:nargs+nkwargs]) step = 0 - # The following acrobatics are for anonymous (tuple) arguments. - for i in range(nargs): - if args[i][:1] in ('', '.'): - stack, remain, count = [], [], [] - while step < len(code): - op = ord(code[step]) - step = step + 1 - if op >= dis.HAVE_ARGUMENT: - opname = dis.opname[op] - value = ord(code[step]) + ord(code[step+1])*256 - step = step + 2 - if opname in ('UNPACK_TUPLE', 'UNPACK_SEQUENCE'): - remain.append(value) - count.append(value) - elif opname == 'STORE_FAST': - stack.append(names[value]) - - # Special case for sublists of length 1: def foo((bar)) - # doesn't generate the UNPACK_TUPLE bytecode, so if - # `remain` is empty here, we have such a sublist. - if not remain: - stack[0] = [stack[0]] - break - else: - remain[-1] = remain[-1] - 1 - while remain[-1] == 0: - remain.pop() - size = count.pop() - stack[-size:] = [stack[-size:]] - if not remain: break - remain[-1] = remain[-1] - 1 - if not remain: break - args[i] = stack[0] - nargs += nkwargs varargs = None if co.co_flags & CO_VARARGS: diff --git a/Lib/modulefinder.py b/Lib/modulefinder.py index 5145f72..160e82f 100644 --- a/Lib/modulefinder.py +++ b/Lib/modulefinder.py @@ -279,7 +279,8 @@ class ModuleFinder: self.msgout(3, "import_module ->", m) return m - def load_module(self, fqname, fp, pathname, (suffix, mode, type)): + def load_module(self, fqname, fp, pathname, file_info): + suffix, mode, type = file_info self.msgin(2, "load_module", fqname, fp and "fp", pathname) if type == imp.PKG_DIRECTORY: m = self.load_package(fqname, pathname) @@ -653,68 +653,6 @@ otherwise return -SIG, where SIG is the signal that killed it. """ __all__.extend(["spawnvp", "spawnvpe", "spawnlp", "spawnlpe",]) - -# Supply popen2 etc. (for Unix) -if _exists("fork"): - if not _exists("popen2"): - def popen2(cmd, mode="t", bufsize=-1): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' - may be a sequence, in which case arguments will be passed directly to - the program without shell intervention (as with os.spawnv()). If 'cmd' - is a string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdin, child_stdout) are returned.""" - import warnings - msg = "os.popen2 is deprecated. Use the subprocess module." - warnings.warn(msg, DeprecationWarning, stacklevel=2) - - import subprocess - PIPE = subprocess.PIPE - p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, close_fds=True) - return p.stdin, p.stdout - __all__.append("popen2") - - if not _exists("popen3"): - def popen3(cmd, mode="t", bufsize=-1): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' - may be a sequence, in which case arguments will be passed directly to - the program without shell intervention (as with os.spawnv()). If 'cmd' - is a string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdin, child_stdout, child_stderr) are returned.""" - import warnings - msg = "os.popen3 is deprecated. Use the subprocess module." - warnings.warn(msg, DeprecationWarning, stacklevel=2) - - import subprocess - PIPE = subprocess.PIPE - p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, stderr=PIPE, - close_fds=True) - return p.stdin, p.stdout, p.stderr - __all__.append("popen3") - - if not _exists("popen4"): - def popen4(cmd, mode="t", bufsize=-1): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' - may be a sequence, in which case arguments will be passed directly to - the program without shell intervention (as with os.spawnv()). If 'cmd' - is a string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdin, child_stdout_stderr) are returned.""" - import warnings - msg = "os.popen4 is deprecated. Use the subprocess module." - warnings.warn(msg, DeprecationWarning, stacklevel=2) - - import subprocess - PIPE = subprocess.PIPE - p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, - stdin=PIPE, stdout=PIPE, - stderr=subprocess.STDOUT, close_fds=True) - return p.stdin, p.stdout - __all__.append("popen4") - import copy_reg as _copy_reg def _make_stat_result(tup, dict): @@ -180,13 +180,12 @@ class Pdb(bdb.Bdb, cmd.Cmd): print('--Return--', file=self.stdout) self.interaction(frame, None) - def user_exception(self, frame, (exc_type, exc_value, exc_traceback)): + def user_exception(self, frame, exc_info): """This function is called if an exception occurs, but only if we are to stop at or just below this level.""" + exc_type, exc_value, exc_traceback = exc_info frame.f_locals['__exception__'] = exc_type, exc_value - if type(exc_type) == type(''): - exc_type_name = exc_type - else: exc_type_name = exc_type.__name__ + exc_type_name = exc_type.__name__ print(exc_type_name + ':', _saferepr(exc_value), file=self.stdout) self.interaction(frame, exc_traceback) diff --git a/Lib/plat-irix6/flp.py b/Lib/plat-irix6/flp.py index d150be0..fee0894 100644 --- a/Lib/plat-irix6/flp.py +++ b/Lib/plat-irix6/flp.py @@ -326,7 +326,8 @@ def _parse_object(file): # # External - Create a form an link to an instance variable. # -def create_full_form(inst, (fdata, odatalist)): +def create_full_form(inst, formdata): + fdata, odatalist = formdata form = create_form(fdata) exec('inst.'+fdata.Name+' = form\n') for odata in odatalist: @@ -336,7 +337,8 @@ def create_full_form(inst, (fdata, odatalist)): # External - Merge a form into an existing form in an instance # variable. # -def merge_full_form(inst, form, (fdata, odatalist)): +def merge_full_form(inst, form, formdata): + fdata, odatalist = formdata exec('inst.'+fdata.Name+' = form\n') if odatalist[0].Class != FL.BOX: raise error, 'merge_full_form() expects FL.BOX as first obj' diff --git a/Lib/plat-mac/findertools.py b/Lib/plat-mac/findertools.py index 6c12419..036c5c5 100644 --- a/Lib/plat-mac/findertools.py +++ b/Lib/plat-mac/findertools.py @@ -296,8 +296,9 @@ def location(object, pos=None): return _getlocation(object_alias) return _setlocation(object_alias, pos) -def _setlocation(object_alias, (x, y)): +def _setlocation(object_alias, location): """_setlocation: Set the location of the icon for the object.""" + x, y = location finder = _getfinder() args = {} attrs = {} @@ -438,8 +439,9 @@ def windowsize(folder, size=None): return _getwindowsize(folder_alias) return _setwindowsize(folder_alias, size) -def _setwindowsize(folder_alias, (w, h)): +def _setwindowsize(folder_alias, size): """Set the size of a Finder window for folder to (w, h)""" + w, h = size finder = _getfinder() args = {} attrs = {} @@ -489,8 +491,9 @@ def windowposition(folder, pos=None): pos = (pos.h, pos.v) return _setwindowposition(folder_alias, pos) -def _setwindowposition(folder_alias, (x, y)): +def _setwindowposition(folder_alias, position): """Set the size of a Finder window for folder to (w, h).""" + x, y = position finder = _getfinder() args = {} attrs = {} diff --git a/Lib/popen2.py b/Lib/popen2.py deleted file mode 100644 index 2e25868..0000000 --- a/Lib/popen2.py +++ /dev/null @@ -1,205 +0,0 @@ -"""Spawn a command with pipes to its stdin, stdout, and optionally stderr. - -The normal os.popen(cmd, mode) call spawns a shell command and provides a -file interface to just the input or output of the process depending on -whether mode is 'r' or 'w'. This module provides the functions popen2(cmd) -and popen3(cmd) which return two or three pipes to the spawned command. -""" - -import os -import sys -import warnings -warnings.warn("The popen2 module is deprecated. Use the subprocess module.", - DeprecationWarning, stacklevel=2) - -__all__ = ["popen2", "popen3", "popen4"] - -try: - MAXFD = os.sysconf('SC_OPEN_MAX') -except (AttributeError, ValueError): - MAXFD = 256 - -_active = [] - -def _cleanup(): - for inst in _active[:]: - if inst.poll(_deadstate=sys.maxint) >= 0: - try: - _active.remove(inst) - except ValueError: - # This can happen if two threads create a new Popen instance. - # It's harmless that it was already removed, so ignore. - pass - -class Popen3: - """Class representing a child process. Normally instances are created - by the factory functions popen2() and popen3().""" - - sts = -1 # Child not completed yet - - def __init__(self, cmd, capturestderr=False, bufsize=-1): - """The parameter 'cmd' is the shell command to execute in a - sub-process. On UNIX, 'cmd' may be a sequence, in which case arguments - will be passed directly to the program without shell intervention (as - with os.spawnv()). If 'cmd' is a string it will be passed to the shell - (as with os.system()). The 'capturestderr' flag, if true, specifies - that the object should capture standard error output of the child - process. The default is false. If the 'bufsize' parameter is - specified, it specifies the size of the I/O buffers to/from the child - process.""" - _cleanup() - self.cmd = cmd - p2cread, p2cwrite = os.pipe() - c2pread, c2pwrite = os.pipe() - if capturestderr: - errout, errin = os.pipe() - self.pid = os.fork() - if self.pid == 0: - # Child - os.dup2(p2cread, 0) - os.dup2(c2pwrite, 1) - if capturestderr: - os.dup2(errin, 2) - self._run_child(cmd) - os.close(p2cread) - self.tochild = os.fdopen(p2cwrite, 'w', bufsize) - os.close(c2pwrite) - self.fromchild = os.fdopen(c2pread, 'r', bufsize) - if capturestderr: - os.close(errin) - self.childerr = os.fdopen(errout, 'r', bufsize) - else: - self.childerr = None - - def __del__(self): - # In case the child hasn't been waited on, check if it's done. - self.poll(_deadstate=sys.maxint) - if self.sts < 0: - if _active is not None: - # Child is still running, keep us alive until we can wait on it. - _active.append(self) - - def _run_child(self, cmd): - if isinstance(cmd, basestring): - cmd = ['/bin/sh', '-c', cmd] - for i in range(3, MAXFD): - try: - os.close(i) - except OSError: - pass - try: - os.execvp(cmd[0], cmd) - finally: - os._exit(1) - - def poll(self, _deadstate=None): - """Return the exit status of the child process if it has finished, - or -1 if it hasn't finished yet.""" - if self.sts < 0: - try: - pid, sts = os.waitpid(self.pid, os.WNOHANG) - # pid will be 0 if self.pid hasn't terminated - if pid == self.pid: - self.sts = sts - except os.error: - if _deadstate is not None: - self.sts = _deadstate - return self.sts - - def wait(self): - """Wait for and return the exit status of the child process.""" - if self.sts < 0: - pid, sts = os.waitpid(self.pid, 0) - # This used to be a test, but it is believed to be - # always true, so I changed it to an assertion - mvl - assert pid == self.pid - self.sts = sts - return self.sts - - -class Popen4(Popen3): - childerr = None - - def __init__(self, cmd, bufsize=-1): - _cleanup() - self.cmd = cmd - p2cread, p2cwrite = os.pipe() - c2pread, c2pwrite = os.pipe() - self.pid = os.fork() - if self.pid == 0: - # Child - os.dup2(p2cread, 0) - os.dup2(c2pwrite, 1) - os.dup2(c2pwrite, 2) - self._run_child(cmd) - os.close(p2cread) - self.tochild = os.fdopen(p2cwrite, 'w', bufsize) - os.close(c2pwrite) - self.fromchild = os.fdopen(c2pread, 'r', bufsize) - - -if sys.platform[:3] == "win" or sys.platform == "os2emx": - # Some things don't make sense on non-Unix platforms. - del Popen3, Popen4 - - def popen2(cmd, bufsize=-1, mode='t'): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may - be a sequence, in which case arguments will be passed directly to the - program without shell intervention (as with os.spawnv()). If 'cmd' is a - string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdout, child_stdin) are returned.""" - w, r = os.popen2(cmd, mode, bufsize) - return r, w - - def popen3(cmd, bufsize=-1, mode='t'): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may - be a sequence, in which case arguments will be passed directly to the - program without shell intervention (as with os.spawnv()). If 'cmd' is a - string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdout, child_stdin, child_stderr) are returned.""" - w, r, e = os.popen3(cmd, mode, bufsize) - return r, w, e - - def popen4(cmd, bufsize=-1, mode='t'): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may - be a sequence, in which case arguments will be passed directly to the - program without shell intervention (as with os.spawnv()). If 'cmd' is a - string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdout_stderr, child_stdin) are returned.""" - w, r = os.popen4(cmd, mode, bufsize) - return r, w -else: - def popen2(cmd, bufsize=-1, mode='t'): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may - be a sequence, in which case arguments will be passed directly to the - program without shell intervention (as with os.spawnv()). If 'cmd' is a - string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdout, child_stdin) are returned.""" - inst = Popen3(cmd, False, bufsize) - return inst.fromchild, inst.tochild - - def popen3(cmd, bufsize=-1, mode='t'): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may - be a sequence, in which case arguments will be passed directly to the - program without shell intervention (as with os.spawnv()). If 'cmd' is a - string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdout, child_stdin, child_stderr) are returned.""" - inst = Popen3(cmd, True, bufsize) - return inst.fromchild, inst.tochild, inst.childerr - - def popen4(cmd, bufsize=-1, mode='t'): - """Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may - be a sequence, in which case arguments will be passed directly to the - program without shell intervention (as with os.spawnv()). If 'cmd' is a - string it will be passed to the shell (as with os.system()). If - 'bufsize' is specified, it sets the buffer size for the I/O pipes. The - file objects (child_stdout_stderr, child_stdin) are returned.""" - inst = Popen4(cmd, bufsize) - return inst.fromchild, inst.tochild - - __all__.extend(["Popen3", "Popen4"]) diff --git a/Lib/pprint.py b/Lib/pprint.py index 7e7ef67..d7f9a28 100644 --- a/Lib/pprint.py +++ b/Lib/pprint.py @@ -249,7 +249,10 @@ def _safe_repr(object, context, maxlevels, level): try: items = sorted(items) except TypeError: - items = sorted(items, key=lambda (k, v): (str(type(k)), k, v)) + def sortkey(item): + key, value = item + return str(type(key)), key, value + items = sorted(items, key=sortkey) for k, v in items: krepr, kreadable, krecur = saferepr(k, context, maxlevels, level) vrepr, vreadable, vrecur = saferepr(v, context, maxlevels, level) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 5e91ad2..0716a3a 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -171,11 +171,12 @@ def visiblename(name, all=None): def classify_class_attrs(object): """Wrap inspect.classify_class_attrs, with fixup for data descriptors.""" - def fixup((name, kind, cls, value)): + results = [] + for (name, kind, cls, value) in inspect.classify_class_attrs(object): if inspect.isdatadescriptor(value): kind = 'data descriptor' - return name, kind, cls, value - return map(fixup, inspect.classify_class_attrs(object)) + results.append((name, kind, cls, value)) + return results # ----------------------------------------------------- module manipulation @@ -228,11 +229,9 @@ def synopsis(filename, cache={}): class ErrorDuringImport(Exception): """Errors that occurred while trying to import something to document it.""" - def __init__(self, filename, (exc, value, tb)): + def __init__(self, filename, exc_info): self.filename = filename - self.exc = exc - self.value = value - self.tb = tb + self.exc, self.value, self.tb = exc_info def __str__(self): exc = self.exc @@ -502,8 +501,9 @@ class HTMLDoc(Doc): """Make a link for a module.""" return '<a href="%s.html">%s</a>' % (object.__name__, object.__name__) - def modpkglink(self, (name, path, ispackage, shadowed)): + def modpkglink(self, modpkginfo): """Make a link for a module or package to display in an index.""" + name, path, ispackage, shadowed = modpkginfo if shadowed: return self.grey(name) if path: @@ -662,12 +662,12 @@ class HTMLDoc(Doc): 'Package Contents', '#ffffff', '#aa55cc', contents) elif modules: contents = self.multicolumn( - modules, lambda (key, value), s=self: s.modulelink(value)) + modules, lambda t: self.modulelink(t[1])) result = result + self.bigsection( 'Modules', '#fffff', '#aa55cc', contents) if classes: - classlist = map(lambda (key, value): value, classes) + classlist = [value for (key, value) in classes] contents = [ self.formattree(inspect.getclasstree(classlist, 1), name)] for key, value in classes: @@ -768,8 +768,10 @@ class HTMLDoc(Doc): push('\n') return attrs - attrs = filter(lambda (name, kind, cls, value): visiblename(name), - classify_class_attrs(object)) + attrs = [(name, kind, cls, value) + for name, kind, cls, value in classify_class_attrs(object) + if visiblename(name)] + mdict = {} for key, kind, homecls, value in attrs: mdict[key] = anchor = '#' + name + '-' + key @@ -1071,7 +1073,7 @@ class TextDoc(Doc): 'PACKAGE CONTENTS', '\n'.join(modpkgs)) if classes: - classlist = map(lambda (key, value): value, classes) + classlist = [value for key, value in classes] contents = [self.formattree( inspect.getclasstree(classlist, 1), name)] for key, value in classes: @@ -1175,8 +1177,10 @@ class TextDoc(Doc): name, mod, maxlen=70, doc=doc) + '\n') return attrs - attrs = filter(lambda (name, kind, cls, value): visiblename(name), - classify_class_attrs(object)) + attrs = [(name, kind, cls, value) + for name, kind, cls, value in classify_class_attrs(object) + if visiblename(name)] + while attrs: if mro: thisclass = mro.popleft() diff --git a/Lib/sunau.py b/Lib/sunau.py index ba79508..648506c 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/test/inspect_fodder.py b/Lib/test/inspect_fodder.py index 823559b..ec96eb7 100644 --- a/Lib/test/inspect_fodder.py +++ b/Lib/test/inspect_fodder.py @@ -5,7 +5,7 @@ import sys, inspect # line 5 # line 7 -def spam(a, b, c, d=3, (e, (f,))=(4, (5,)), *g, **h): +def spam(a, b, c, d=3, e=4, f=5, *g, **h): eggs(b + d, c + f) # line 11 diff --git a/Lib/test/inspect_fodder2.py b/Lib/test/inspect_fodder2.py index ef70c09..e49074c 100644 --- a/Lib/test/inspect_fodder2.py +++ b/Lib/test/inspect_fodder2.py @@ -60,8 +60,8 @@ def with_comment(): # hello # line 61 multiline_sig = [ - lambda (x, - y): x+y, + lambda x, \ + y: x+y, None, ] diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 3681a9d..6e52021 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -887,7 +887,6 @@ _expectations = { test_ossaudiodev test_poll test_popen - test_popen2 test_posix test_pty test_pwd @@ -986,7 +985,6 @@ _expectations = { test_ntpath test_openpty test_poll - test_popen2 test_pty test_pwd test_strop @@ -1062,7 +1060,6 @@ _expectations = { test_mmap test_nis test_poll - test_popen2 test_resource test_sqlite test_startfile diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py index e7ed2f7..2c4e103 100644 --- a/Lib/test/test___all__.py +++ b/Lib/test/test___all__.py @@ -7,8 +7,6 @@ warnings.filterwarnings("ignore", "the gopherlib module is deprecated", DeprecationWarning, "<string>") -warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*", - DeprecationWarning) class AllTest(unittest.TestCase): @@ -112,7 +110,6 @@ class AllTest(unittest.TestCase): self.check_all("pickle") self.check_all("pickletools") self.check_all("pipes") - self.check_all("popen2") self.check_all("poplib") self.check_all("posixpath") self.check_all("pprint") diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index 213cca8..4e29eab 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -124,29 +124,9 @@ def f(x): exec(code, g) self.assertEqual(g['f'](5), 0) - def test_complex_args(self): - - def comp_args((a, b)): - return a,b - self.assertEqual(comp_args((1, 2)), (1, 2)) - - def comp_args((a, b)=(3, 4)): - return a, b - self.assertEqual(comp_args((1, 2)), (1, 2)) - self.assertEqual(comp_args(), (3, 4)) - - def comp_args(a, (b, c)): - return a, b, c - self.assertEqual(comp_args(1, (2, 3)), (1, 2, 3)) - - def comp_args(a=2, (b, c)=(3, 4)): - return a, b, c - self.assertEqual(comp_args(1, (2, 3)), (1, 2, 3)) - self.assertEqual(comp_args(), (2, 3, 4)) - def test_argument_order(self): try: - exec('def f(a=1, (b, c)): pass') + exec('def f(a=1, b): pass') self.fail("non-default args after default") except SyntaxError: pass @@ -394,16 +374,16 @@ if 1: self.assertEqual((Ellipsis, Ellipsis) in d, False) def test_annotation_limit(self): - # 16 bits are available for # of annotations, and the - # tuple of annotations names is counted, hence 65534 + # 16 bits are available for # of annotations, but only 8 bits are + # available for the parameter count, hence 255 # is the max. Ensure the result of too many annotations is a # SyntaxError. - s = "def f((%s)): pass" - s %= ', '.join('a%d:%d' % (i,i) for i in range(65535)) + s = "def f(%s): pass" + s %= ', '.join('a%d:%d' % (i,i) for i in range(256)) self.assertRaises(SyntaxError, compile, s, '?', 'exec') # Test that the max # of annotations compiles. - s = "def f((%s)): pass" - s %= ', '.join('a%d:%d' % (i,i) for i in range(65534)) + s = "def f(%s): pass" + s %= ', '.join('a%d:%d' % (i,i) for i in range(255)) compile(s, '?', 'exec') def test_mangling(self): diff --git a/Lib/test/test_complex_args.py b/Lib/test/test_complex_args.py deleted file mode 100644 index c6d50a9..0000000 --- a/Lib/test/test_complex_args.py +++ /dev/null @@ -1,91 +0,0 @@ - -import unittest -from test import test_support - -class ComplexArgsTestCase(unittest.TestCase): - - def check(self, func, expected, *args): - self.assertEqual(func(*args), expected) - - # These functions are tested below as lambdas too. If you add a function test, - # also add a similar lambda test. - - def test_func_parens_no_unpacking(self): - def f(((((x))))): return x - self.check(f, 1, 1) - # Inner parens are elided, same as: f(x,) - def f(((x)),): return x - self.check(f, 2, 2) - - def test_func_1(self): - def f(((((x),)))): return x - self.check(f, 3, (3,)) - def f(((((x)),))): return x - self.check(f, 4, (4,)) - def f(((((x))),)): return x - self.check(f, 5, (5,)) - def f(((x),)): return x - self.check(f, 6, (6,)) - - def test_func_2(self): - def f(((((x)),),)): return x - self.check(f, 2, ((2,),)) - - def test_func_3(self): - def f((((((x)),),),)): return x - self.check(f, 3, (((3,),),)) - - def test_func_complex(self): - def f((((((x)),),),), a, b, c): return x, a, b, c - self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) - - def f(((((((x)),)),),), a, b, c): return x, a, b, c - self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) - - def f(a, b, c, ((((((x)),)),),)): return a, b, c, x - self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) - - # Duplicate the tests above, but for lambda. If you add a lambda test, - # also add a similar function test above. - - def test_lambda_parens_no_unpacking(self): - f = lambda (((((x))))): x - self.check(f, 1, 1) - # Inner parens are elided, same as: f(x,) - f = lambda ((x)),: x - self.check(f, 2, 2) - - def test_lambda_1(self): - f = lambda (((((x),)))): x - self.check(f, 3, (3,)) - f = lambda (((((x)),))): x - self.check(f, 4, (4,)) - f = lambda (((((x))),)): x - self.check(f, 5, (5,)) - f = lambda (((x),)): x - self.check(f, 6, (6,)) - - def test_lambda_2(self): - f = lambda (((((x)),),)): x - self.check(f, 2, ((2,),)) - - def test_lambda_3(self): - f = lambda ((((((x)),),),)): x - self.check(f, 3, (((3,),),)) - - def test_lambda_complex(self): - f = lambda (((((x)),),),), a, b, c: (x, a, b, c) - self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) - - f = lambda ((((((x)),)),),), a, b, c: (x, a, b, c) - self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) - - f = lambda a, b, c, ((((((x)),)),),): (a, b, c, x) - self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) - - -def test_main(): - test_support.run_unittest(ComplexArgsTestCase) - -if __name__ == "__main__": - test_main() diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 96cf824..711d636 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -144,51 +144,32 @@ class GrammarTests(unittest.TestCase): ### decorators: decorator+ ### parameters: '(' [typedargslist] ')' ### typedargslist: ((tfpdef ['=' test] ',')* - ### ('*' [tname] (',' tname ['=' test])* [',' '**' tname] | '**' tname) + ### ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) ### | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) - ### tname: NAME [':' test] - ### tfpdef: tname | '(' tfplist ')' - ### tfplist: tfpdef (',' tfpdef)* [','] + ### tfpdef: NAME [':' test] ### varargslist: ((vfpdef ['=' test] ',')* - ### ('*' [vname] (',' vname ['=' test])* [',' '**' vname] | '**' vname) + ### ('*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) ### | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) - ### vname: NAME - ### vfpdef: vname | '(' vfplist ')' - ### vfplist: vfpdef (',' vfpdef)* [','] + ### vfpdef: NAME def f1(): pass f1() f1(*()) f1(*(), **{}) def f2(one_argument): pass def f3(two, arguments): pass - def f4(two, (compound, (argument, list))): pass - def f5((compound, first), two): pass self.assertEquals(f2.__code__.co_varnames, ('one_argument',)) self.assertEquals(f3.__code__.co_varnames, ('two', 'arguments')) - if sys.platform.startswith('java'): - self.assertEquals(f4.__code__.co_varnames, - ('two', '(compound, (argument, list))', 'compound', 'argument', - 'list',)) - self.assertEquals(f5.__code__.co_varnames, - ('(compound, first)', 'two', 'compound', 'first')) - else: - self.assertEquals(f4.__code__.co_varnames, - ('two', '.1', 'compound', 'argument', 'list')) - self.assertEquals(f5.__code__.co_varnames, - ('.0', 'two', 'compound', 'first')) def a1(one_arg,): pass def a2(two, args,): pass def v0(*rest): pass def v1(a, *rest): pass def v2(a, b, *rest): pass - def v3(a, (b, c), *rest): return a, b, c, rest f1() f2(1) f2(1,) f3(1, 2) f3(1, 2,) - f4(1, (2, (3, 4))) v0() v0(1) v0(1,) @@ -203,17 +184,7 @@ class GrammarTests(unittest.TestCase): v2(1,2,3) v2(1,2,3,4) v2(1,2,3,4,5,6,7,8,9,0) - v3(1,(2,3)) - v3(1,(2,3),4) - v3(1,(2,3),4,5,6,7,8,9,0) - - # ceval unpacks the formal arguments into the first argcount names; - # thus, the names nested inside tuples must appear after these names. - if sys.platform.startswith('java'): - self.assertEquals(v3.__code__.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c')) - else: - self.assertEquals(v3.__code__.co_varnames, ('a', '.1', 'rest', 'b', 'c')) - self.assertEquals(v3(1, (2, 3), 4), (1, 2, 3, (4,))) + def d01(a=1): pass d01() d01(1) @@ -286,10 +257,6 @@ class GrammarTests(unittest.TestCase): d22v(*(1, 2, 3, 4)) d22v(1, 2, *(3, 4, 5)) d22v(1, *(2, 3), **{'d': 4}) - def d31v((x)): pass - d31v(1) - def d32v((x,)): pass - d32v((1,)) # keyword only argument tests def pos0key1(*, key): return key pos0key1(key=100) @@ -312,12 +279,12 @@ class GrammarTests(unittest.TestCase): self.assertEquals(f.__annotations__, {'x': float}) def f(x, y:1+2): pass self.assertEquals(f.__annotations__, {'y': 3}) - def f(a, (b:1, c:2, d)): pass + def f(a, b:1, c:2, d): pass self.assertEquals(f.__annotations__, {'b': 1, 'c': 2}) - def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): pass + def f(a, b:1, c:2, d, e:3=4, f=5, *g:6): pass self.assertEquals(f.__annotations__, {'b': 1, 'c': 2, 'e': 3, 'g': 6}) - def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6, h:7, i=8, j:9=10, + def f(a, b:1, c:2, d, e:3=4, f=5, *g:6, h:7, i=8, j:9=10, **k:11) -> 12: pass self.assertEquals(f.__annotations__, {'b': 1, 'c': 2, 'e': 3, 'g': 6, 'h': 7, 'j': 9, diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 5e03218..7919931 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -116,11 +116,11 @@ class TestInterpreterStack(IsTestBase): def test_previous_frame(self): args, varargs, varkw, locals = inspect.getargvalues(mod.fr.f_back) - self.assertEqual(args, ['a', 'b', 'c', 'd', ['e', ['f']]]) + self.assertEqual(args, ['a', 'b', 'c', 'd', 'e', 'f']) self.assertEqual(varargs, 'g') self.assertEqual(varkw, 'h') self.assertEqual(inspect.formatargvalues(args, varargs, varkw, locals), - '(a=7, b=8, c=9, d=3, (e=4, (f=5,)), *g=(), **h={})') + '(a=7, b=8, c=9, d=3, e=4, f=5, *g=(), **h={})') class GetSourceBase(unittest.TestCase): # Subclasses must override. @@ -321,9 +321,9 @@ class TestClassesAndFunctions(unittest.TestCase): self.assertArgSpecEquals(mod.eggs, ['x', 'y'], formatted = '(x, y)') self.assertArgSpecEquals(mod.spam, - ['a', 'b', 'c', 'd', ['e', ['f']]], - 'g', 'h', (3, (4, (5,))), - '(a, b, c, d=3, (e, (f,))=(4, (5,)), *g, **h)') + ['a', 'b', 'c', 'd', 'e', 'f'], + 'g', 'h', (3, 4, 5), + '(a, b, c, d=3, e=4, f=5, *g, **h)') def test_getargspec_method(self): class A(object): @@ -331,13 +331,6 @@ class TestClassesAndFunctions(unittest.TestCase): pass self.assertArgSpecEquals(A.m, ['self']) - def test_getargspec_sublistofone(self): - def sublistOfOne((foo,)): return 1 - self.assertArgSpecEquals(sublistOfOne, [['foo']]) - - def fakeSublistOfOne((foo)): return 1 - self.assertArgSpecEquals(fakeSublistOfOne, ['foo']) - def test_classify_newstyle(self): class A(object): diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index 765501d..6dfc52e 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -859,7 +859,7 @@ Samuele # is differencing with a range so that consecutive numbers all appear in # same group. >>> data = [ 1, 4,5,6, 10, 15,16,17,18, 22, 25,26,27,28] ->>> for k, g in groupby(enumerate(data), lambda (i,x):i-x): +>>> for k, g in groupby(enumerate(data), lambda t:t[0]-t[1]): ... print(map(operator.itemgetter(1), g)) ... [1] diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index a45fc34..e5c6ead 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -105,10 +105,11 @@ class MathTests(unittest.TestCase): def testFrexp(self): self.assertRaises(TypeError, math.frexp) - def testfrexp(name, (mant, exp), (emant, eexp)): + def testfrexp(name, result, expected): + (mant, exp), (emant, eexp) = result, expected if abs(mant-emant) > eps or exp != eexp: self.fail('%s returned %r, expected %r'%\ - (name, (mant, exp), (emant,eexp))) + (name, result, expected)) testfrexp('frexp(-1)', math.frexp(-1), (-0.5, 1)) testfrexp('frexp(0)', math.frexp(0), (0, 0)) @@ -145,10 +146,11 @@ class MathTests(unittest.TestCase): def testModf(self): self.assertRaises(TypeError, math.modf) - def testmodf(name, (v1, v2), (e1, e2)): + def testmodf(name, result, expected): + (v1, v2), (e1, e2) = result, expected if abs(v1-e1) > eps or abs(v2-e2): self.fail('%s returned %r, expected %r'%\ - (name, (v1,v2), (e1,e2))) + (name, result, expected)) testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0)) testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0)) diff --git a/Lib/test/test_popen2.py b/Lib/test/test_popen2.py deleted file mode 100644 index 023871f..0000000 --- a/Lib/test/test_popen2.py +++ /dev/null @@ -1,98 +0,0 @@ -#! /usr/bin/env python -"""Test script for popen2.py""" - -import warnings -warnings.filterwarnings("ignore", ".*popen2 module is deprecated.*", - DeprecationWarning) -warnings.filterwarnings("ignore", "os\.popen. is deprecated.*", - DeprecationWarning) - -import os -import sys -import unittest -import popen2 - -from test.test_support import TestSkipped, run_unittest, reap_children - -if sys.platform[:4] == 'beos' or sys.platform[:6] == 'atheos': - # Locks get messed up or something. Generally we're supposed - # to avoid mixing "posix" fork & exec with native threads, and - # they may be right about that after all. - raise TestSkipped("popen2() doesn't work on " + sys.platform) - -# if we don't have os.popen, check that -# we have os.fork. if not, skip the test -# (by raising an ImportError) -try: - from os import popen - del popen -except ImportError: - from os import fork - del fork - -class Popen2Test(unittest.TestCase): - cmd = "cat" - if os.name == "nt": - cmd = "more" - teststr = "ab cd\n" - # "more" doesn't act the same way across Windows flavors, - # sometimes adding an extra newline at the start or the - # end. So we strip whitespace off both ends for comparison. - expected = teststr.strip() - - def setUp(self): - popen2._cleanup() - # When the test runs, there shouldn't be any open pipes - self.assertFalse(popen2._active, "Active pipes when test starts" + - repr([c.cmd for c in popen2._active])) - - def tearDown(self): - for inst in popen2._active: - inst.wait() - popen2._cleanup() - self.assertFalse(popen2._active, "_active not empty") - reap_children() - - def validate_output(self, teststr, expected_out, r, w, e=None): - w.write(teststr) - w.close() - got = r.read() - self.assertEquals(expected_out, got.strip(), "wrote %r read %r" % - (teststr, got)) - - if e is not None: - got = e.read() - self.assertFalse(got, "unexpected %r on stderr" % got) - - def test_popen2(self): - r, w = popen2.popen2(self.cmd) - self.validate_output(self.teststr, self.expected, r, w) - - def test_popen3(self): - if os.name == 'posix': - r, w, e = popen2.popen3([self.cmd]) - self.validate_output(self.teststr, self.expected, r, w, e) - - r, w, e = popen2.popen3(self.cmd) - self.validate_output(self.teststr, self.expected, r, w, e) - - def test_os_popen2(self): - # same test as test_popen2(), but using the os.popen*() API - w, r = os.popen2(self.cmd) - self.validate_output(self.teststr, self.expected, r, w) - - def test_os_popen3(self): - # same test as test_popen3(), but using the os.popen*() API - if os.name == 'posix': - w, r, e = os.popen3([self.cmd]) - self.validate_output(self.teststr, self.expected, r, w, e) - - w, r, e = os.popen3(self.cmd) - self.validate_output(self.teststr, self.expected, r, w, e) - - -def test_main(): - run_unittest(Popen2Test) - -if __name__ == "__main__": - test_main() diff --git a/Lib/test/test_scope.py b/Lib/test/test_scope.py index f5c1462..259d1d9 100644 --- a/Lib/test/test_scope.py +++ b/Lib/test/test_scope.py @@ -323,13 +323,6 @@ else: self.assertEqual(makeReturner2(a=11)()['a'], 11) - def makeAddPair((a, b)): - def addPair((c, d)): - return (a + c, b + d) - return addPair - - self.assertEqual(makeAddPair((1, 2))((100, 200)), (101,202)) - def testScopeOfGlobalStmt(self): # Examples posted by Samuele Pedroni to python-dev on 3/1/2001 diff --git a/Lib/test/test_sort.py b/Lib/test/test_sort.py index 738ffe1..8ef98c7 100644 --- a/Lib/test/test_sort.py +++ b/Lib/test/test_sort.py @@ -184,7 +184,7 @@ class TestDecorateSortUndecorate(unittest.TestCase): def test_stability(self): data = [(random.randrange(100), i) for i in range(200)] copy = data[:] - data.sort(key=lambda (x,y): x) # sort on the random first field + data.sort(key=lambda t: t[0]) # sort on the random first field copy.sort() # sort using both fields self.assertEqual(data, copy) # should get the same result diff --git a/Lib/test/test_threadsignals.py b/Lib/test/test_threadsignals.py index 1f10fe7..286c2e4 100644 --- a/Lib/test/test_threadsignals.py +++ b/Lib/test/test_threadsignals.py @@ -14,7 +14,7 @@ process_pid = os.getpid() signalled_all=thread.allocate_lock() -def registerSignals((for_usr1, for_usr2, for_alrm)): +def registerSignals(for_usr1, for_usr2, for_alrm): usr1 = signal.signal(signal.SIGUSR1, for_usr1) usr2 = signal.signal(signal.SIGUSR2, for_usr2) alrm = signal.signal(signal.SIGALRM, for_alrm) @@ -74,11 +74,11 @@ def test_main(): signal.SIGUSR2 : {'tripped': 0, 'tripped_by': 0 }, signal.SIGALRM : {'tripped': 0, 'tripped_by': 0 } } - oldsigs = registerSignals((handle_signals, handle_signals, handle_signals)) + oldsigs = registerSignals(handle_signals, handle_signals, handle_signals) try: run_unittest(ThreadSignals) finally: - registerSignals(oldsigs) + registerSignals(*oldsigs) if __name__ == '__main__': test_main() diff --git a/Lib/threading.py b/Lib/threading.py index 439a378..e87a653 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -128,10 +128,9 @@ class _RLock(_Verbose): # Internal methods used by condition variables - def _acquire_restore(self, (count, owner)): + def _acquire_restore(self, state): self.__block.acquire() - self.__count = count - self.__owner = owner + self.__count, self.__owner = state if __debug__: self._note("%s._acquire_restore()", self) diff --git a/Lib/tokenize.py b/Lib/tokenize.py index 1a72d6f..e94d7b9 100644 --- a/Lib/tokenize.py +++ b/Lib/tokenize.py @@ -131,7 +131,8 @@ class TokenError(Exception): pass class StopTokenizing(Exception): pass -def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing +def printtoken(type, token, startrowcol, endrowcol, line): # for testing + (srow, scol), (erow, ecol) = startrowcol, endrowcol print("%d,%d-%d,%d:\t%s\t%s" % \ (srow, scol, erow, ecol, tok_name[type], repr(token))) diff --git a/Lib/urlparse.py b/Lib/urlparse.py index 9c9af45..8cc7a97 100644 --- a/Lib/urlparse.py +++ b/Lib/urlparse.py @@ -220,16 +220,18 @@ def urlsplit(url, scheme='', allow_fragments=True): _parse_cache[key] = v return v -def urlunparse((scheme, netloc, url, params, query, fragment)): +def urlunparse(components): """Put a parsed URL back together again. This may result in a slightly different, but equivalent URL, if the URL that was parsed originally had redundant delimiters, e.g. a ? with an empty query (the draft states that these are equivalent).""" + scheme, netloc, url, params, query, fragment = components if params: url = "%s;%s" % (url, params) return urlunsplit((scheme, netloc, url, query, fragment)) -def urlunsplit((scheme, netloc, url, query, fragment)): +def urlunsplit(components): + scheme, netloc, url, query, fragment = components if netloc or (scheme and scheme in uses_netloc and url[:2] != '//'): if url and url[:1] != '/': url = '/' + url url = '//' + (netloc or '') + url diff --git a/Lib/wave.py b/Lib/wave.py index 81a7141..66d07e5 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) |