from flask import Flask, request, redirect, render_template, url_for, send_file from parsers.CSV_to_RDF_generico import parse, parsefromfile from parsers.get_form_fields import getFormFields, getConfigs app = Flask(__name__) @app.route('/', methods=['POST','GET']) def main(): appath = app.root_path + '/' configurationFolder = 'parsers/configuration_files/' configurationFileName = 'configuration.json' confFilePath = appath + configurationFolder + configurationFileName try: configurations = getConfigs(configurationFolder) formFields = getFormFields(confFilePath) except: return redirect(url_for('error', message='no valid config file found')) if request.method == 'POST': try: outputFolder = appath + 'samples/RDF/' fileFromRequest = request.files['FILE'] filename = fileFromRequest.filename # If a file was uploaded, read data from file if filename != '': outFileName = filename.replace('.csv', '') + '.ttl' outFilePath = outputFolder + outFileName inFile = fileFromRequest.read() # try to create list of dictionaries keyed by header row parsefromfile(confFilePath, formFields, inFile, outFilePath) # Else read data from form else: data = {} for field in formFields: data[field] = request.form[field] check = [val for val in data.values() if val!=''] if len(check)>0: outFileName = 'form_output.ttl' outFilePath = outputFolder + outFileName parse(confFilePath, formFields, [data], outFilePath) else: raise Exception("No data") except: return redirect(url_for('error', message='no CSV data, or CSV input file missing required data')) return redirect(url_for('main', downloadFile=outFileName, downloadUrl=url_for('download'))) return render_template('index.html.j2', data=formFields, configs=configurations) @app.route('/error/', methods=['POST','GET']) def error(): if request.method == 'POST': return redirect(url_for('main')) elif request.method == 'GET': return render_template('error.html.j2', message=request.args.get('message')) @app.route('/download/', methods=['POST', 'GET']) def download(): appath = app.root_path + '/' outFileName = request.args.get('filename') outFilePath = appath + 'samples/RDF/' + outFileName return send_file(outFilePath, as_attachment=True) @app.route('/getdata/', methods=['GET']) def getData(): appath = app.root_path + '/' configurationFolder = 'parsers/configuration_files/' configurationFileName = request.args.get("confFileName") confFilePath = appath + configurationFolder + configurationFileName appia = getFormFields(confFilePath) return appia if __name__ == '__main__': app.run()