def get_rulesets(masks=None): ''' Load rulesets from masks list. `masks` is a string containing masks separated by semicolon. Shell wildcards are allowed. Load from `rules` directory by default. ''' from glob import glob jsoncomment = re.compile('^\s*//') rules_folder = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'rules') rulesets = [] if not masks: masks = os.path.join(rules_folder, '*') for mask in masks.split(';'): empty_mask = True for rule_file_or_dir in glob(mask): empty_mask = False if os.path.isdir(rule_file_or_dir): rule_files = glob(os.path.join(rule_file_or_dir, '*')) else: rule_files = (rule_file_or_dir,) for rule_file in rule_files: try: # remove comments but preserve the same number of lines jsonrule = ''.join( '\n' if jsoncomment.search(line) else line for line in codecs.open(rule_file, encoding='utf-8').readlines() ) ruleset_dict = json.loads(jsonrule) except ValueError as exc: LOG.error(exc) LOG.error("In file: " + rule_file) continue ruleset = RegularExpressionRuleset(ruleset_dict, os.path.relpath(rule_file, rules_folder)) rulesets.append(ruleset) if empty_mask: LOG.warn('No files matching "{0}" found'.format(mask)) return rulesets
def get_rulesets(masks=None): ''' Load rulesets from masks list. `masks` is a string containing masks separated by semicolon. Shell wildcards are allowed. Load from `rules` directory by default. ''' from glob import glob jsoncomment = re.compile('^\s*//') rules_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'rules') rulesets = [] if not masks: masks = os.path.join(rules_folder, '*') for mask in masks.split(';'): empty_mask = True for rule_file_or_dir in glob(mask): empty_mask = False if os.path.isdir(rule_file_or_dir): rule_files = glob(os.path.join(rule_file_or_dir, '*')) else: rule_files = (rule_file_or_dir, ) for rule_file in rule_files: try: # remove comments but preserve the same number of lines jsonrule = ''.join( '\n' if jsoncomment.search(line) else line for line in codecs.open(rule_file, encoding='utf-8').readlines()) ruleset_dict = json.loads(jsonrule) except ValueError as exc: LOG.error(exc) LOG.error("In file: " + rule_file) continue ruleset = RegularExpressionRuleset( ruleset_dict, os.path.relpath(rule_file, rules_folder)) rulesets.append(ruleset) if empty_mask: LOG.warn('No files matching "{0}" found'.format(mask)) return rulesets