78 severity = warning_type.severity, |
78 severity = warning_type.severity, |
79 message = warning_type.placeholder_message(), |
79 message = warning_type.placeholder_message(), |
80 )) |
80 )) |
81 exit(0) |
81 exit(0) |
82 |
82 |
|
83 def format_report(report, model, test_suite, *, use_colors = True): |
|
84 from testsuite import problem_text |
|
85 messages = [] |
|
86 for problem in report['problems']: |
|
87 text_colour = '' |
|
88 if use_colors: |
|
89 if problem.severity == 'hold': |
|
90 text_colour = colorama.Fore.LIGHTRED_EX |
|
91 elif problem.severity == 'warning': |
|
92 text_colour = colorama.Fore.LIGHTBLUE_EX |
|
93 ldraw_code = model.body[problem.body_index].textual_representation() |
|
94 message = str.format( |
|
95 '{text_colour}{model_name}:{line_number}: {problem_type}: {message}' |
|
96 '{colour_reset}\n\t{ldraw_code}', |
|
97 text_colour = text_colour, |
|
98 model_name = model.name, |
|
99 line_number = problem.line_number, |
|
100 problem_type = problem.severity, |
|
101 message = problem_text(problem, test_suite), |
|
102 colour_reset = use_colors and colorama.Fore.RESET or '', |
|
103 ldraw_code = ldraw_code, |
|
104 ) |
|
105 messages.append(message) |
|
106 return '\n'.join(messages) |
|
107 |
83 if __name__ == '__main__': |
108 if __name__ == '__main__': |
84 from sys import argv |
109 from sys import argv |
85 parser = argparse.ArgumentParser() |
110 parser = argparse.ArgumentParser() |
86 parser.add_argument('filename') |
111 parser.add_argument('filename') |
87 parser.add_argument('--list', |
112 parser.add_argument('--list', |
99 ) |
124 ) |
100 parser.add_argument('--subfile', |
125 parser.add_argument('--subfile', |
101 action = 'store_true', |
126 action = 'store_true', |
102 help = 'finds a subfile by name and prints out information about it' |
127 help = 'finds a subfile by name and prints out information about it' |
103 ) |
128 ) |
|
129 parser.add_argument('--color', |
|
130 action = 'store_true', |
|
131 help = 'use colors' |
|
132 ) |
104 args = parser.parse_args() |
133 args = parser.parse_args() |
105 config = load_config('ldcheck.cfg') |
134 config = load_config('ldcheck.cfg') |
106 for ldconfig_ldr_path in find_ldconfig_ldr_paths(config): |
135 for ldconfig_ldr_path in find_ldconfig_ldr_paths(config): |
107 with ldconfig_ldr_path.open() as ldconfig_ldr: |
136 with ldconfig_ldr_path.open() as ldconfig_ldr: |
108 load_colours(ldconfig_ldr) |
137 load_colours(ldconfig_ldr) |
|
138 if args.color: |
|
139 try: |
|
140 import colorama |
|
141 colorama.init() |
|
142 except ImportError: |
|
143 from sys import stderr |
|
144 print('Use of --color requires the colorama module, disabling colours', file = stderr) |
|
145 args.color = False |
109 if args.subfile: |
146 if args.subfile: |
110 import filecache |
147 import filecache |
111 cache = filecache.SubfileCache( |
148 cache = filecache.SubfileCache( |
112 ldraw_directories = config['libraries'], |
149 ldraw_directories = config['libraries'], |
113 ) |
150 ) |
136 print(entry) |
173 print(entry) |
137 elif args.rebuild: |
174 elif args.rebuild: |
138 for entry in model.body: |
175 for entry in model.body: |
139 print(entry.textual_representation(), end = '\r\n') |
176 print(entry.textual_representation(), end = '\r\n') |
140 else: |
177 else: |
141 from testsuite import load_tests, check_model, format_report |
178 from testsuite import load_tests, check_model |
142 test_suite = load_tests() |
179 test_suite = load_tests() |
143 report = check_model(model, test_suite) |
180 report = check_model(model, test_suite) |
144 print(format_report(report, model, test_suite)) |
181 print(format_report(report, model, test_suite, use_colors = args.color)) |