def _check_signatures(lines, **kwargs):
    """Check that the signatures are valid.

    There should be at least three signatures. If not, one of them should be a
    trusted developer/reviewer.

    Formatting supported being: [signature] full name <email@address>

    :param lines: lines (lineno, content) to verify.
    :type lines: list
    :param signatures: list of supported signature
    :type signatures: list
    :param alt_signatures: list of alternative signatures, not counted
    :type alt_signatures: list
    :param trusted: list of trusted reviewers, the e-mail address.
    :type trusted: list
    :param min_reviewers: minimal number of reviewers needed. (Default 3)
    :type min_reviewers: int
    :return: errors as in (code, line number, *args)
    :rtype: list

    """
    trusted = kwargs.get("trusted", ())
    signatures = tuple(kwargs.get("signatures", ()))
    alt_signatures = tuple(kwargs.get("alt_signatures", ()))
    min_reviewers = kwargs.get("min_reviewers", 3)

    matching = []
    errors = []
    signatures += alt_signatures

    test_signatures = re.compile("^({0})".format("|".join(signatures)))
    test_alt_signatures = re.compile("^({0})".format("|".join(alt_signatures)))
    for i, line in lines:
        if signatures and test_signatures.search(line):
            if line.endswith("."):
                errors.append(("M191", i))
            if not alt_signatures or not test_alt_signatures.search(line):
                matching.append(line)
        else:
            errors.append(("M102", i))

    if not matching:
        errors.append(("M101", 1))
        errors.append(("M100", 1))
    elif len(matching) < min_reviewers:
        pattern = re.compile('|'.join(map(lambda x: '<' + re.escape(x) + '>',
                                          trusted)))
        trusted_matching = list(filter(None, map(pattern.search, matching)))
        if len(trusted_matching) == 0:
            errors.append(("M100", 1))

    return errors
def _check_signatures ( lines , ** kwargs ) : trusted = kwargs . get ( "trusted" , ( ) ) signatures = tuple ( kwargs . get ( "signatures" , ( ) ) ) alt_signatures = tuple ( kwargs . get ( "alt_signatures" , ( ) ) ) min_reviewers = kwargs . get ( "min_reviewers" , 3 ) matching = [ ] errors = [ ] signatures += alt_signatures test_signatures = re . compile ( "^({0})" . format ( "|" . join ( signatures ) ) ) test_alt_signatures = re . compile ( "^({0})" . format ( "|" . join ( alt_signatures ) ) ) for i , line in lines : if signatures and test_signatures . search ( line ) : if line . endswith ( "." ) : errors . append ( ( "M191" , i ) ) if not alt_signatures or not test_alt_signatures . search ( line ) : matching . append ( line ) else : errors . append ( ( "M102" , i ) ) if not matching : errors . append ( ( "M101" , 1 ) ) errors . append ( ( "M100" , 1 ) ) elif len ( matching ) < min_reviewers : pattern = re . compile ( '|' . join ( map ( lambda x : '<' + re . escape ( x ) + '>' , trusted ) ) ) trusted_matching = list ( filter ( None , map ( pattern . search , matching ) ) ) if len ( trusted_matching ) == 0 : errors . append ( ( "M100" , 1 ) ) return errors
Check that the signatures are valid.

    There should be at least three signatures. If not, one of them should be a
    trusted developer/reviewer.

    Formatting supported being: [signature] full name <email@address>

    :param lines: lines (lineno, content) to verify.
    :type lines: list
    :param signatures: list of supported signature
    :type signatures: list
    :param alt_signatures: list of alternative signatures, not counted
    :type alt_signatures: list
    :param trusted: list of trusted reviewers, the e-mail address.
    :type trusted: list
    :param min_reviewers: minimal number of reviewers needed. (Default 3)
    :type min_reviewers: int
    :return: errors as in (code, line number, *args)
    :rtype: list