Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:09:25

0001 import sys
0002 import yaml
0003 import re
0004 import argparse
0005 from collections import namedtuple
0006 
0007 
0008 Config = namedtuple(
0009     "Config", ["remove_lines", "replace_lines", "ignore_files"], defaults=[[], [], []]
0010 )
0011 
0012 
0013 class State:
0014     skip_file: bool = False
0015 
0016 
0017 def parse_config(config: Config):
0018     remove_lines = []
0019     for s in config["remove_lines"]:
0020         remove_lines.append(re.compile(s))
0021 
0022     replace_lines = []
0023     for s in config["replace_lines"]:
0024         s, r = list(s.items())[0]
0025         replace_lines.append((re.compile(s), r))
0026 
0027     ignore_files = []
0028     for s in config["ignore_files"]:
0029         ignore_files.append(re.compile(s))
0030 
0031     return Config(
0032         remove_lines=remove_lines,
0033         replace_lines=replace_lines,
0034         ignore_files=ignore_files,
0035     )
0036 
0037 
0038 def filter(line: str, config: Config, state: State):
0039     if state.skip_file:
0040         if line.endswith("---\n"):
0041             state.skip_file = False
0042         return None
0043 
0044     if line.endswith(" should add these lines:\n"):
0045         for s in config.ignore_files:
0046             if s.search(line):
0047                 state.skip_file = True
0048                 return None
0049 
0050     for s in config.remove_lines:
0051         if s.search(line):
0052             return None
0053 
0054     for s, r in config.replace_lines:
0055         if s.search(line):
0056             return s.sub(r, line)
0057 
0058     return line
0059 
0060 
0061 parser = argparse.ArgumentParser()
0062 parser.add_argument("config")
0063 parser.add_argument("input")
0064 parser.add_argument("output")
0065 args = parser.parse_args()
0066 
0067 with open(args.config, "r") as config_file:
0068     try:
0069         config = yaml.safe_load(config_file)
0070         config = parse_config(config)
0071     except yaml.YAMLError as exc:
0072         print(exc)
0073         sys.exit(1)
0074 
0075 with open(args.input, "r") as input_file, open(args.output, "w") as output_file:
0076     state = State()
0077 
0078     for line in input_file:
0079         filtered_line = filter(line, config, state)
0080         if filtered_line is not None:
0081             output_file.write(filtered_line)
0082 
0083 sys.exit(0)