Skip to content

api

api

allowed_extensions = ('.qgz', '.qgs') module-attribute

app = Flask(__name__) module-attribute

data_path = os.environ.get('QSL_DATA_ROOT', None) module-attribute

exporter_host = os.environ.get('QSL_EXPORTER_API_HOST', '127.0.0.1') module-attribute

exporter_port = int(os.environ.get('QSL_EXPORTER_API_PORT', 5000)) module-attribute

api_export()

Source code in src/qgis_server_light/exporter/api.py
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@app.route("/export", methods=["POST"])
def api_export():
    logging.getLogger().setLevel(logging.DEBUG)
    data_path = os.environ.get("QSL_DATA_ROOT")
    body = request.get_json()
    parser_config = ParserConfig(fail_on_unknown_properties=True)
    try:
        parameters = DictDecoder(config=parser_config).decode(body, ExportParameters)
    except Exception as e:
        logging.error(e)
        result = ExportResult(successful=False)
        Response(JsonSerializer().render(result), mimetype="text/json")

    project_base_path = Path(data_path, parameters.mandant, parameters.project)
    project_file = None
    for extension in allowed_extensions:
        project_file = Path(str(project_base_path) + extension)
        logging.info(f"testing project_file: {project_file}")
        if project_file.exists():
            logging.info(f"project_file: {project_file} EXISTS")
            break

    try:
        process = subprocess.run(
            [
                sys.executable,
                "-m",
                "qgis_server_light.exporter.cli",
                "--project",
                str(project_file),
                "--unify_layer_names_by_group",
                str(parameters.unify_layer_names_by_group),
                "--output_format",
                parameters.output_format,
            ],
            text=True,
            check=True,
            capture_output=True,
        )
        output_format = f".{parameters.output_format}"
        output_file = project_base_path.with_suffix(output_format)
        output_file.write_text(process.stdout)
        result = ExportResult(successful=True)
    except subprocess.CalledProcessError as e:
        logging.error(e.stderr)
        result = ExportResult(successful=False)
    return Response(JsonSerializer().render(result), mimetype="text/json")