Tue, 25 Aug 2020 22:10:04 +0300
move format_report_html to webfront.py
32
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
1 | #!/usr/bin/env python3 |
29 | 2 | from flask import Flask, render_template, redirect, request |
3 | from ldcheck import load_config, load_colours, find_ldconfig_ldr_paths | |
57 | 4 | from parse import read_ldraw |
63
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
5 | from testsuite import load_tests, check_model, problem_text, all_problem_types |
29 | 6 | |
7 | app = Flask('LDCheck') | |
8 | ||
99
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
9 | def format_report_html(report, model, test_suite): |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
10 | messages = [] |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
11 | for problem in report['problems']: |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
12 | ldraw_code = model.body[problem.body_index].textual_representation() |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
13 | message = str.format( |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
14 | '<li class="{problem_type}">{model_name}:{line_number}:' |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
15 | '{problem_type}: {message}<br />{ldraw_code}</li>', |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
16 | model_name = model.name, |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
17 | line_number = problem.line_number, |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
18 | problem_type = problem.severity, |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
19 | message = problem_text(problem, test_suite), |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
20 | ldraw_code = ldraw_code, |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
21 | ) |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
22 | messages.append(message) |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
23 | return '\n'.join(messages) |
01941a811b5a
move format_report_html to webfront.py
Teemu Piippo <teemu@hecknology.net>
parents:
63
diff
changeset
|
24 | |
29 | 25 | @app.route('/', methods = ['GET', 'POST']) |
26 | def web_front(): | |
63
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
27 | test_suite = load_tests() |
29 | 28 | if request.method == 'POST': |
29 | # check if the post request has the file part | |
30 | if 'file' not in request.files or not request.files['file'].filename: | |
31 | return redirect(request.url) | |
32 | file = request.files['file'] | |
61
15c95d3fcfd8
show the filename of the processed file in the report
Teemu Piippo <teemu@hecknology.net>
parents:
57
diff
changeset
|
33 | filename = file.filename |
29 | 34 | config = load_config('ldcheck.cfg') |
35 | for ldconfig_ldr_path in find_ldconfig_ldr_paths(config): | |
36 | with ldconfig_ldr_path.open() as ldconfig_ldr: | |
37 | load_colours(ldconfig_ldr) | |
38 | model = read_ldraw( | |
39 | file.stream, | |
61
15c95d3fcfd8
show the filename of the processed file in the report
Teemu Piippo <teemu@hecknology.net>
parents:
57
diff
changeset
|
40 | name = filename, |
57 | 41 | ldraw_directories = config['libraries'], |
29 | 42 | ) |
43 | report = check_model(model, test_suite) | |
32
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
44 | |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
45 | # Amend human-readable messages into the report |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
46 | for problem in report['problems']: |
62
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
61
diff
changeset
|
47 | object = model.body[problem.body_index] |
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
61
diff
changeset
|
48 | problem.message_str = problem_text(problem, test_suite) |
f0a6bf48b05e
Problem reporting revamp, program is now aware of its problem types
Teemu Piippo <teemu@hecknology.net>
parents:
61
diff
changeset
|
49 | problem.ldraw_code = object.textual_representation() |
63
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
50 | return render_template('webfront.html', |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
51 | report = report, |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
52 | name = filename, |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
53 | problem_types = all_problem_types(test_suite) |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
54 | ) |
32
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
55 | else: |
63
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
56 | test_suite = load_tests() |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
57 | return render_template('webfront.html', |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
58 | report = None, |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
59 | name = None, |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
60 | problem_types = all_problem_types(test_suite) |
8949af6a4279
added the list of issues onto the web frontend
Teemu Piippo <teemu@hecknology.net>
parents:
62
diff
changeset
|
61 | ) |
29 | 62 | |
32
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
63 | @app.route('/static/<path:path>') |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
64 | def static_file(path): |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
65 | from flask import send_from_directory |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
66 | from os import path |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
67 | return send_from_directory(path.join('static', path)) |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
68 | |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
69 | if __name__ == '__main__': |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
70 | from argparse import ArgumentParser |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
71 | parser = ArgumentParser() |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
72 | parser.add_argument('-p', '--port', type = int, default = 5000) |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
73 | parser.add_argument('-d', '--debug', action = 'store_true') |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
74 | args = parser.parse_args() |
75f44d3063da
Reworked web front, problems are now sorted by category as well as line number
Santeri Piippo
parents:
29
diff
changeset
|
75 | app.run(port = args.port, debug = args.debug) |