webfront.py

Sat, 08 Jun 2019 11:17:17 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Sat, 08 Jun 2019 11:17:17 +0300
changeset 65
f2dc17b830e0
parent 63
8949af6a4279
permissions
-rwxr-xr-x

cleanup

#!/usr/bin/env python3
import flask
import testsuite
import config
import parse
import colours

app = flask.Flask('LDCheck')

@app.route('/', methods = ['GET', 'POST'])
def web_front():
    test_suite = testsuite.load_tests()
    request = flask.request
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files or not request.files['file'].filename:
            return flask.redirect(request.url)
        file = request.files['file']
        filename = file.filename
        config_object = config.load_config('ldcheck.cfg')
        for ldconfig_ldr_path in config.find_ldconfig_ldr_paths(config_object):
            with ldconfig_ldr_path.open() as ldconfig_ldr:
                colours.load_colours(ldconfig_ldr)
        model = parse.read_ldraw(
            file.stream,
            name = filename,
            ldraw_directories = config_object['libraries'],
        )
        report = testsuite.check_model(model, test_suite)

        # Amend human-readable messages into the report
        for problem in report['problems']:
            object = model.body[problem.body_index]
            problem.message_str = str(problem)
            problem.ldraw_code = object.textual_representation()
        return flask.render_template('webfront.html',
            report = report,
            name = filename,
            problem_types = testsuite.all_problem_types(test_suite)
        )
    else:
        return flask.render_template('webfront.html',
            report = None,
            name = None,
            problem_types = testsuite.all_problem_types(test_suite)
        )

@app.route('/static/<path:path>')
def static_file(path):
    from flask import send_from_directory
    from os import path
    return send_from_directory(path.join('static', path))

if __name__ == '__main__':
    from argparse import ArgumentParser
    parser = ArgumentParser()
    parser.add_argument('-p', '--port', type = int, default = 5000)
    parser.add_argument('-d', '--debug', action = 'store_true')
    args = parser.parse_args()
    app.run(port = args.port, debug = args.debug)

mercurial