コード例 #1
0
    def leave_module(self, node: nodes.Module) -> None:
        # Check imports are grouped by category (standard, 3rd party, local)
        std_imports, ext_imports, loc_imports = self._check_imports_order(node)

        # Check that imports are grouped by package within a given category
        met_import: Set[str] = set()  # set for 'import x' style
        met_from: Set[str] = set()  # set for 'from x import y' style
        current_package = None
        for import_node, import_name in std_imports + ext_imports + loc_imports:
            if not self.linter.is_message_enabled("ungrouped-imports",
                                                  import_node.fromlineno):
                continue
            met = met_from if isinstance(import_node,
                                         nodes.ImportFrom) else met_import
            package, _, _ = import_name.partition(".")
            if (current_package and current_package != package
                    and package in met
                    and is_node_in_guarded_import_block(import_node) is False):
                self.add_message("ungrouped-imports",
                                 node=import_node,
                                 args=package)
            current_package = package
            met.add(package)

        self._imports_stack = []
        self._first_non_import_node = None
コード例 #2
0
def _ignore_import_failure(node, modname, ignored_modules):
    for submodule in _qualified_names(modname):
        if submodule in ignored_modules:
            return True

    if is_node_in_guarded_import_block(node):
        # Ignore import failure if part of guarded import block
        # I.e. `sys.version_info` or `typing.TYPE_CHECKING`
        return True

    return node_ignores_exception(node, ImportError)