[Python-checkins] r76518 - in python/branches/py3k: Doc/library/calendar.rst Doc/library/functions.rst Doc/library/socketserver.rst Doc/library/string.rst Doc/library/xml.dom.rst Doc/library/zipfile.rst Lib/lib2to3/fixes/fix_imports.py Lib/lib2to3/fixes/fix_next.py Lib/lib2to3/fixes/fix_renames.py Lib/lib2to3/fixes/fix_urllib.py Lib/lib2to3/main.py Lib/lib2to3/pgen2/tokenize.py Lib/lib2to3/refactor.py Lib/lib2to3/tests/data/bom.py Lib/lib2to3/tests/test_fixers.py Lib/lib2to3/tests/test_refactor.py

benjamin.peterson python-checkins at python.org
Wed Nov 25 19:34:43 CET 2009


Author: benjamin.peterson
Date: Wed Nov 25 19:34:42 2009
New Revision: 76518
Log:
Merged revisions 76259,76326,76376-76377,76430,76471,76517 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk
................
 r76259 | georg.brandl | 2009年11月14日 05:50:51 -0600 (2009年11月14日) | 1 line
 
 Fix terminology.
................
 r76326 | georg.brandl | 2009年11月16日 10:44:05 -0600 (2009年11月16日) | 1 line
 
 #7302: fix link.
................
 r76376 | georg.brandl | 2009年11月18日 13:39:14 -0600 (2009年11月18日) | 1 line
 
 upcase Python
................
 r76377 | georg.brandl | 2009年11月18日 14:05:15 -0600 (2009年11月18日) | 1 line
 
 Fix markup.
................
 r76430 | r.david.murray | 2009年11月20日 07:29:43 -0600 (2009年11月20日) | 2 lines
 
 Issue 7363: fix indentation in socketserver udpserver example.
................
 r76471 | georg.brandl | 2009年11月23日 13:53:19 -0600 (2009年11月23日) | 1 line
 
 #7345: fix arguments of formatyear().
................
 r76517 | benjamin.peterson | 2009年11月25日 12:16:46 -0600 (2009年11月25日) | 29 lines
 
 Merged revisions 76160-76161,76250,76252,76447,76506 via svnmerge from 
 svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
 
 ........
 r76160 | benjamin.peterson | 2009年11月08日 18:53:48 -0600 (2009年11月08日) | 1 line
 
 undeprecate the -p option; it's useful for converting python3 sources
 ........
 r76161 | benjamin.peterson | 2009年11月08日 19:05:37 -0600 (2009年11月08日) | 1 line
 
 simplify condition
 ........
 r76250 | benjamin.peterson | 2009年11月13日 16:56:48 -0600 (2009年11月13日) | 1 line
 
 fix handling of a utf-8 bom #7313
 ........
 r76252 | benjamin.peterson | 2009年11月13日 16:58:36 -0600 (2009年11月13日) | 1 line
 
 remove pdb turd
 ........
 r76447 | benjamin.peterson | 2009年11月22日 18:17:40 -0600 (2009年11月22日) | 1 line
 
 #7375 fix nested transformations in fix_urllib
 ........
 r76506 | benjamin.peterson | 2009年11月24日 18:34:31 -0600 (2009年11月24日) | 1 line
 
 use generator expressions in any()
 ........
................
Added:
 python/branches/py3k/Lib/lib2to3/tests/data/bom.py
 - copied unchanged from r76517, /python/trunk/Lib/lib2to3/tests/data/bom.py
Modified:
 python/branches/py3k/ (props changed)
 python/branches/py3k/Doc/library/calendar.rst
 python/branches/py3k/Doc/library/functions.rst
 python/branches/py3k/Doc/library/socketserver.rst
 python/branches/py3k/Doc/library/string.rst
 python/branches/py3k/Doc/library/xml.dom.rst
 python/branches/py3k/Doc/library/zipfile.rst
 python/branches/py3k/Lib/lib2to3/fixes/fix_imports.py
 python/branches/py3k/Lib/lib2to3/fixes/fix_next.py
 python/branches/py3k/Lib/lib2to3/fixes/fix_renames.py
 python/branches/py3k/Lib/lib2to3/fixes/fix_urllib.py
 python/branches/py3k/Lib/lib2to3/main.py
 python/branches/py3k/Lib/lib2to3/pgen2/tokenize.py
 python/branches/py3k/Lib/lib2to3/refactor.py
 python/branches/py3k/Lib/lib2to3/tests/test_fixers.py
 python/branches/py3k/Lib/lib2to3/tests/test_refactor.py
Modified: python/branches/py3k/Doc/library/calendar.rst
==============================================================================
--- python/branches/py3k/Doc/library/calendar.rst	(original)
+++ python/branches/py3k/Doc/library/calendar.rst	Wed Nov 25 19:34:42 2009
@@ -123,7 +123,7 @@
 Print a month's calendar as returned by :meth:`formatmonth`.
 
 
- .. method:: formatyear(theyear, themonth, w=2, l=1, c=6, m=3)
+ .. method:: formatyear(theyear, w=2, l=1, c=6, m=3)
 
 Return a *m*-column calendar for an entire year as a multi-line string.
 Optional parameters *w*, *l*, and *c* are for date column width, lines per
@@ -152,7 +152,7 @@
 used.
 
 
- .. method:: formatyear(theyear, themonth, width=3)
+ .. method:: formatyear(theyear, width=3)
 
 Return a year's calendar as an HTML table. *width* (defaulting to 3)
 specifies the number of months per row.
Modified: python/branches/py3k/Doc/library/functions.rst
==============================================================================
--- python/branches/py3k/Doc/library/functions.rst	(original)
+++ python/branches/py3k/Doc/library/functions.rst	Wed Nov 25 19:34:42 2009
@@ -176,7 +176,7 @@
 
 .. note::
 
- When compiling a string with multi-line statements in ``'single'`` or
+ When compiling a string with multi-line code in ``'single'`` or
 ``'eval'`` mode, input must be terminated by at least one newline
 character. This is to facilitate detection of incomplete and complete
 statements in the :mod:`code` module.
Modified: python/branches/py3k/Doc/library/socketserver.rst
==============================================================================
--- python/branches/py3k/Doc/library/socketserver.rst	(original)
+++ python/branches/py3k/Doc/library/socketserver.rst	Wed Nov 25 19:34:42 2009
@@ -446,9 +446,9 @@
 socket.sendto(data.upper(), self.client_address)
 
 if __name__ == "__main__":
- HOST, PORT = "localhost", 9999
- server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
- server.serve_forever()
+ HOST, PORT = "localhost", 9999
+ server = socketserver.UDPServer((HOST, PORT), MyUDPHandler)
+ server.serve_forever()
 
 This is the client side::
 
Modified: python/branches/py3k/Doc/library/string.rst
==============================================================================
--- python/branches/py3k/Doc/library/string.rst	(original)
+++ python/branches/py3k/Doc/library/string.rst	Wed Nov 25 19:34:42 2009
@@ -521,13 +521,12 @@
 templates containing dangling delimiters, unmatched braces, or
 placeholders that are not valid Python identifiers.
 
-:class:`Template` instances also provide one public data attribute:
+ :class:`Template` instances also provide one public data attribute:
 
+ .. attribute:: template
 
-.. attribute:: string.template
-
- This is the object passed to the constructor's *template* argument. In general,
- you shouldn't change it, but read-only access is not enforced.
+ This is the object passed to the constructor's *template* argument. In
+ general, you shouldn't change it, but read-only access is not enforced.
 
 Here is an example of how to use a Template:
 
Modified: python/branches/py3k/Doc/library/xml.dom.rst
==============================================================================
--- python/branches/py3k/Doc/library/xml.dom.rst	(original)
+++ python/branches/py3k/Doc/library/xml.dom.rst	Wed Nov 25 19:34:42 2009
@@ -76,7 +76,7 @@
 `Document Object Model (DOM) Level 1 Specification <http://www.w3.org/TR/REC-DOM-Level-1/>`_
 The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`.
 
- `Python Language Mapping Specification <http://www.omg.org/docs/formal/02-11-05.pdf>`_
+ `Python Language Mapping Specification <http://www.omg.org/spec/PYTH/1.2/PDF>`_
 This specifies the mapping from OMG IDL to Python.
 
 
Modified: python/branches/py3k/Doc/library/zipfile.rst
==============================================================================
--- python/branches/py3k/Doc/library/zipfile.rst	(original)
+++ python/branches/py3k/Doc/library/zipfile.rst	Wed Nov 25 19:34:42 2009
@@ -19,7 +19,7 @@
 (that is ZIP files that are more than 4 GByte in size). It supports
 decryption of encrypted files in ZIP archives, but it currently cannot
 create an encrypted file. Decryption is extremely slow as it is
-implemented in native python rather than C.
+implemented in native Python rather than C.
 
 For other archive formats, see the :mod:`bz2`, :mod:`gzip`, and
 :mod:`tarfile` modules.
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_imports.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_imports.py	(original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_imports.py	Wed Nov 25 19:34:42 2009
@@ -108,7 +108,7 @@
 # Module usage could be in the trailer of an attribute lookup, so we
 # might have nested matches when "bare_with_attr" is present.
 if "bare_with_attr" not in results and \
- any([match(obj) for obj in attr_chain(node, "parent")]):
+ any(match(obj) for obj in attr_chain(node, "parent")):
 return False
 return results
 return False
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_next.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_next.py	(original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_next.py	Wed Nov 25 19:34:42 2009
@@ -99,4 +99,4 @@
 def is_subtree(root, node):
 if root == node:
 return True
- return any([is_subtree(c, node) for c in root.children])
+ return any(is_subtree(c, node) for c in root.children)
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_renames.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_renames.py	(original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_renames.py	Wed Nov 25 19:34:42 2009
@@ -49,7 +49,7 @@
 match = super(FixRenames, self).match
 results = match(node)
 if results:
- if any([match(obj) for obj in attr_chain(node, "parent")]):
+ if any(match(obj) for obj in attr_chain(node, "parent")):
 return False
 return results
 return False
Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_urllib.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_urllib.py	(original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_urllib.py	Wed Nov 25 19:34:42 2009
@@ -63,7 +63,8 @@
 yield """import_name< 'import'
 dotted_as_name< module_as=%r 'as' any > >
 """ % old_module
- yield """power< module_dot=%r trailer< '.' member=%s > any* >
+ # bare_with_attr has a special significance for FixImports.match().
+ yield """power< bare_with_attr=%r trailer< '.' member=%s > any* >
 """ % (old_module, members)
 
 
@@ -150,12 +151,11 @@
 
 def transform_dot(self, node, results):
 """Transform for calls to module members in code."""
- module_dot = results.get('module_dot')
+ module_dot = results.get('bare_with_attr')
 member = results.get('member')
- # this may be a list of length one, or just a node
+ new_name = None
 if isinstance(member, list):
 member = member[0]
- new_name = None
 for change in MAPPING[module_dot.value]:
 if member.value in change[1]:
 new_name = change[0]
@@ -171,7 +171,7 @@
 self.transform_import(node, results)
 elif results.get('mod_member'):
 self.transform_member(node, results)
- elif results.get('module_dot'):
+ elif results.get('bare_with_attr'):
 self.transform_dot(node, results)
 # Renaming and star imports are not supported for these modules.
 elif results.get('module_star'):
Modified: python/branches/py3k/Lib/lib2to3/main.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/main.py	(original)
+++ python/branches/py3k/Lib/lib2to3/main.py	Wed Nov 25 19:34:42 2009
@@ -90,8 +90,7 @@
 parser.add_option("-l", "--list-fixes", action="store_true",
 help="List available transformations (fixes/fix_*.py)")
 parser.add_option("-p", "--print-function", action="store_true",
- help="DEPRECATED Modify the grammar so that print() is "
- "a function")
+ help="Modify the grammar so that print() is a function")
 parser.add_option("-v", "--verbose", action="store_true",
 help="More verbose logging")
 parser.add_option("--no-diffs", action="store_true",
@@ -103,12 +102,10 @@
 
 # Parse command line arguments
 refactor_stdin = False
+ flags = {}
 options, args = parser.parse_args(args)
 if not options.write and options.no_diffs:
 warn("not writing files and not printing diffs; that's not very useful")
- if options.print_function:
- warn("-p is deprecated; "
- "detection of from __future__ import print_function is automatic")
 if not options.write and options.nobackups:
 parser.error("Can't use -n without -w")
 if options.list_fixes:
@@ -126,6 +123,8 @@
 if options.write:
 print("Can't write to stdin.", file=sys.stderr)
 return 2
+ if options.print_function:
+ flags["print_function"] = True
 
 # Set up logging handler
 level = logging.DEBUG if options.verbose else logging.INFO
@@ -146,7 +145,7 @@
 else:
 requested = avail_fixes.union(explicit)
 fixer_names = requested.difference(unwanted_fixes)
- rt = StdoutRefactoringTool(sorted(fixer_names), None, sorted(explicit),
+ rt = StdoutRefactoringTool(sorted(fixer_names), flags, sorted(explicit),
 options.nobackups, not options.no_diffs)
 
 # Refactor all files and directories passed as arguments
Modified: python/branches/py3k/Lib/lib2to3/pgen2/tokenize.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/pgen2/tokenize.py	(original)
+++ python/branches/py3k/Lib/lib2to3/pgen2/tokenize.py	Wed Nov 25 19:34:42 2009
@@ -283,9 +283,13 @@
 # This behaviour mimics the Python interpreter
 raise SyntaxError("unknown encoding: " + encoding)
 
- if bom_found and codec.name != 'utf-8':
- # This behaviour mimics the Python interpreter
- raise SyntaxError('encoding problem: utf-8')
+ if bom_found:
+ if codec.name != 'utf-8':
+ # This behaviour mimics the Python interpreter
+ raise SyntaxError('encoding problem: utf-8')
+ else:
+ # Allow it to be properly encoded and decoded.
+ encoding = 'utf-8-sig'
 return encoding
 
 first = read_or_stop()
Modified: python/branches/py3k/Lib/lib2to3/refactor.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/refactor.py	(original)
+++ python/branches/py3k/Lib/lib2to3/refactor.py	Wed Nov 25 19:34:42 2009
@@ -18,7 +18,6 @@
 import operator
 import collections
 import io
-import warnings
 from itertools import chain
 
 # Local imports
@@ -139,26 +138,23 @@
 if have_docstring:
 break
 have_docstring = True
- elif tp == token.NAME:
- if value == "from":
+ elif tp == token.NAME and value == "from":
+ tp, value = advance()
+ if tp != token.NAME and value != "__future__":
+ break
+ tp, value = advance()
+ if tp != token.NAME and value != "import":
+ break
+ tp, value = advance()
+ if tp == token.OP and value == "(":
 tp, value = advance()
- if tp != token.NAME and value != "__future__":
- break
+ while tp == token.NAME:
+ if value == "print_function":
+ return True
 tp, value = advance()
- if tp != token.NAME and value != "import":
+ if tp != token.OP and value != ",":
 break
 tp, value = advance()
- if tp == token.OP and value == "(":
- tp, value = advance()
- while tp == token.NAME:
- if value == "print_function":
- return True
- tp, value = advance()
- if tp != token.OP and value != ",":
- break
- tp, value = advance()
- else:
- break
 else:
 break
 except StopIteration:
@@ -172,7 +168,7 @@
 
 class RefactoringTool(object):
 
- _default_options = {}
+ _default_options = {"print_function" : False}
 
 CLASS_PREFIX = "Fix" # The prefix for fixer classes
 FILE_PREFIX = "fix_" # The prefix for modules with a fixer within
@@ -189,15 +185,16 @@
 self.explicit = explicit or []
 self.options = self._default_options.copy()
 if options is not None:
- if "print_function" in options:
- warnings.warn("the 'print_function' option is deprecated",
- DeprecationWarning)
 self.options.update(options)
+ if self.options["print_function"]:
+ self.grammar = pygram.python_grammar_no_print_statement
+ else:
+ self.grammar = pygram.python_grammar
 self.errors = []
 self.logger = logging.getLogger("RefactoringTool")
 self.fixer_log = []
 self.wrote = False
- self.driver = driver.Driver(pygram.python_grammar,
+ self.driver = driver.Driver(self.grammar,
 convert=pytree.convert,
 logger=self.logger)
 self.pre_order, self.post_order = self.get_fixers()
@@ -353,7 +350,7 @@
 name, err.__class__.__name__, err)
 return
 finally:
- self.driver.grammar = pygram.python_grammar
+ self.driver.grammar = self.grammar
 self.log_debug("Refactoring %s", name)
 self.refactor_tree(tree, name)
 return tree
Modified: python/branches/py3k/Lib/lib2to3/tests/test_fixers.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/tests/test_fixers.py	(original)
+++ python/branches/py3k/Lib/lib2to3/tests/test_fixers.py	Wed Nov 25 19:34:42 2009
@@ -1753,6 +1753,8 @@
 for old, changes in self.modules.items():
 for new, members in changes:
 for member in members:
+ new_import = ", ".join([n for (n, mems)
+ in self.modules[old]])
 b = """
 import %s
 foo(%s.%s)
@@ -1760,9 +1762,16 @@
 a = """
 import %s
 foo(%s.%s)
- """ % (", ".join([n for (n, mems)
- in self.modules[old]]),
- new, member)
+ """ % (new_import, new, member)
+ self.check(b, a)
+ b = """
+ import %s
+ %s.%s(%s.%s)
+ """ % (old, old, member, old, member)
+ a = """
+ import %s
+ %s.%s(%s.%s)
+ """ % (new_import, new, member, new, member)
 self.check(b, a)
 
 
Modified: python/branches/py3k/Lib/lib2to3/tests/test_refactor.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/tests/test_refactor.py	(original)
+++ python/branches/py3k/Lib/lib2to3/tests/test_refactor.py	Wed Nov 25 19:34:42 2009
@@ -4,6 +4,7 @@
 
 import sys
 import os
+import codecs
 import operator
 import io
 import tempfile
@@ -45,12 +46,10 @@
 return refactor.RefactoringTool(fixers, options, explicit)
 
 def test_print_function_option(self):
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter("always", DeprecationWarning)
- refactor.RefactoringTool(_DEFAULT_FIXERS, {"print_function" : True})
- self.assertEqual(len(w), 1)
- msg, = w
- self.assertTrue(msg.category is DeprecationWarning)
+ rt = self.rt({"print_function" : True})
+ self.assertTrue(rt.grammar is pygram.python_grammar_no_print_statement)
+ self.assertTrue(rt.driver.grammar is
+ pygram.python_grammar_no_print_statement)
 
 def test_fixer_loading_helpers(self):
 contents = ["explicit", "first", "last", "parrot", "preorder"]
@@ -179,10 +178,12 @@
 
 try:
 rt.refactor_file(test_file, True)
- self.assertNotEqual(old_contents, read_file())
+ new_contents = read_file()
+ self.assertNotEqual(old_contents, new_contents)
 finally:
 with open(test_file, "wb") as fp:
 fp.write(old_contents)
+ return new_contents
 
 def test_refactor_file(self):
 test_file = os.path.join(FIXER_DIR, "parrot_example.py")
@@ -223,6 +224,11 @@
 fn = os.path.join(TEST_DATA_DIR, "different_encoding.py")
 self.check_file_refactoring(fn)
 
+ def test_bom(self):
+ fn = os.path.join(TEST_DATA_DIR, "bom.py")
+ data = self.check_file_refactoring(fn)
+ self.assertTrue(data.startswith(codecs.BOM_UTF8))
+
 def test_crlf_newlines(self):
 old_sep = os.linesep
 os.linesep = "\r\n"


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /