def visit_importfrom(self, node): """visit an astroid.ImportFrom node resolve module dependencies """ basename = node.modname context_file = node.root().file if context_file is not None: relative = modutils.is_relative(basename, context_file) else: relative = False for name in node.names: if name[0] == "*": continue # analyze dependencies fullname = "%s.%s" % (basename, name[0]) if fullname.find(".") > -1: try: # TODO: don't use get_module_part, # missing package precedence fullname = modutils.get_module_part(fullname, context_file) except ImportError: continue if fullname != basename: self._imported_module(node, fullname, relative)
def visit_importfrom(self, node): """visit an astroid.From node resolve module dependencies """ basename = node.modname context_file = node.root().file if context_file is not None: relative = modutils.is_relative(basename, context_file) else: relative = False for name in node.names: if name[0] == '*': continue # analyze dependencies fullname = '%s.%s' % (basename, name[0]) if fullname.find('.') > -1: try: # TODO: don't use get_module_part, # missing package precedence fullname = modutils.get_module_part(fullname, context_file) except ImportError: continue if fullname != basename: self._imported_module(node, fullname, relative)
def visit_import(self, node): """visit an astroid.Import node resolve module dependencies """ context_file = node.root().file for name in node.names: relative = modutils.is_relative(name[0], context_file) self._imported_module(node, name[0], relative)
def visit_importfrom(self, node): """visit an astroid.ImportFrom node resolve module dependencies """ basename = node.modname context_file = node.root().file if context_file is not None: relative = modutils.is_relative(basename, context_file) else: relative = False for name in node.names: if name[0] == "*": continue # analyze dependencies fullname = f"{basename}.{name[0]}" if fullname.find(".") > -1: try: fullname = modutils.get_module_part(fullname, context_file) except ImportError: continue if fullname != basename: self._imported_module(node, fullname, relative)
def test_known_values_is_relative_5(self) -> None: self.assertFalse( modutils.is_relative("objectmodel", astroid.interpreter._import.spec.__file__))
def test_known_values_is_relative_4(self) -> None: self.assertTrue( modutils.is_relative("util", astroid.interpreter._import.spec.__file__))
def test_known_values_is_relative_3(self) -> None: self.assertFalse(modutils.is_relative("astroid", astroid.__path__[0]))
def _check_third_party_import(self, node, modname): if modname in self.known_std_modules: # Don't even care about these return module_file = node.root().file if is_relative(modname, module_file): # Is the import relative to the curent module being checked return base_modname = modname.split('.', 1)[0] import_modname = modname while True: try: imported_module = node.do_import_module(import_modname) if not imported_module: break if imported_module.file.startswith(self.cwd): # This is an import to package under the project being tested return # If we reached this far, we were able to import the module but it's # not considered a module from within the project being checked break except Exception: # pylint: disable=broad-except # This is, for example, from salt.ext.six.moves import Y # Because `moves` is a dynamic/runtime module import_modname = import_modname.rsplit('.', 1)[0] if import_modname == base_modname or not import_modname: break try: if not is_standard_module(modname): if self._inside_try_except is False: if get_import_package( modname) in self.allowed_3rd_party_modules: return if self._inside_if or self._inside_funcdef: message_id = '3rd-party-local-module-not-gated' else: message_id = '3rd-party-module-not-gated' self.add_message(message_id, node=node, args=modname) except astroid.exceptions.AstroidBuildingException: # Failed to import if self._inside_try_except is False: if get_import_package( modname) in self.allowed_3rd_party_modules: return if self._inside_if or self._inside_funcdef: message_id = '3rd-party-local-module-not-gated' else: message_id = '3rd-party-module-not-gated' self.add_message(message_id, node=node, args=modname) except astroid.exceptions.InferenceError: # Failed to import if self._inside_try_except is False: if get_import_package( modname) in self.allowed_3rd_party_modules: return if self._inside_if or self._inside_funcdef: message_id = '3rd-party-local-module-not-gated' else: message_id = '3rd-party-module-not-gated' self.add_message(message_id, node=node, args=modname) except ImportError: # Definitly not a standard library import if self._inside_try_except is False: if get_import_package( modname) in self.allowed_3rd_party_modules: return if self._inside_if or self._inside_funcdef: message_id = '3rd-party-local-module-not-gated' else: message_id = '3rd-party-module-not-gated' self.add_message(message_id, node=node, args=modname)
def test_knownValues_is_relative_2(self): from logilab.common import tree self.assertEqual(modutils.is_relative('modutils', tree.__file__), True)
def test_deep_relative4(self) -> None: self.assertTrue( modutils.is_relative("etree.gibberish", xml.__path__[0]))
def test_knownValues_is_relative_3(self): self.assertFalse(modutils.is_relative('astroid', astroid.__path__[0]))
def test_knownValues_is_relative_2(self): self.assertTrue(modutils.is_relative('ElementPath', etree.ElementTree.__file__))
def test_knownValues_is_relative_1(self): self.assertTrue(modutils.is_relative('utils', email.__path__[0]))
def test_knownValues_is_relative_3(self): import astroid self.assertEqual(modutils.is_relative('astroid', astroid.__path__[0]), False)
def test_knownValues_is_relative_1(self): import email self.assertEqual(modutils.is_relative('utils', email.__path__[0]), True)
def test_deep_relative2(self) -> None: self.assertFalse(modutils.is_relative("ElementTree", xml.__path__[0]))
def test_deep_relative3(self) -> None: self.assertTrue( modutils.is_relative("etree.ElementTree", xml.__path__[0]))
def test_is_relative_bad_path(self) -> None: self.assertFalse( modutils.is_relative("ElementTree", os.path.join(xml.__path__[0], "ftree")))
def test_knownValues_is_relative_1(self): import astroid self.assertEqual(modutils.is_relative('modutils', astroid.__path__[0]), True)
def test_knownValues_is_relative_2(self): from xml.etree import ElementTree self.assertEqual( modutils.is_relative('ElementPath', ElementTree.__file__), True)
def test_knownValues_is_relative_2(self): from xml.etree import ElementTree self.assertEqual(modutils.is_relative('ElementPath', ElementTree.__file__), True)
def test_deep_relative(self): self.assertTrue( modutils.is_relative("ElementTree", xml.etree.__path__[0]))
def test_known_values_is_relative_1(self) -> None: self.assertTrue(modutils.is_relative("utils", email.__path__[0]))