Fri, 18 Sep 2020 20:32:42 +0300
added more tests
|
3
1dc58f44d556
Can now write dat files, added direct color handling
Santeri Piippo
parents:
diff
changeset
|
1 | #!/usr/bin/env python3 |
| 8 | 2 | from sys import version_info |
| 3 | if version_info < (3, 4): | |
| 4 | raise RuntimeError('Python 3.4 or newer required') | |
| 5 | ||
|
100
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
6 | appname = 'ldcheck' |
|
114
9ea2549e6171
changed version to 1.0.9999
Teemu Piippo <teemu@hecknology.net>
parents:
113
diff
changeset
|
7 | version = (1, 0, 9999) |
|
100
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
8 | version_string = str.join('.', map(str, version)) |
|
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
9 | |
| 8 | 10 | from colours import load_colours |
| 7 | 11 | from geometry import * |
| 8 | 12 | from pathlib import Path |
| 13 | 13 | import linetypes |
|
47
4da025d0b283
added work on header check
Teemu Piippo <teemu@hecknology.net>
parents:
38
diff
changeset
|
14 | import header |
|
54
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
15 | import parse |
|
3
1dc58f44d556
Can now write dat files, added direct color handling
Santeri Piippo
parents:
diff
changeset
|
16 | |
|
9
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
17 | from os.path import realpath |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
18 | script_directory = Path(realpath(__file__)).parent |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
19 | |
|
116
60cac583b5df
fixed config not being properly loaded from script directory
Teemu Piippo <teemu@hecknology.net>
parents:
114
diff
changeset
|
20 | def load_config(filename = None): |
|
60cac583b5df
fixed config not being properly loaded from script directory
Teemu Piippo <teemu@hecknology.net>
parents:
114
diff
changeset
|
21 | if filename is None: |
|
60cac583b5df
fixed config not being properly loaded from script directory
Teemu Piippo <teemu@hecknology.net>
parents:
114
diff
changeset
|
22 | filename = script_directory / 'ldcheck.cfg' |
|
9
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
23 | from configobj import ConfigObj |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
24 | from copy import deepcopy |
|
116
60cac583b5df
fixed config not being properly loaded from script directory
Teemu Piippo <teemu@hecknology.net>
parents:
114
diff
changeset
|
25 | config = ConfigObj(str(filename), encoding = 'UTF8') |
|
9
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
26 | read_config = deepcopy(config) |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
27 | if 'libraries' not in config: |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
28 | config['libraries'] = ['/path/to/ldraw'] |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
29 | if config != read_config: |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
30 | config.write() |
|
34
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
31 | check_library_paths(config) |
| 122 | 32 | load_ldconfig_ldr(config) |
|
9
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
33 | return config |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
34 | |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
35 | def library_paths(config): |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
36 | for library_path_string in config['libraries']: |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
37 | yield Path(library_path_string).expanduser() |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
38 | |
|
34
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
39 | def check_library_paths(config): |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
40 | from sys import exit |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
41 | problems = False |
|
36
2753aad79678
now checks that paths are specified
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
42 | have_paths = False |
|
34
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
43 | for library_path in library_paths(config): |
|
36
2753aad79678
now checks that paths are specified
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
44 | have_paths = True |
|
34
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
45 | if not library_path.exists(): |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
46 | problems = True |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
47 | print(str.format( |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
48 | 'Library path {} does not exist', |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
49 | library_path, |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
50 | )) |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
51 | elif not library_path.exists(): |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
52 | problems = True |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
53 | print(str.format( |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
54 | 'Library path {} is not a directory', |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
55 | library_path, |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
56 | )) |
|
36
2753aad79678
now checks that paths are specified
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
57 | if not have_paths: |
|
2753aad79678
now checks that paths are specified
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
58 | print('No LDraw path specified') |
|
2753aad79678
now checks that paths are specified
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset
|
59 | problems = True |
|
34
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
60 | if problems: |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
61 | print('Please fix ldcheck.cfg') |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
62 | exit(1) |
|
7ed2e831acd4
the program now checks that all ldraw paths are reachable
Teemu Piippo <teemu@hecknology.net>
parents:
32
diff
changeset
|
63 | |
|
9
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
64 | def find_ldconfig_ldr_paths(config): |
|
fea8e9ae6f29
Added matrix code, moved library paths to ldcheck.cfg.
Santeri Piippo
parents:
8
diff
changeset
|
65 | for library_path in library_paths(config): |
| 17 | 66 | yield from [ |
| 67 | library_path / path | |
| 68 | for path in ['LDConfig.ldr', 'ldconfig.ldr'] | |
| 69 | if (library_path / path).is_file() | |
| 8 | 70 | ] |
| 71 | ||
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
72 | import argparse |
|
62
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
54
diff
changeset
|
73 | |
|
81
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
74 | class ListProblemsAction(argparse.Action): |
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
75 | def __init__(self, option_strings, dest, nargs = None, **kwargs): |
|
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
76 | super().__init__(option_strings, dest, nargs = 0, **kwargs) |
|
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
77 | def __call__(self, *args, **kwargs): |
|
63
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
78 | import testsuite |
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
79 | from sys import exit |
|
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
80 | from re import sub |
|
63
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
81 | test_suite = testsuite.load_tests() |
|
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
82 | for warning_type in testsuite.all_problem_types(test_suite): |
|
62
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
54
diff
changeset
|
83 | print(str.format('{name}: {severity}: "{message}"', |
|
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
54
diff
changeset
|
84 | name = warning_type.name, |
|
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
54
diff
changeset
|
85 | severity = warning_type.severity, |
|
63
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
86 | message = warning_type.placeholder_message(), |
|
62
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
54
diff
changeset
|
87 | )) |
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
88 | exit(0) |
|
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
89 | |
| 122 | 90 | def load_ldconfig_ldr(config): |
| 91 | for ldconfig_ldr_path in find_ldconfig_ldr_paths(config): | |
| 92 | with ldconfig_ldr_path.open() as ldconfig_ldr: | |
| 93 | load_colours(ldconfig_ldr) | |
| 94 | ||
| 98 | 95 | def format_report(report, model, test_suite, *, use_colors = True): |
| 96 | from testsuite import problem_text | |
| 97 | messages = [] | |
| 98 | for problem in report['problems']: | |
| 99 | text_colour = '' | |
| 100 | if use_colors: | |
| 101 | if problem.severity == 'hold': | |
| 102 | text_colour = colorama.Fore.LIGHTRED_EX | |
| 103 | elif problem.severity == 'warning': | |
| 104 | text_colour = colorama.Fore.LIGHTBLUE_EX | |
| 105 | ldraw_code = model.body[problem.body_index].textual_representation() | |
| 106 | message = str.format( | |
| 107 | '{text_colour}{model_name}:{line_number}: {problem_type}: {message}' | |
| 108 | '{colour_reset}\n\t{ldraw_code}', | |
| 109 | text_colour = text_colour, | |
| 110 | model_name = model.name, | |
| 111 | line_number = problem.line_number, | |
| 112 | problem_type = problem.severity, | |
| 113 | message = problem_text(problem, test_suite), | |
| 114 | colour_reset = use_colors and colorama.Fore.RESET or '', | |
| 115 | ldraw_code = ldraw_code, | |
| 116 | ) | |
| 117 | messages.append(message) | |
| 118 | return '\n'.join(messages) | |
| 119 | ||
|
3
1dc58f44d556
Can now write dat files, added direct color handling
Santeri Piippo
parents:
diff
changeset
|
120 | if __name__ == '__main__': |
|
109
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
121 | from sys import argv, stderr, exit |
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
122 | parser = argparse.ArgumentParser() |
|
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
123 | parser.add_argument('filename') |
|
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
124 | parser.add_argument('--list', |
|
81
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
125 | action = ListProblemsAction, |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
126 | help = 'lists all possible problem types and exit', |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
127 | ) |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
128 | parser.add_argument('--dump', |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
129 | action = 'store_true', |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
130 | help = 'dumps the internal parsed structure of the part file', |
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
131 | ) |
|
81
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
132 | parser.add_argument('--rebuild', |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
133 | action = 'store_true', |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
134 | help = 'parses the part file and prints it back out, used for ' |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
135 | 'testing whether the program interprets part files correctly', |
|
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
136 | ) |
|
92
b8d72909d593
improved the mirrored stud check to catch cases where a subfile that contains studs is mirrored
Teemu Piippo <teemu@hecknology.net>
parents:
85
diff
changeset
|
137 | parser.add_argument('--subfile', |
|
81
e65d82501a38
added better help entries to command line parameters
Teemu Piippo <teemu@hecknology.net>
parents:
77
diff
changeset
|
138 | action = 'store_true', |
|
92
b8d72909d593
improved the mirrored stud check to catch cases where a subfile that contains studs is mirrored
Teemu Piippo <teemu@hecknology.net>
parents:
85
diff
changeset
|
139 | help = 'finds a subfile by name and prints out information about it' |
|
85
4438502fd3e0
fixed the use of moved-to-files check not working if there were non-alphanumerics in the filename
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
140 | ) |
| 98 | 141 | parser.add_argument('--color', |
| 142 | action = 'store_true', | |
| 143 | help = 'use colors' | |
| 144 | ) | |
|
100
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
145 | parser.add_argument('-v', '--version', |
|
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
146 | action = 'version', |
|
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
147 | version = str.format('{appname} {version}', |
|
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
148 | appname = appname, |
|
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
149 | version = version_string, |
|
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
150 | ), |
|
62759e5c4554
add some basic versioning
Teemu Piippo <teemu@hecknology.net>
parents:
98
diff
changeset
|
151 | ) |
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
152 | args = parser.parse_args() |
|
116
60cac583b5df
fixed config not being properly loaded from script directory
Teemu Piippo <teemu@hecknology.net>
parents:
114
diff
changeset
|
153 | config = load_config() |
| 98 | 154 | if args.color: |
| 155 | try: | |
| 156 | import colorama | |
| 157 | colorama.init() | |
| 158 | except ImportError: | |
| 159 | print('Use of --color requires the colorama module, disabling colours', file = stderr) | |
| 160 | args.color = False | |
|
92
b8d72909d593
improved the mirrored stud check to catch cases where a subfile that contains studs is mirrored
Teemu Piippo <teemu@hecknology.net>
parents:
85
diff
changeset
|
161 | if args.subfile: |
|
54
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
162 | import filecache |
|
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
163 | cache = filecache.SubfileCache( |
|
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
164 | ldraw_directories = config['libraries'], |
|
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
21
diff
changeset
|
165 | ) |
|
54
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
166 | subfile = cache.prepare_file(args.filename) |
|
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
167 | if not subfile.valid: |
|
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
168 | print(subfile.problem) |
|
92
b8d72909d593
improved the mirrored stud check to catch cases where a subfile that contains studs is mirrored
Teemu Piippo <teemu@hecknology.net>
parents:
85
diff
changeset
|
169 | else: |
|
b8d72909d593
improved the mirrored stud check to catch cases where a subfile that contains studs is mirrored
Teemu Piippo <teemu@hecknology.net>
parents:
85
diff
changeset
|
170 | print('Flat dimensions:', repr(subfile.flatness)) |
|
85
4438502fd3e0
fixed the use of moved-to-files check not working if there were non-alphanumerics in the filename
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
171 | print('Description:', repr(subfile.description)) |
|
92
b8d72909d593
improved the mirrored stud check to catch cases where a subfile that contains studs is mirrored
Teemu Piippo <teemu@hecknology.net>
parents:
85
diff
changeset
|
172 | print('Contains studs:', repr(subfile.has_studs)) |
|
54
0c686d10eb49
added tests for moved-to files and scaling in flat dimensions
Teemu Piippo <teemu@hecknology.net>
parents:
47
diff
changeset
|
173 | else: |
|
109
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
174 | try: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
175 | with open(args.filename, 'rb') as file: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
176 | from os.path import basename |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
177 | model = parse.read_ldraw( |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
178 | file, |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
179 | name = basename(args.filename), |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
180 | ldraw_directories = config['libraries']) |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
181 | if args.dump: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
182 | print('header: ' + type(model.header).__name__) |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
183 | for key in sorted(dir(model.header)): |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
184 | if not key.startswith('__'): |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
185 | print('\t' + key + ': ' + repr(getattr(model.header, key))) |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
186 | for i, entry in enumerate(model.body): |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
187 | if model.header.valid and i == model.header_size: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
188 | print('--------- End of header') |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
189 | print(entry) |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
190 | elif args.rebuild: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
191 | for entry in model.body: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
192 | print(entry.textual_representation(), end = '\r\n') |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
193 | else: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
194 | from testsuite import load_tests, check_model |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
195 | test_suite = load_tests() |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
196 | report = check_model(model, test_suite) |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
197 | print(format_report( |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
198 | report, |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
199 | model, |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
200 | test_suite, |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
201 | use_colors = args.color |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
202 | )) |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
203 | except FileNotFoundError: |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
204 | print(str.format( |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
205 | 'no such file: {filename!r}', |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
206 | filename = args.filename |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
207 | ), file = stderr) |
|
b627f8963a84
handle file not found more cleanly
Teemu Piippo <teemu@hecknology.net>
parents:
100
diff
changeset
|
208 | exit(1) |