def _load_regex_patterns()

in azdev/operations/secret.py [0:0]


def _load_regex_patterns(confidence_level=None, custom_pattern=None):
    built_in_regex_patterns = _load_built_in_regex_patterns(confidence_level)

    if not custom_pattern:
        return built_in_regex_patterns

    try:
        if os.path.isfile(custom_pattern):
            with open(custom_pattern, 'r', encoding='utf8') as f:
                custom_pattern = json.load(f)
        else:
            custom_pattern = json.loads(custom_pattern)
    except JSONDecodeError as err:
        raise ValueError(f'Custom pattern should be in valid json format, err:{err.msg}')

    regex_patterns = []
    if 'Include' in custom_pattern:
        for pattern in custom_pattern['Include']:
            if not pattern.get('Pattern', None):
                raise ValueError(f'Invalid Custom Pattern: {pattern}, '
                                 f'"Pattern" property is required for Include patterns')
            regex_patterns.append(load_regex_pattern_from_json(pattern))
    if "Exclude" in custom_pattern:
        exclude_pattern_ids = []
        for pattern in custom_pattern['Exclude']:
            if not pattern.get('Id', None):
                raise ValueError(f'Invalid Custom Pattern: {pattern}, "Id" property is required for Exclude patterns')
            exclude_pattern_ids.append(pattern['Id'])
        for pattern in built_in_regex_patterns:
            if pattern.id in exclude_pattern_ids:
                continue
            regex_patterns.append(pattern)
    else:
        regex_patterns.extend(built_in_regex_patterns)
    return regex_patterns