[Python-checkins] r57913 - in sandbox/trunk/2to3: refactor.py tests/test_fixers.py

collin.winter python-checkins at python.org
Mon Sep 3 04:55:43 CEST 2007


Author: collin.winter
Date: Mon Sep  3 04:55:38 2007
New Revision: 57913

Modified:
   sandbox/trunk/2to3/refactor.py
   sandbox/trunk/2to3/tests/test_fixers.py
Log:
Refactor refactor.py to make it somewhat easier to use as a library.

Modified: sandbox/trunk/2to3/refactor.py
==============================================================================
--- sandbox/trunk/2to3/refactor.py	(original)
+++ sandbox/trunk/2to3/refactor.py	Mon Sep  3 04:55:38 2007
@@ -213,12 +213,7 @@
             if self.options.doctests_only:
                 input = f.read()
             else:
-                try:
-                    tree = self.driver.parse_file(filename)
-                except Exception, err:
-                    self.log_error("Can't parse %s: %s: %s",
-                                   filename, err.__class__.__name__, err)
-                    return
+                tree = self.refactor_stream(f, filename)
         finally:
             f.close()
         if self.options.doctests_only:
@@ -230,19 +225,39 @@
             elif self.options.verbose:
                 self.log_message("No doctest changes in %s", filename)
         else:
-            if self.options.verbose:
-                self.log_message("Refactoring %s", filename)
-            if self.refactor_tree(tree, filename):
+            if tree.was_changed:
                 self.write_file(str(tree), filename)
             elif self.options.verbose:
                 self.log_message("No changes in %s", filename)
 
+    def refactor_stream(self, stream, name):
+        """Refactor an stream, pullin from a given file-like object.
+        
+        Args:
+            stream: a file-like object to pull data from.
+            name: a human-readable name for the stream.
+            
+        Returns:
+            An AST corresponding to the refactored input stream; None if
+            there were errors during the parse.
+        """
+        try:
+            tree = self.driver.parse_stream(stream)
+        except Exception, err:
+            self.log_error("Can't parse %s: %s: %s",
+                           name, err.__class__.__name__, err)
+            return
+        if self.options.verbose:
+            self.log_message("Refactoring %s", name)
+        self.refactor_tree(tree, name)
+        return tree
+
     def refactor_stdin(self):
         if self.options.write:
             self.log_error("Can't write changes back to stdin")
             return
-        input = sys.stdin.read()
         if self.options.doctests_only:
+            input = sys.stdin.read()
             if self.options.verbose:
                 self.log_message("Refactoring doctests in stdin")
             output = self.refactor_docstring(input, "<stdin>")
@@ -251,15 +266,8 @@
             elif self.options.verbose:
                 self.log_message("No doctest changes in stdin")
         else:
-            if self.options.verbose:
-                self.log_message("Refactoring stdin")
-            try:
-                tree = self.driver.parse_string(input)
-            except Exception, err:
-                self.log_error("Can't parse stdin: %s: %s",
-                               err.__class__.__name__, err)
-                return
-            if self.refactor_tree(tree, "<stdin>"):
+            tree = self.refactor_stream(sys.stdin, "<stdin>")
+            if tree.was_changed:
                 self.write_file(str(tree), "<stdin>", input)
             elif self.options.verbose:
                 self.log_message("No changes in stdin")

Modified: sandbox/trunk/2to3/tests/test_fixers.py
==============================================================================
--- sandbox/trunk/2to3/tests/test_fixers.py	(original)
+++ sandbox/trunk/2to3/tests/test_fixers.py	Mon Sep  3 04:55:38 2007
@@ -62,8 +62,8 @@
     def _check(self, before, after):
         before = support.reformat(before)
         after = support.reformat(after)
-        refactored, tree = self.refactor_stream("<string>", StringIO(before))
-        self.failUnlessEqual(after, refactored)
+        tree = self.refactor.refactor_stream(StringIO(before), "<string>")
+        self.failUnlessEqual(after, str(tree))
         return tree
 
     def check(self, before, after, ignore_warnings=False):
@@ -86,11 +86,6 @@
         if not ignore_warnings:
             self.failUnlessEqual(self.logging_stream.getvalue(), "")
 
-    def refactor_stream(self, stream_name, stream):
-        tree = self.refactor.driver.parse_stream(stream)
-        self.refactor.refactor_tree(tree, stream_name)
-        return str(tree), tree
-
 
 class Test_ne(FixerTestCase):
     fixer = "ne"


More information about the Python-checkins mailing list