Skip to content

Commit e8d7e53

Browse files
committed
Rest API: covert with format option
1 parent ef22720 commit e8d7e53

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

lidoapp_bp/lidoapp_bp.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import LidoRDFConverter as LRC
55
from pathlib import Path
66
from .x3ml_classes import Mapping, Link, PredicateVariant, Equals, X3ml
7-
from flask import Blueprint, render_template, request, send_file, jsonify
7+
from flask import Blueprint, render_template, request, send_file, jsonify, make_response
88
from .database import db, User
99

1010

@@ -25,13 +25,14 @@ def dlftLidoFile():
2525
return Path('./defaultLido.xml')
2626

2727

28-
def processString(lidoString, x3mlstr):
29-
result = '<no-data/>'
30-
if lidoString:
31-
converter = LRC.LidoRDFConverter.from_str(x3mlstr)
32-
graph = converter.parse_string(lidoString)
33-
result = graph.serialize(format='turtle')
34-
return result
28+
def convert_lido_str(lido_str, x3ml_str,format='turtle'):
29+
'''Converts LIDO XML string to RDF using the provided X3ML mapping string.
30+
Returns the RDF string in the specified format.'''
31+
if lido_str:
32+
converter = LRC.LidoRDFConverter.from_str(x3ml_str)
33+
graph = converter.parse_string(lido_str)
34+
return graph.serialize(format=format)
35+
return ''
3536

3637

3738
def registerLidoBlueprint(app,user):
@@ -135,20 +136,27 @@ def runMappings():
135136
if request.method == 'POST':
136137
parm = request.get_json()
137138
lidoapp_bp.user.lido = parm['data']
138-
response_object['text'] = processString(lidoapp_bp.user.lido, lidoapp_bp.model.to_str())
139+
response_object['text'] = convert_lido_str(lidoapp_bp.user.lido, lidoapp_bp.model.to_str())
139140
response_object['message'] = 'Mappings applied to Lido!'
140141
return jsonify(response_object)
141142

142143
@lidoapp_bp.route('/convert', methods=['POST'])
143144
def convert():
144145
# TODO: catch error and provide better error response e.g. code 400 for malformed LIDO
146+
# Valid formats: "xml", "n3", "turtle", "nt", "pretty-xml", "trix", "trig", "nquads", "json-ld", "hext"
147+
# Example: curl -X POST -F format='nt' -F file=@FILE HOST:PORT/convert"
145148
if request.mimetype == "multipart/form-data":
146149
lido_xml = request.files['file'].read().decode('utf-8')
150+
format = request.form.get('format','turtle')
147151
else:
148152
lido_xml = request.get_data()
149-
return processString(lido_xml, dlftMappingFile().read_text())
150-
response = make_response(turtle, 200)
151-
response.mime_type = "text/turtle"
153+
format ='turtle'
154+
try:
155+
rdf_str = convert_lido_str(lido_xml, dlftMappingFile().read_text(),format=format)
156+
response = make_response(rdf_str, 200)
157+
response.mime_type = f"text/{format}"
158+
except Exception as e:
159+
return jsonify({'error': str(e)}), 400
152160
return response
153161

154162
@lidoapp_bp.route('/updateLido', methods=['GET', 'POST'])

0 commit comments

Comments
 (0)