@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)
parameters: ExportParameters = DictDecoder(config=parser_config).decode(
body, ExportParameters
)
serializer_config = SerializerConfig(indent=" ")
# project file
project_file = ""
for extension in allowed_extensions:
project_file = path.join(
data_path, parameters.mandant, ".".join([parameters.project, extension])
)
print(f"testing project_file: {project_file}")
if path.exists(project_file):
print(f"project_file: {project_file} EXISTS")
break
if not path.exists(project_file):
raise NotImplementedError(
f"Project {parameters.project} from mandant {parameters.mandant} not found."
)
print(f"project_file: {project_file}")
# output format
if parameters.output_format.lower() not in allowed_output_formats:
raise NotImplementedError(
f"Allowed output formats are: {'|'.join(allowed_output_formats)} not => {parameters.output_format}"
)
output_format = parameters.output_format.lower()
full_pg_service_config = Exporter.merge_dicts(
create_full_pg_service_conf(), parameters.pg_service_configs_dict
)
# extract
exporter = Exporter(
qgis_project_path=project_file,
unify_layer_names_by_group=bool(parameters.unify_layer_names_by_group),
pg_service_configs=full_pg_service_config,
)
config = exporter.run()
result = ExportResult(successful=False)
content = None
if output_format == "json":
content = JsonSerializer(config=serializer_config).render(config)
elif output_format == "xml":
content = XmlSerializer(config=serializer_config).render(config)
else:
return Response(JsonSerializer().render(result), mimetype="text/json")
if content:
with open(
path.join(
data_path,
parameters.mandant,
".".join([parameters.project, output_format]),
),
mode="w+",
) as f:
f.write(content)
result.successful = True
return Response(JsonSerializer().render(result), mimetype="text/json")