Select Git revision
AnnotationResource.js
app.py 2.43 KiB
#! /usr/bin/env python3
from flask import Flask
from flask import request
from flask import render_template
import tempfile
from subprocess import Popen, PIPE, STDOUT
import os
app = Flask(__name__)
@app.route('/')
def main():
return render_template('home.html')
@app.route('/unl2rdf', methods=['GET', 'POST'])
def unl2rdf():
if request.method == 'POST':
unl = request.form['unl']
# Validate formats list
formats = list(set(['rdf', 'dot']) & set(request.form.getlist('outputs')))
output = convertUnl(unl, formats)
else:
unl = None
output = None
return render_template('unl2rdf.html', unl=unl, output=output)
def convertUnl(unl, outputs):
res = {}
# Get a temporary filename
with tempfile.NamedTemporaryFile() as temp:
out_name = os.path.basename(temp.name)
out_dir = os.path.dirname(temp.name)
with tempfile.NamedTemporaryFile(mode="w") as in_file:
# Remove CRLF and flush output to avoid java errors
in_file.write(unl.replace("\r\n", "\n"))
in_file.flush()
# Run java parser
cmd = ['java', '-jar', '/opt/unl2rdf.jar',
'--input-file', in_file.name,
'--output-Dir', out_dir, '--output-file', out_name,
'--output-type', ','.join(outputs)]
with Popen(cmd, stdout=PIPE, stderr=STDOUT) as p:
p.wait()
if p.returncode != 0:
res['error'] = "unl2rdf: \n\n"+p.stdout.read().decode()
# Handle rdf output if any
if 'rdf' in outputs:
try:
fname = '{}/{}.ttl'.format(out_dir, out_name)
with open(fname, 'r') as f:
res['rdf'] = f.read()
os.remove(fname)
except FileNotFoundError:
res['rdf'] = 'Error : no ttl file'
# Handle dot output if any
if 'dot' in outputs:
try:
fname = '{}/{}.dot'.format(out_dir, out_name)
with open(fname, 'r') as f:
res['dot'] = f.read()
cmd = ['dot', '-Tsvg', fname]
with Popen(cmd, stdout=PIPE, stderr=PIPE) as p:
p.wait()
if p.returncode != 0:
res['error'] += "Dot: \n\n"+p.stderr.read().decode()
else:
res['svg'] = p.stdout.read().decode()
os.remove(fname)
except FileNotFoundError:
res['svg'] = 'Error : no dot file'
return res