120 lines
3.7 KiB
Python
120 lines
3.7 KiB
Python
from flask import Flask
|
|
from flask_cors import CORS
|
|
from flask import request
|
|
from lxml import etree
|
|
import json
|
|
import time
|
|
import Parser
|
|
|
|
|
|
app = Flask(__name__)
|
|
CORS(app)
|
|
cors = CORS(app, resource={
|
|
r"/*":{
|
|
"origins":"*"
|
|
}
|
|
})
|
|
|
|
def format_xml(request: request, type: str) -> str:
|
|
"""Function to format XML
|
|
|
|
:param request: Received request
|
|
:param type: Type of needed processing: xsd, xslt or xpath
|
|
:raises ValueError: is raised when type is different than those provided above
|
|
:return: response JSON converted to string and response code
|
|
"""
|
|
start = time.time_ns()
|
|
code = 200
|
|
response_json = dict()
|
|
try:
|
|
request_data = json.loads(request.get_data(as_text=True))
|
|
data = request_data['data']
|
|
process = request_data['process']
|
|
if (type == "prettify"):
|
|
response_json['result'] = Parser.xsd(data, process)
|
|
elif (type == "minimize"):
|
|
response_json['result'] = Parser.xslt(data, process)
|
|
else:
|
|
raise ValueError("Valid operation types are: prettify, minimize")
|
|
|
|
response_json['status'] = "OK"
|
|
except KeyError as e:
|
|
response_json['result'] = "Missing key: " + str(e)
|
|
response_json['status'] = "ERR"
|
|
code = 400
|
|
except Exception as e:
|
|
response_json['result'] = str(e)
|
|
response_json['status'] = "ERR"
|
|
code = 400
|
|
finally:
|
|
exec_time = (time.time_ns() - start) / 10**6
|
|
response_json['time'] = f"{exec_time:.03f}"
|
|
response_json['processor'] = "libxml2 over lxml"
|
|
return json.dumps(response_json), code
|
|
|
|
def process_xml(request: request, type: str) -> str:
|
|
"""Function to process
|
|
|
|
:param request: Received request
|
|
:param type: Type of needed processing: xsd, xslt or xpath
|
|
:raises ValueError: is raised when type is different than those provided above
|
|
:return: response JSON converted to string and response code
|
|
"""
|
|
start = time.time_ns()
|
|
code = 200
|
|
response_json = dict()
|
|
try:
|
|
request_data = json.loads(request.get_data(as_text=True))
|
|
data = request_data['data']
|
|
process = request_data['process']
|
|
if (type == "xsd"):
|
|
response_json['result'] = Parser.xsd(data, process)
|
|
elif (type == "xslt"):
|
|
response_json['result'] = Parser.xslt(data, process)
|
|
elif (type == "xpath"):
|
|
response_json['result'] = Parser.xpath(data, process)
|
|
elif (type == "prettify"):
|
|
response_json['result'] = Parser.prettify(data)
|
|
elif (type == "minimize"):
|
|
response_json['result'] = Parser.minimize(data)
|
|
else:
|
|
raise ValueError("Valid operation types are: xsd, xslt, xpath")
|
|
|
|
response_json['status'] = "OK"
|
|
except KeyError as e:
|
|
response_json['result'] = "Missing key: " + str(e)
|
|
response_json['status'] = "ERR"
|
|
code = 400
|
|
except Exception as e:
|
|
response_json['result'] = str(e)
|
|
response_json['status'] = "ERR"
|
|
code = 400
|
|
finally:
|
|
exec_time = (time.time_ns() - start) / 10**6
|
|
response_json['time'] = f"{exec_time:.03f}"
|
|
response_json['processor'] = "libxml2 over lxml"
|
|
return json.dumps(response_json), code
|
|
|
|
|
|
@app.route("/xpathpost", methods=["POST"])
|
|
def xpath():
|
|
return process_xml(request, "xpath")
|
|
|
|
@app.route("/xsdpost", methods=["POST"])
|
|
def xsd():
|
|
return process_xml(request, "xsd")
|
|
|
|
@app.route("/xsltpost", methods=["POST"])
|
|
def xslt():
|
|
return process_xml(request, "xslt")
|
|
|
|
@app.route("/prettifypost", methods=["POST"])
|
|
def prettify():
|
|
return process_xml(request, "prettify")
|
|
|
|
@app.route("/minimizepost", methods=["POST"])
|
|
def minimize():
|
|
return process_xml(request, "minimize")
|
|
|
|
if __name__ == "__main__":
|
|
app.run() |