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)
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)
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')
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')
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])