app.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from flask import Flask, request, redirect, render_template, url_for, send_file
  2. from parsers.CSV_to_RDF_generico import parse, parsefromfile
  3. from parsers.get_form_fields import getFormFields, getConfigs
  4. app = Flask(__name__)
  5. @app.route('/', methods=['POST','GET'])
  6. def main():
  7. appath = app.root_path + '/'
  8. configurationFolder = 'parsers/configuration_files/'
  9. configurationFileName = 'configuration.json'
  10. confFilePath = appath + configurationFolder + configurationFileName
  11. try:
  12. configurations = getConfigs(configurationFolder)
  13. formFields = getFormFields(confFilePath)
  14. except:
  15. return redirect(url_for('error', message='no valid config file found'))
  16. if request.method == 'POST':
  17. try:
  18. outputFolder = appath + 'samples/RDF/'
  19. fileFromRequest = request.files['FILE']
  20. filename = fileFromRequest.filename
  21. # If a file was uploaded, read data from file
  22. if filename != '':
  23. outFileName = filename.replace('.csv', '') + '.ttl'
  24. outFilePath = outputFolder + outFileName
  25. inFile = fileFromRequest.read()
  26. # try to create list of dictionaries keyed by header row
  27. parsefromfile(confFilePath, formFields, inFile, outFilePath)
  28. # Else read data from form
  29. else:
  30. data = {}
  31. for field in formFields:
  32. data[field] = request.form[field]
  33. check = [val for val in data.values() if val!='']
  34. if len(check)>0:
  35. outFileName = 'form_output.ttl'
  36. outFilePath = outputFolder + outFileName
  37. parse(confFilePath, formFields, [data], outFilePath)
  38. else:
  39. raise Exception("No data")
  40. except:
  41. return redirect(url_for('error', message='no CSV data, or CSV input file missing required data'))
  42. return redirect(url_for('main', downloadFile=outFileName, downloadUrl=url_for('download')))
  43. return render_template('index.html.j2', data=formFields, configs=configurations)
  44. @app.route('/error/', methods=['POST','GET'])
  45. def error():
  46. if request.method == 'POST':
  47. return redirect(url_for('main'))
  48. elif request.method == 'GET':
  49. return render_template('error.html.j2', message=request.args.get('message'))
  50. @app.route('/download/', methods=['POST', 'GET'])
  51. def download():
  52. appath = app.root_path + '/'
  53. outFileName = request.args.get('filename')
  54. outFilePath = appath + 'samples/RDF/' + outFileName
  55. return send_file(outFilePath, as_attachment=True)
  56. @app.route('/getdata/', methods=['GET'])
  57. def getData():
  58. appath = app.root_path + '/'
  59. configurationFolder = 'parsers/configuration_files/'
  60. configurationFileName = request.args.get("confFileName")
  61. confFilePath = appath + configurationFolder + configurationFileName
  62. appia = getFormFields(confFilePath)
  63. return appia
  64. if __name__ == '__main__':
  65. app.run()