2 # -*- coding: utf-8 -*-
3 ##############################################################################
4 # Copyright (c) 2017 Luke Hinds <lhinds@redhat.com>, Red Hat
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 ##############################################################################
13 Gathers various values from the gate check yaml file and return them to the
16 from __future__ import absolute_import
19 import six.moves.configparser
26 config = six.moves.configparser.RawConfigParser()
27 config.read('anteater.conf')
28 logger = logging.getLogger(__name__)
29 master_list = config.get('config', 'master_list')
30 ignore_list = config.get('config', 'ignore_list')
32 with open(master_list, 'r') as f:
33 ml = yaml.safe_load(f)
35 with open(ignore_list, 'r') as f:
36 il = yaml.safe_load(f)
39 def _remove_nullvalue(contents):
40 if contents and len(contents) > 2 and 'nullvalue' in contents:
41 contents.remove('nullvalue')
45 ret = copy.deepcopy(org)
46 for key in list(set([k for k in org] + [k for k in ded])):
47 if key in org and key in ded:
48 ret[key] = list(set(ret[key] + ded[key]))
49 _remove_nullvalue(ret[key])
55 class GetLists(object):
56 def __init__(self, *args):
57 # Placeholder for future args if more filters are needed
61 def load_project_exception_file(self, project_exceptions, project):
65 for item in project_exceptions:
67 exception_file = item.get(project)
68 if exception_file is not None:
69 with open(exception_file, 'r') as f:
70 ex = yaml.safe_load(f)
73 ml[key][project] = _merge(ml[key][project], ex.get(key, None)) \
74 if project in ml[key] else ex.get(key, None)
77 def binary_list(self, project):
79 default_list = (ml['binaries']['binary_ignore'])
81 logger.error('Key Error processing binary list values')
83 binary_re = re.compile("|".join(default_list),
87 def binary_hash(self, project, patch_file):
88 self.load_project_exception_file(ml.get('project_exceptions'), project)
90 binary_hash = (ml['binaries'][project][patch_file])
97 def file_audit_list(self, project):
99 self.load_project_exception_file(ml.get('project_exceptions'), project)
101 default_list = set((ml['file_audits']['file_names']))
103 logger.error('Key Error processing file_names list values')
105 project_list = set((ml['file_audits'][project]['file_names']))
106 logger.info('file_names waivers found for %s', project)
108 logger.info('No file_names waivers found for %s', project)
110 file_names_re = re.compile("|".join(default_list),
114 file_names_proj_re = re.compile("|".join(project_list),
116 return file_names_re, file_names_proj_re
118 file_names_proj_re = re.compile("")
119 return file_names_re, file_names_proj_re
121 def file_content_list(self, project):
123 self.load_project_exception_file(ml.get('project_exceptions'), project)
125 master_list = (ml['file_audits']['file_contents'])
128 logger.error('Key Error processing file_contents list values')
131 ignore_list = il['file_audits']['file_contents']
134 logger.error('Key Error processing file_contents list values')
137 project_list = ml['file_audits'][project]['file_contents']
140 logger.info('No file_contents waivers found for %s', project)
142 ignore_list_merge = project_list + ignore_list
144 ignore_list_re = re.compile("|".join(ignore_list_merge), flags=re.IGNORECASE)
146 return master_list, ignore_list_re
148 def file_ignore(self):
150 file_ignore = (ml['file_ignore'])
152 logger.error('Key Error processing file_ignore list values')
155 def licence_extensions(self):
157 licence_extensions = (ml['licence']['licence_ext'])
159 logger.error('Key Error processing licence_extensions list values')
160 return licence_extensions
162 def licence_ignore(self):
164 licence_ignore = (ml['licence']['licence_ignore'])
166 logger.error('Key Error processing licence_ignore list values')
167 return licence_ignore