108 ) |
108 ) |
109 messages.append(message) |
109 messages.append(message) |
110 return '\n'.join(messages) |
110 return '\n'.join(messages) |
111 |
111 |
112 if __name__ == '__main__': |
112 if __name__ == '__main__': |
113 from sys import argv |
113 from sys import argv, stderr, exit |
114 parser = argparse.ArgumentParser() |
114 parser = argparse.ArgumentParser() |
115 parser.add_argument('filename') |
115 parser.add_argument('filename') |
116 parser.add_argument('--list', |
116 parser.add_argument('--list', |
117 action = ListProblemsAction, |
117 action = ListProblemsAction, |
118 help = 'lists all possible problem types and exit', |
118 help = 'lists all possible problem types and exit', |
165 else: |
164 else: |
166 print('Flat dimensions:', repr(subfile.flatness)) |
165 print('Flat dimensions:', repr(subfile.flatness)) |
167 print('Description:', repr(subfile.description)) |
166 print('Description:', repr(subfile.description)) |
168 print('Contains studs:', repr(subfile.has_studs)) |
167 print('Contains studs:', repr(subfile.has_studs)) |
169 else: |
168 else: |
170 with open(args.filename, 'rb') as file: |
169 try: |
171 from os.path import basename |
170 with open(args.filename, 'rb') as file: |
172 model = parse.read_ldraw( |
171 from os.path import basename |
173 file, |
172 model = parse.read_ldraw( |
174 name = basename(args.filename), |
173 file, |
175 ldraw_directories = config['libraries']) |
174 name = basename(args.filename), |
176 if args.dump: |
175 ldraw_directories = config['libraries']) |
177 print('header: ' + type(model.header).__name__) |
176 if args.dump: |
178 for key in sorted(dir(model.header)): |
177 print('header: ' + type(model.header).__name__) |
179 if not key.startswith('__'): |
178 for key in sorted(dir(model.header)): |
180 print('\t' + key + ': ' + repr(getattr(model.header, key))) |
179 if not key.startswith('__'): |
181 for i, entry in enumerate(model.body): |
180 print('\t' + key + ': ' + repr(getattr(model.header, key))) |
182 if model.header.valid and i == model.header_size: |
181 for i, entry in enumerate(model.body): |
183 print('--------- End of header') |
182 if model.header.valid and i == model.header_size: |
184 print(entry) |
183 print('--------- End of header') |
185 elif args.rebuild: |
184 print(entry) |
186 for entry in model.body: |
185 elif args.rebuild: |
187 print(entry.textual_representation(), end = '\r\n') |
186 for entry in model.body: |
188 else: |
187 print(entry.textual_representation(), end = '\r\n') |
189 from testsuite import load_tests, check_model |
188 else: |
190 test_suite = load_tests() |
189 from testsuite import load_tests, check_model |
191 report = check_model(model, test_suite) |
190 test_suite = load_tests() |
192 print(format_report(report, model, test_suite, use_colors = args.color)) |
191 report = check_model(model, test_suite) |
|
192 print(format_report( |
|
193 report, |
|
194 model, |
|
195 test_suite, |
|
196 use_colors = args.color |
|
197 )) |
|
198 except FileNotFoundError: |
|
199 print(str.format( |
|
200 'no such file: {filename!r}', |
|
201 filename = args.filename |
|
202 ), file = stderr) |
|
203 exit(1) |