Skip to content
Snippets Groups Projects
Select Git revision
  • aa795f923af9b1d473aec37ac575b8e13d6264c3
  • master default protected
  • multiprocessing
  • experiment/clara
  • experiment/spec2B-poc
  • experiment/qivalio-poc
  • experiment/ertms
  • MAY-2023
  • FEB-2023
  • EGC-2023
  • 0.2.1
  • v0.2.0
  • v0.1.2
13 results

construct.py

Blame
  • 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