views.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #encoding
  2. from app import app
  3. from flask import request, redirect, url_for, send_from_directory, render_template
  4. import subprocess
  5. import redis
  6. import random
  7. import json
  8. import os
  9. import json
  10. import re
  11. import base64
  12. #https://medium.com/@emerico/convert-pdf-to-image-using-python-flask-2864fb655e01
  13. #UPLOAD_FOLDER = '/Users/beatescheibel/Desktop/flask/uploads'
  14. UPLOAD_FOLDER = "./static/"
  15. app.config["UPLOAD_FOLDER"] = UPLOAD_FOLDER
  16. ALLOWED_EXTENSIONS = set(['pdf', 'png', 'jpg', 'jpeg', 'PDF'])
  17. def allowed_file(filename):
  18. return '.' in filename and \
  19. filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
  20. def convert_pdf_img(filename):
  21. PDFFILE = UPLOAD_FOLDER +"/" + filename
  22. subprocess.call(['pdftoppm', '-jpeg', '-singlefile',
  23. PDFFILE, '/home/bscheibel/PycharmProjects/app/app/temporary/out'])
  24. def extract_all(uuid, filename, db):
  25. #order_bounding_boxes_in_each_block.main(uuid, UPLOAD_FOLDER + "/" + filename)
  26. subprocess.call(['python3','/home/bscheibel/PycharmProjects/dxf_reader/main.py', str(uuid),UPLOAD_FOLDER + "/" + filename, db, str(0)])
  27. @app.route('/', methods=['GET', 'POST'])
  28. def upload_file():
  29. if request.method == 'POST':
  30. file = request.files['file']
  31. if file and allowed_file(file.filename):
  32. filename = file.filename
  33. file.save(os.path.join(app.config["UPLOAD_FOLDER"], filename))
  34. uuid = random.randint(100,10000000)
  35. extract_all(uuid, filename, 'localhost')
  36. return redirect(url_for('uploaded_file', filename=filename, uuid=uuid))
  37. return '''
  38. <!doctype html>
  39. <title>Upload new File</title>
  40. <h1>Upload new File</h1>
  41. <form action="" method=post enctype=multipart/form-data>
  42. <p><input type=file name=file>
  43. <input type=submit value=Upload>
  44. </form>
  45. '''
  46. @app.route('/show/<filename>&<uuid>')
  47. def uploaded_file(filename, uuid):
  48. file_out = "temporary/out.jpg"
  49. #file_out = filename
  50. if request.method == 'POST':
  51. uuid = 433
  52. if filename.endswith(".pdf") or filename.endswith(".PDF"):
  53. convert_pdf_img(filename)
  54. db = redis.Redis("localhost")
  55. #isos = db.get(uuid+"dims")
  56. #print(iso)
  57. isos = json.loads(db.get(str(uuid)+"isos"))
  58. dims = json.loads(db.get(str(uuid)+"dims"))
  59. number_blocks = db.get(str(uuid)+"eps")
  60. html_code = ""
  61. reg = r"(-?\d{1,}\.?\d*)"
  62. for dim in dims:
  63. html_code += '''<td><h4>''' + dim + '''</h4></td>'''
  64. for d in dims[dim]:
  65. try:
  66. number = re.search(reg, d)
  67. number = number.group(1)
  68. try:
  69. floats = len(number.split(".")[1])
  70. if floats <= 1:
  71. steps = 0.1
  72. elif floats == 2:
  73. steps = 0.01
  74. elif floats == 3:
  75. steps = 0.001
  76. else:
  77. steps = 0.001
  78. except:
  79. steps = 0.1
  80. except:
  81. number = d
  82. coords = ",".join(str(e) for e in dims[dim][d])
  83. html_code += "<tr><td style='text-align:center'> <input type='checkbox' name='relevant." + d + "' value='checked'> </td>" + \
  84. "<td style='text-align:center'>" + d + "</td>" + \
  85. "<td style='text-align:center'> <input type='number' step='" + str(steps) + "' data-coords='" + coords + "' name='" + d + "' value='" + number + "' size='10'> </td></tr>"
  86. #print(html_code)
  87. return render_template('show_image.html', filename=file_out, isos=isos, dims=dims, text=html_code, number=number_blocks, og_filename=filename)
  88. else:
  89. filename = filename
  90. return render_template('show_image.html', filename=filename)
  91. @app.route('/uploads/<filename>')
  92. def send_file(filename):
  93. return send_from_directory(UPLOAD_FOLDER, filename)
  94. # No caching at all for API endpoints.
  95. @app.after_request
  96. def add_header(response):
  97. # response.cache_control.no_store = True
  98. response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
  99. response.headers['Pragma'] = 'no-cache'
  100. response.headers['Expires'] = '-1'
  101. response.headers['Access-Control-Allow-Origin'] = '*'
  102. response.headers.add("Access-Control-Allow-Headers", "*")
  103. response.headers.add("Access-Control-Allow-Methods", "*")
  104. return response
  105. @app.route('/generate/<name>')
  106. def generate(name):
  107. name = name.replace(" ","")
  108. url = name+".PDF"
  109. try:
  110. file = send_from_directory("static/isos",url)
  111. return file
  112. except:
  113. return"Sorry file not found"
  114. @app.route('/redis/get/<key>',methods=['GET'])
  115. def redis_get(key):
  116. db = redis.Redis("localhost")
  117. result = json.loads(db.get(key))
  118. return result
  119. @app.route('/redis/set/<key>',methods=['POST'])
  120. def redis_set(key):
  121. value = request.get_json(force=True)
  122. value = value["value"]
  123. db = redis.Redis("localhost")
  124. value_name = value[0]
  125. value_v = value[1]
  126. try:
  127. result = json.loads(db.get(key))
  128. result[value_name] = value_v
  129. json_res = json.dumps(result)
  130. db.set(key,json_res)
  131. except:
  132. dict_res = {}
  133. dict_res[value_name] = value_v
  134. json_dict = json.dumps(dict_res)
  135. db.set(key, json_dict)
  136. return "OK"