Ejemplo n.º 1
0
  def test_remove_full_importfrom(self):
    src = "from m import a"
    tree = ast.parse(src)
    sc = scope.analyze(tree)

    a_node = tree.body[0].names[0]

    import_utils.remove_import_alias_node(sc, a_node)

    self.assertEqual(len(tree.body), 0)
Ejemplo n.º 2
0
        def test_remove_full_importfrom(self):
            src = 'from m import a'
            tree = pasta.ast_parse(src, py_ver)
            sc = scope.analyze(tree, py_ver)

            a_node = tree.body[0].names[0]

            import_utils.remove_import_alias_node(sc, a_node, py_ver=py_ver)

            self.assertEqual(len(tree.body), 0)
Ejemplo n.º 3
0
  def test_remove_just_alias_import_from(self):
    src = "from m import a, b"
    tree = ast.parse(src)
    sc = scope.analyze(tree)

    unused_b_node = tree.body[0].names[1]

    import_utils.remove_import_alias_node(sc, unused_b_node)

    self.assertEqual(len(tree.body), 1)
    self.assertEqual(type(tree.body[0]), ast.ImportFrom)
    self.assertEqual(len(tree.body[0].names), 1)
    self.assertEqual(tree.body[0].names[0].name, 'a')
Ejemplo n.º 4
0
        def test_remove_just_alias_import_from(self):
            src = 'from m import a, b'
            tree = pasta.ast_parse(src, py_ver)
            sc = scope.analyze(tree, py_ver)

            unused_b_node = tree.body[0].names[1]

            import_utils.remove_import_alias_node(sc,
                                                  unused_b_node,
                                                  py_ver=py_ver)

            self.assertEqual(len(tree.body), 1)
            self.assertEqual(type(tree.body[0]), pasta.ast(py_ver).ImportFrom)
            self.assertEqual(len(tree.body[0].names), 1)
            self.assertEqual(tree.body[0].names[0].name, 'a')
Ejemplo n.º 5
0
    def _convert_external_reference(self):
        """Convert import statements."""
        name_replace = APIAnalysisSpec.import_name_mapping
        replace_imports = list(name_replace.values())

        for ref_info in self._code_analyzer.external_references.values():
            external_ref_info = ref_info['external_ref_info']
            parent_node = ref_info['parent_node']
            if parent_node is None:
                continue
            code = pasta.dump(parent_node)
            if external_ref_info.name in APIAnalysisSpec.get_convertible_external_names(
            ):
                external_ref_info = ref_info['external_ref_info']
                if external_ref_info.name in name_replace.keys():
                    import_utils.remove_import_alias_node(
                        self._code_analyzer.root_scope, external_ref_info.node)
                    replace_info = name_replace[external_ref_info.name]
                    new_ref_name = replace_info[1]
                    new_external_name = replace_info[0]
                    if new_ref_name:
                        new_code = f'import {new_external_name} as {new_ref_name}'
                    else:
                        new_code = f'import {new_external_name}'

                    self._process_log.info(
                        parent_node.lineno, parent_node.col_offset,
                        LOG_FMT_CONVERT % (code.strip(), new_code.strip()))
            elif external_ref_info.name.startswith('torch.'):
                self._process_log.warning(
                    parent_node.lineno, parent_node.col_offset,
                    LOG_FMT_NOT_CONVERT %
                    (code.strip(), LOG_SUGGESTION_MANUAL_CONVERT))
            else:
                pass

        # Insert import in reverse order, display in forward order.
        for idx in range(len(replace_imports) - 1, -1, -1):
            replace_import = replace_imports[idx]
            if replace_import[1]:
                self._add_import(name_to_import=replace_import[0],
                                 as_name=replace_import[1])
            else:
                self._add_import(name_to_import=replace_import[0])