[Python-checkins] distutils2: replacing a string by a list when possible

tarek.ziade python-checkins at python.org
Fri May 14 22:36:12 CEST 2010


tarek.ziade pushed 89afa1684670 to distutils2:

http://hg.python.org/distutils2/rev/89afa1684670
changeset:   150:89afa1684670
user:        Tarek Ziade <tarek at ziade.org>
date:        Fri May 14 17:53:48 2010 +0200
summary:     replacing a string by a list when possible
files:       src/distutils2/converter/fixers/fix_setup_options.py, src/distutils2/tests/conversions/03_after.py

diff --git a/src/distutils2/converter/fixers/fix_setup_options.py b/src/distutils2/converter/fixers/fix_setup_options.py
--- a/src/distutils2/converter/fixers/fix_setup_options.py
+++ b/src/distutils2/converter/fixers/fix_setup_options.py
@@ -5,7 +5,7 @@
 """
 
 # Local imports
-from lib2to3 import pytree
+from lib2to3.pytree import Leaf, Node
 from lib2to3.pgen2 import token
 from lib2to3 import fixer_base
 from lib2to3.fixer_util import Assign, Name, Newline, Number, Subscript, syms
@@ -20,6 +20,7 @@
               'long_description': 'description',
               'description': 'summary',
               'install_requires': 'requires_dist'}
+_SEQUENCE_NAMES = ['requires_dist']
 
 
 class FixSetupOptions(fixer_base.BaseFix):
@@ -30,14 +31,35 @@
             power< name='setup' trailer< '(' [any] ')' > any* >
               """
 
+    def _get_list(self, *nodes):
+        """A List node, filled"""
+        lbrace = Leaf(token.LBRACE, u"[")
+        lbrace.prefix = u" "
+        if len(nodes) > 0:
+            nodes[0].prefix = u""
+        return Node(self.syms.trailer,
+                    [lbrace]+
+                    [node.clone() for node in nodes] +
+                    [Leaf(token.RBRACE, u"]")])
+
     def _fix_name(self, argument, remove_list):
         name = argument.children[0]
-        sibling = name.get_next_sibling()
+        next = name.get_next_sibling
+        sibling = next()
         if sibling is None or sibling.type != token.EQUAL:
             return False
 
         if name.value in _OLD_NAMES:
             name.value = _OLD_NAMES[name.value]
+            if name.value in _SEQUENCE_NAMES:
+                right_operand = next().get_next_sibling()
+                # replacing string -> list[string]
+                if right_operand.type == token.STRING:
+                    # we want this to be a list now
+                    new_node = self._get_list(right_operand)
+                    right_operand.replace(new_node)
+
+
             return True
 
         return False
diff --git a/src/distutils2/tests/conversions/03_after.py b/src/distutils2/tests/conversions/03_after.py
--- a/src/distutils2/tests/conversions/03_after.py
+++ b/src/distutils2/tests/conversions/03_after.py
@@ -80,7 +80,7 @@
     packages = ['zc', 'zc.buildout'],
     package_dir = {'': 'src'},
     namespace_packages = ['zc'],
-    requires_dist = 'setuptools',
+    requires_dist = ['setuptools'],
     include_package_data = True,
     entry_points = entry_points,
     zip_safe=False,

--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list