Anonymous avatar Anonymous committed 590d8ad

fixmodnames: handling nested modules

Comments (0)

Files changed (2)

rope/contrib/fixmodnames.py

     def get_changes(self):
         stack = changestack.ChangeStack(self.project, 'Fixing module names')
         try:
-            for resource in self.project.pycore.get_python_files():
-                modname = resource.name.rsplit('.', 1)[0]
-                if modname == '__init__':
-                    modname = resource.parent.name
-                if not modname.islower():
-                    renamer = rename.Rename(self.project, resource)
-                    changes = renamer.get_changes(modname.lower())
-                    stack.push(changes)
+            while True:
+                for resource in self.project.pycore.get_python_files():
+                    modname = resource.name.rsplit('.', 1)[0]
+                    if modname == '__init__':
+                        modname = resource.parent.name
+                    if not modname.islower():
+                        renamer = rename.Rename(self.project, resource)
+                        changes = renamer.get_changes(modname.lower())
+                        stack.push(changes)
+                        break
+                else:
+                    break
         finally:
             stack.pop_all()
         return stack.merged()

ropetest/contrib/fixmodnamestest.py

         self.assertEquals('import mod2\n', newmod1.read())
         self.assertEquals('import mod1\n', newmod2.read())
 
+    def test_handling_nested_modules(self):
+        pkg = create_package(self.project, 'Pkg')
+        mod = create_module(self.project, 'Pkg.Mod')
+        self.project.do(FixModuleNames(self.project).get_changes())
+        self.assertFalse(pkg.exists())
+        self.assertTrue(self.project.get_resource('pkg/__init__.py').exists())
+        self.assertTrue(self.project.get_resource('pkg/mod.py').exists())
+
 
 if __name__ == '__main__':
     unittest.main()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.