pylint/checkers/logging.py
def _check_log_method(self, node, name):
        """Checks calls to logging.log(level, format, *format_args)."""
        if name == "log":
            if node.starargs or node.kwargs or len(node.args) < 2:
                # Either a malformed call, star args, or double-star args. Beyond
                # the scope of this checker.
                return
            format_pos = 1
        elif name in CHECKED_CONVENIENCE_FUNCTIONS:
            if node.starargs or node.kwargs or not node.args:
                # Either no args, star args, or double-star args. Beyond the
                # scope of this checker.
                return
            format_pos = 0
        else:
            return

        if isinstance(node.args[format_pos], astroid.BinOp):
            binop = node.args[format_pos]
            emit = binop.op == "%"
            if binop.op == "+":
                total_number_of_strings = sum(
                    1
                    for operand in (binop.left, binop.right)
                    if self._is_operand_literal_str(utils.safe_infer(operand))
                )
                emit = total_number_of_strings > 0
            if emit:
                self.add_message("logging-not-lazy", node=node)
        elif isinstance(node.args[format_pos], astroid.Call):
            self._check_call_func(node.args[format_pos])
        elif isinstance(node.args[format_pos], astroid.Const):
            self._check_format_string(node, format_pos)
        elif isinstance(
            node.args[format_pos], (astroid.FormattedValue, astroid.JoinedStr)
        ):
            self.add_message("logging-fstring-interpolation", node=node)
def _check_log_method(self, node, name):
        """Checks calls to logging.log(level, format, *format_args)."""
        if name == "log":
            if node.starargs or node.kwargs or len(node.args) < 2:
                # Either a malformed call, star args, or double-star args. Beyond
                # the scope of this checker.
                return
            format_pos = 1
        elif name in CHECKED_CONVENIENCE_FUNCTIONS:
            if node.starargs or node.kwargs or not node.args:
                # Either no args, star args, or double-star args. Beyond the
                # scope of this checker.
                return
            format_pos = 0
        else:
            return

        if isinstance(node.args[format_pos], astroid.BinOp):
            binop = node.args[format_pos]
            emit = binop.op == "%"
            if binop.op == "+":
                total_number_of_strings = sum(
                    1
                    for operand in (binop.left, binop.right)
                    if self._is_operand_literal_str(utils.safe_infer(operand))
                )
                emit = total_number_of_strings > 0
            if emit:
                self.add_message("logging-not-lazy", node=node)
        elif isinstance(node.args[format_pos], astroid.Call):
            self._check_call_func(node.args[format_pos])
        elif isinstance(node.args[format_pos], astroid.Const):
            self._check_format_string(node, format_pos)
        elif isinstance(
            node.args[format_pos], (astroid.FormattedValue, astroid.JoinedStr)
        ):
            self.add_message("logging-fstring-interpolation", node=node)
def _check_log_method ( self , node , name ) : if name == "log" : if node . starargs or node . kwargs or len ( node . args ) < 2 : # Either a malformed call, star args, or double-star args. Beyond # the scope of this checker. return format_pos = 1 elif name in CHECKED_CONVENIENCE_FUNCTIONS : if node . starargs or node . kwargs or not node . args : # Either no args, star args, or double-star args. Beyond the # scope of this checker. return format_pos = 0 else : return if isinstance ( node . args [ format_pos ] , astroid . BinOp ) : binop = node . args [ format_pos ] emit = binop . op == "%" if binop . op == "+" : total_number_of_strings = sum ( 1 for operand in ( binop . left , binop . right ) if self . _is_operand_literal_str ( utils . safe_infer ( operand ) ) ) emit = total_number_of_strings > 0 if emit : self . add_message ( "logging-not-lazy" , node = node ) elif isinstance ( node . args [ format_pos ] , astroid . Call ) : self . _check_call_func ( node . args [ format_pos ] ) elif isinstance ( node . args [ format_pos ] , astroid . Const ) : self . _check_format_string ( node , format_pos ) elif isinstance ( node . args [ format_pos ] , ( astroid . FormattedValue , astroid . JoinedStr ) ) : self . add_message ( "logging-fstring-interpolation" , node = node )
Checks calls to logging.log(level, format, *format_args).
Checks calls to logging . log ( level format * format_args ) .