Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
    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))
Пример #4
0
    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))
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
        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)
Пример #9
0
        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)
Пример #10
0
 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()'))
Пример #11
0
 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'))
Пример #12
0
 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()'))