def rename_file(file_path, path_to_moved_imports_file): """ Iterates over the content of a file, looking for imports to be changed :param str file_path: Path of the file being parsed. :param str path_to_moved_imports_file: Path of the file with the list of changed imports. """ list_with_moved_imports = _get_list_of_moved_imports( path_to_moved_imports_file) with open(file_path, mode='r') as file: tree = pasta.parse(file.read()) for old_path, new_path in list_with_moved_imports: try: rename.rename_external(tree, old_path, new_path) except ValueError: raise click.ClickException( "An error has occurred on the following path: {0} ,\n " "while trying to rename from: {1} to {2}".format( file_path, old_path, new_path)) source_code = pasta.dump(tree) with open(file_path, mode='w') as file: file.write(source_code)
def execute_rename(file_path, moved_imports): if six.PY2: import imp import_from_user = imp.load_source('moved_imports', moved_imports) else: import importlib.util spec = importlib.util.spec_from_file_location("moved_imports", moved_imports) import_from_user = importlib.util.module_from_spec(spec) spec.loader.exec_module(import_from_user) with open(file_path, mode='r') as file: tree = pasta.parse(file.read()) for class_to_move in import_from_user.imports_to_move: old_path = class_to_move[0] new_path = class_to_move[1] try: rename.rename_external(tree, old_path, new_path) except ValueError: click.ClickException( "Some error happened on the following path: {0}.\n " "While trying to rename from: {1} to {2}".format( file_path, old_path, new_path)) source_code = pasta.dump(tree) with open(file_path, mode='w') as file: file.write(source_code)
def test_rename_external_in_importfrom(self): src = 'from aaa.bbb.ccc import ddd\nddd.foo()' t = ast.parse(src) self.assertTrue(rename.rename_external(t, 'aaa.bbb', 'xxx.yyy')) self.checkAstsEqual( t, ast.parse('from xxx.yyy.ccc import ddd\nddd.foo()')) t = ast.parse(src) self.assertTrue(rename.rename_external(t, 'aaa.bbb.ccc', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse('from xxx.yyy import ddd\nddd.foo()')) t = ast.parse(src) self.assertFalse(rename.rename_external(t, 'bbb', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse(src))
def test_rename_external_in_import(self): src = 'import aaa.bbb.ccc\naaa.bbb.ccc.foo()' t = ast.parse(src) self.assertTrue(rename.rename_external(t, 'aaa.bbb', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse('import xxx.yyy.ccc\nxxx.yyy.ccc.foo()')) t = ast.parse(src) self.assertTrue(rename.rename_external(t, 'aaa.bbb.ccc', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse('import xxx.yyy\nxxx.yyy.foo()')) t = ast.parse(src) self.assertFalse(rename.rename_external(t, 'bbb', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse(src))
def test_rename_external_in_importfrom_alias(self): src = 'from aaa.bbb import ccc\nccc.foo()' t = pasta.ast_parse(src, py_ver) self.assertTrue( rename.rename_external(t, 'aaa.bbb.ccc', 'xxx.yyy', py_ver)) self.checkAstsEqual( t, pasta.ast_parse('from xxx import yyy\nyyy.foo()', py_ver), py_ver)
def test_rename_external_in_import_multiple_aliases(self): src = 'import aaa, aaa.bbb, aaa.bbb.ccc' t = pasta.ast_parse(src, py_ver) self.assertTrue( rename.rename_external(t, 'aaa.bbb', 'xxx.yyy', py_ver)) self.checkAstsEqual( t, pasta.ast_parse('import aaa, xxx.yyy, xxx.yyy.ccc', py_ver), py_ver)
def test_rename_external_in_import_with_asname(self): src = 'import aaa.bbb.ccc as ddd\nddd.foo()' t = pasta.ast_parse(src, py_ver) self.assertTrue( rename.rename_external(t, 'aaa.bbb', 'xxx.yyy', py_ver)) self.checkAstsEqual( t, pasta.ast_parse('import xxx.yyy.ccc as ddd\nddd.foo()', py_ver), py_ver)
def test_rename_external_in_importfrom(self): src = 'from aaa.bbb.ccc import ddd\nddd.foo()' t = pasta.ast_parse(src, py_ver) self.assertTrue( rename.rename_external(t, 'aaa.bbb', 'xxx.yyy', py_ver)) self.checkAstsEqual( t, pasta.ast_parse('from xxx.yyy.ccc import ddd\nddd.foo()', py_ver), py_ver) t = pasta.ast_parse(src, py_ver) self.assertTrue( rename.rename_external(t, 'aaa.bbb.ccc', 'xxx.yyy', py_ver)) self.checkAstsEqual( t, pasta.ast_parse('from xxx.yyy import ddd\nddd.foo()', py_ver), py_ver) t = pasta.ast_parse(src, py_ver) self.assertFalse( rename.rename_external(t, 'bbb', 'xxx.yyy', py_ver)) self.checkAstsEqual(t, pasta.ast_parse(src, py_ver), py_ver)
def test_rename_external_in_import(self): src = 'import aaa.bbb.ccc\naaa.bbb.ccc.foo()' t = pasta.ast_parse(src, py_ver) self.assertTrue( rename.rename_external(t, 'aaa.bbb', 'xxx.yyy', py_ver)) self.checkAstsEqual( t, pasta.ast_parse('import xxx.yyy.ccc\nxxx.yyy.ccc.foo()', py_ver), py_ver) t = pasta.ast_parse(src, py_ver) self.assertTrue( rename.rename_external(t, 'aaa.bbb.ccc', 'xxx.yyy', py_ver)) self.checkAstsEqual( t, pasta.ast_parse('import xxx.yyy\nxxx.yyy.foo()', py_ver), py_ver) t = pasta.ast_parse(src, py_ver) self.assertFalse( rename.rename_external(t, 'bbb', 'xxx.yyy', py_ver)) self.checkAstsEqual(t, pasta.ast_parse(src, py_ver), py_ver)
def test_rename_external_in_importfrom_alias_with_asname(self): src = 'from aaa.bbb import ccc as abc\nabc.foo()' t = ast.parse(src) self.assertTrue(rename.rename_external(t, 'aaa.bbb.ccc', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse('from xxx import yyy as abc\nabc.foo()'))
def test_rename_external_in_import_multiple_aliases(self): src = 'import aaa, aaa.bbb, aaa.bbb.ccc' t = ast.parse(src) self.assertTrue(rename.rename_external(t, 'aaa.bbb', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse('import aaa, xxx.yyy, xxx.yyy.ccc'))
def test_rename_external_in_import_with_asname(self): src = 'import aaa.bbb.ccc as ddd\nddd.foo()' t = ast.parse(src) self.assertTrue(rename.rename_external(t, 'aaa.bbb', 'xxx.yyy')) self.checkAstsEqual(t, ast.parse('import xxx.yyy.ccc as ddd\nddd.foo()'))