示例#1
0
    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)
示例#2
0
    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)
示例#4
0
    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)
示例#5
0
    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]))
示例#9
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)
示例#10
0
 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]))
示例#12
0
 def test_knownValues_is_relative_3(self):
     self.assertFalse(modutils.is_relative('astroid', astroid.__path__[0]))
示例#13
0
 def test_knownValues_is_relative_2(self):
     self.assertTrue(modutils.is_relative('ElementPath',
                                          etree.ElementTree.__file__))
示例#14
0
 def test_knownValues_is_relative_1(self):
     self.assertTrue(modutils.is_relative('utils', email.__path__[0]))
示例#15
0
 def test_knownValues_is_relative_3(self):
     import astroid
     self.assertEqual(modutils.is_relative('astroid', astroid.__path__[0]),
                      False)
示例#16
0
 def test_knownValues_is_relative_2(self):
     from logilab.common import tree
     self.assertEqual(modutils.is_relative('modutils', tree.__file__), True)
示例#17
0
 def test_knownValues_is_relative_1(self):
     import email
     self.assertEqual(modutils.is_relative('utils', email.__path__[0]),
                      True)
 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_knownValues_is_relative_1(self):
     self.assertTrue(modutils.is_relative('utils', email.__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_3(self):
     self.assertFalse(modutils.is_relative('astroid', astroid.__path__[0]))
示例#24
0
 def test_knownValues_is_relative_1(self):
     import astroid
     self.assertEqual(modutils.is_relative('modutils', astroid.__path__[0]),
                      True)
示例#25
0
 def test_knownValues_is_relative_2(self):
     from xml.etree import ElementTree
     self.assertEqual(
         modutils.is_relative('ElementPath', ElementTree.__file__), True)
示例#26
0
 def test_knownValues_is_relative_3(self):
     import astroid
     self.assertEqual(modutils.is_relative('astroid', astroid.__path__[0]),
                      False)
示例#27
0
 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):
     self.assertTrue(modutils.is_relative('ElementPath',
                                          etree.ElementTree.__file__))
示例#29
0
 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]))
示例#31
0
 def test_knownValues_is_relative_1(self):
     import astroid
     self.assertEqual(modutils.is_relative('modutils', astroid.__path__[0]),
                      True)