[Python-checkins] r77848 - in python/branches/py3k: Lib/lib2to3/fixes/fix_dict.py Lib/lib2to3/tests/test_fixers.py Lib/lib2to3/tests/test_parser.py

martin.v.loewis python-checkins at python.org
Sat Jan 30 12:05:48 CET 2010


Author: martin.v.loewis
Date: Sat Jan 30 12:05:48 2010
New Revision: 77848

Log:
Merged revisions 77846 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

................
  r77846 | martin.v.loewis | 2010-01-30 11:56:23 +0100 (Sa, 30 Jan 2010) | 13 lines
  
  Merged revisions 77419,77435 via svnmerge from 
  svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
  
  ........
    r77419 | benjamin.peterson | 2010-01-10 21:39:48 +0100 (So, 10 Jan 2010) | 1 line
    
    enclose path in quotes to handle paths with spaces correctly #7666
  ........
    r77435 | alexandre.vassalotti | 2010-01-12 01:36:54 +0100 (Di, 12 Jan 2010) | 2 lines
    
    Issue #1967: Add fixer for dictionary views.
  ........
................


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/lib2to3/fixes/fix_dict.py
   python/branches/py3k/Lib/lib2to3/tests/test_fixers.py
   python/branches/py3k/Lib/lib2to3/tests/test_parser.py

Modified: python/branches/py3k/Lib/lib2to3/fixes/fix_dict.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/fixes/fix_dict.py	(original)
+++ python/branches/py3k/Lib/lib2to3/fixes/fix_dict.py	Sat Jan 30 12:05:48 2010
@@ -11,6 +11,10 @@
 d.iteritems() -> iter(d.items())
 d.itervalues() -> iter(d.values())
 
+d.viewkeys() -> d.keys()
+d.viewitems() -> d.items()
+d.viewvalues() -> d.values()
+
 Except in certain very specific contexts: the iter() can be dropped
 when the context is list(), sorted(), iter() or for...in; the list()
 can be dropped when the context is list() or sorted() (but not iter()
@@ -39,7 +43,8 @@
     PATTERN = """
     power< head=any+
          trailer< '.' method=('keys'|'items'|'values'|
-                              'iterkeys'|'iteritems'|'itervalues') >
+                              'iterkeys'|'iteritems'|'itervalues'|
+                              'viewkeys'|'viewitems'|'viewvalues') >
          parens=trailer< '(' ')' >
          tail=any*
     >
@@ -52,7 +57,8 @@
         syms = self.syms
         method_name = method.value
         isiter = method_name.startswith("iter")
-        if isiter:
+        isview = method_name.startswith("view")
+        if isiter or isview:
             method_name = method_name[4:]
         assert method_name in ("keys", "items", "values"), repr(method)
         head = [n.clone() for n in head]
@@ -64,7 +70,7 @@
                                          prefix=method.prefix)]),
                        results["parens"].clone()]
         new = pytree.Node(syms.power, args)
-        if not special:
+        if not (special or isview):
             new.prefix = ""
             new = Call(Name("iter" if isiter else "list"), [new])
         if tail:

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	Sat Jan 30 12:05:48 2010
@@ -1215,6 +1215,14 @@
         a = "[i for i in    d.  keys(  )  ]"
         self.check(b, a)
 
+        b = "if   d. viewkeys  ( )  : pass"
+        a = "if   d. keys  ( )  : pass"
+        self.check(b, a)
+
+        b = "[i for i in    d.  viewkeys(  )  ]"
+        a = "[i for i in    d.  keys(  )  ]"
+        self.check(b, a)
+
     def test_trailing_comment(self):
         b = "d.keys() # foo"
         a = "list(d.keys()) # foo"
@@ -1234,6 +1242,16 @@
                ]"""
         self.check(b, a)
 
+        b = """[i for i in d.iterkeys() # foo
+               ]"""
+        a = """[i for i in d.keys() # foo
+               ]"""
+        self.check(b, a)
+
+        b = "d.viewitems()  # foo"
+        a = "d.items()  # foo"
+        self.check(b, a)
+
     def test_unchanged(self):
         for wrapper in fixer_util.consuming_calls:
             s = "s = %s(d.keys())" % wrapper
@@ -1367,6 +1385,46 @@
         a = "for x in list(h.keys())[0]: print x"
         self.check(b, a)
 
+    def test_25(self):
+        b = "d.viewkeys()"
+        a = "d.keys()"
+        self.check(b, a)
+
+    def test_26(self):
+        b = "d.viewitems()"
+        a = "d.items()"
+        self.check(b, a)
+
+    def test_27(self):
+        b = "d.viewvalues()"
+        a = "d.values()"
+        self.check(b, a)
+
+    def test_14(self):
+        b = "[i for i in d.viewkeys()]"
+        a = "[i for i in d.keys()]"
+        self.check(b, a)
+
+    def test_15(self):
+        b = "(i for i in d.viewkeys())"
+        a = "(i for i in d.keys())"
+        self.check(b, a)
+
+    def test_17(self):
+        b = "iter(d.viewkeys())"
+        a = "iter(d.keys())"
+        self.check(b, a)
+
+    def test_18(self):
+        b = "list(d.viewkeys())"
+        a = "list(d.keys())"
+        self.check(b, a)
+
+    def test_19(self):
+        b = "sorted(d.viewkeys())"
+        a = "sorted(d.keys())"
+        self.check(b, a)
+
 class Test_xrange(FixerTestCase):
     fixer = "xrange"
 

Modified: python/branches/py3k/Lib/lib2to3/tests/test_parser.py
==============================================================================
--- python/branches/py3k/Lib/lib2to3/tests/test_parser.py	(original)
+++ python/branches/py3k/Lib/lib2to3/tests/test_parser.py	Sat Jan 30 12:05:48 2010
@@ -206,6 +206,6 @@
     finally:
         f.close()
     try:
-        return os.system("diff -u %s @" % fn)
+        return os.system("diff -u %r @" % fn)
     finally:
         os.remove("@")


More information about the Python-checkins mailing list