views.py 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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 PyPDF2
  8. import json
  9. import os
  10. import json
  11. import re
  12. import base64
  13. #https://medium.com/@emerico/convert-pdf-to-image-using-python-flask-2864fb655e01
  14. UPLOAD_FOLDER = "/home/bscheibel/app/app/temporary"
  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//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. def get_file_size(file):
  28. pdf = PyPDF2.PdfFileReader(file)
  29. p = pdf.getPage(0)
  30. w = p.mediaBox.getWidth()
  31. h= p.mediaBox.getHeight()
  32. print(w,h)
  33. return w,h
  34. def check_config_file(d):
  35. reg_search = d
  36. #print(reg_search)
  37. for conf in d:
  38. print(conf)
  39. return "blub"
  40. def check_links(isos):
  41. link_names = {}
  42. isos_names = []
  43. isos = list(set(isos))
  44. reg_isos = r"(ISO\s\d*)\s1\-(\d?)"
  45. print(isos)
  46. isos_new = []
  47. for name in isos:
  48. if re.search(reg_isos, name):
  49. n = 1
  50. #print(name)
  51. new_isos = re.search(reg_isos,name).group(1)
  52. number = re.search(reg_isos,name).group(2)
  53. while n <= int(number):
  54. isos_new.append(new_isos+"-"+str(n))
  55. n += 1
  56. else:
  57. isos_new.append(name)
  58. for name in isos_new:
  59. try:
  60. name = name.replace(" ", "")
  61. #name = name.replace("-"," ")
  62. url1 = name + ".PDF"
  63. #print(url)
  64. file = send_from_directory("static/isos",url1)
  65. url = "isos/" + url1
  66. #link_names.append(url)
  67. link_names[name] = url
  68. #print(link_names)
  69. except:
  70. #print(name)
  71. isos_names.append(name)
  72. return link_names, isos_names
  73. @app.route('/', methods=['GET', 'POST'])
  74. def upload_file():
  75. if request.method == 'POST':
  76. file = request.files['file']
  77. if file and allowed_file(file.filename):
  78. filename = file.filename
  79. basedir = os.path.abspath(os.path.dirname(__file__))
  80. file.save(os.path.join(basedir,app.config["UPLOAD_FOLDER"], filename))
  81. uuid = random.randint(100,10000000)
  82. extract_all(uuid, filename, 'localhost')
  83. return redirect(url_for('uploaded_file', filename=filename, uuid=uuid))
  84. return '''
  85. <!doctype html>
  86. <title>Upload new File</title>
  87. <h1>Upload new File</h1>
  88. <form action="" method=post enctype=multipart/form-data>
  89. <p><input type=file name=file>
  90. <input type=submit value=Upload>
  91. </form>
  92. '''
  93. @app.route('/show/<filename>&<uuid>')
  94. def uploaded_file(filename, uuid):
  95. """file_out = "out.jpg"
  96. #file_out = filename
  97. #if request.method == 'POST':
  98. # uuid = 433
  99. if filename.endswith(".pdf") or filename.endswith(".PDF"):
  100. w,h = get_file_size(UPLOAD_FOLDER +"/" + filename)
  101. convert_pdf_img(filename)
  102. db = redis.Redis("localhost")
  103. #isos = db.get(uuid+"dims")
  104. #print(iso)
  105. isos = json.loads(db.get(str(uuid)+"isos"))
  106. links, isos_names = check_links(isos)
  107. dims = json.loads(db.get(str(uuid)+"dims"))
  108. details = json.loads(db.get(str(uuid) + "details"))
  109. number_blocks = db.get(str(uuid)+"eps")
  110. html_code = ""
  111. html_general = ""
  112. reg = r"(-?\d{1,}\.?\d*)"
  113. #re_gewinde = r"M\d{1,2}"
  114. #re_passungen = r"h\d{1,2}|H\d{1,2}"
  115. det_coords= "0,0,0,0"
  116. with open('/home/bscheibel/app/app/config.json') as f:
  117. config_file = json.load(f)
  118. for dim in sorted(dims):
  119. #print(dim)
  120. for det in details:
  121. #print(det)
  122. try:
  123. if dim == det:
  124. det_coords = details[det]
  125. det_coords = ",".join(str(det) for det in det_coords)
  126. except:
  127. det_coords = "0,0,0,0"
  128. if "ZZZZ" in dim:
  129. for d in dims[dim]:
  130. html_general += d + "<br>"
  131. else:
  132. html_code += "<td><h4>" + dim + "</h4></td>"
  133. for d in dims[dim]:
  134. relevant_isos = []
  135. search_terms = []
  136. #if "Ra" in d or "Rz" in d or "Rpk" in d:
  137. # relevant_isos.append("ISO4287.PDF")
  138. #if u"\u27C2" in d or u"\u25CE" in d or u"\u232D" in d or u"\u2225" in d or u"\u232F" in d or u"\u2316" in d or u"\u2313" in d or u"\u23E5" in d:
  139. # relevant_isos.append("ISO1101.PDF")
  140. #if re.search(re_gewinde,d):
  141. # relevant_isos.append("ISO6410.PDF")
  142. #if "GG" in d or "CT" in d or "GX" in d:
  143. # relevant_isos.append("ISO14405-1.PDF")
  144. #if re.search(re_passungen,d):
  145. # relevant_isos.append("ISO286-1.PDF")
  146. for conf in config_file:
  147. if re.search(conf,d):
  148. iso = config_file[conf]
  149. for key in iso:
  150. relevant_isos.append(key)
  151. search_terms = iso[key]
  152. terms = ",".join(str(e) for e in search_terms)
  153. try:
  154. number = re.search(reg, d)
  155. number = number.group(1)
  156. try:
  157. floats = len(number.split(".")[1])
  158. if floats <= 1:
  159. steps = 0.1
  160. elif floats == 2:
  161. steps = 0.01
  162. elif floats == 3:
  163. steps = 0.001
  164. else:
  165. steps = 0.001
  166. except:
  167. steps = 0.1
  168. except:
  169. number = d
  170. steps = 0.1
  171. coords = ",".join(str(e) for e in dims[dim][d])
  172. html_code += "<tr><td style='text-align:center'> <input type='checkbox' name='relevant." + d + "' value='checked'> </td>" + \
  173. "<td style='text-align:center'>" + d + "</td>" + \
  174. "<td max='3' style='text-align:center'> <input type='number' step='" + str(steps) + "' data-coords='" + coords + " 'data-details='" + det_coords +"'' name='" + d + "' value='" + number + "'> </td>"
  175. for x in relevant_isos:
  176. #html_code += "<td style='text-align:left'> <a href=" + url_for('static', filename="isos/"+x) + " >"+ x.partition(".")[0] +"</a> </td>"
  177. html_code += "<td style='text-align:left' data-terms='" + terms + "'> <a onclick=ui_add_tab_active('#main','" + x.partition(".")[0] + "','" + x.partition(".")[0] +"',true,'isotab')>" + x.partition(".")[0] + "</a> </td>"
  178. #print(html_code)
  179. html_code += "</tr>"
  180. html_links = ""
  181. for link in links:
  182. html_links += "<a onclick =ui_add_tab_active('#main','" + link + "','" + link +"',true,'isotab')> Open " + link + "</a> <br>"
  183. #html_links += "<tr> <td> <a onclick =ui_add_tab_active('#main','iso1','iso1',true,'isotab')> Open " + link + " in Tab </a> </td> </tr>"""
  184. #return render_template('show_pdf.html', filename=file_out, isos=isos, dims=dims, text=html_code,html_general=html_general, number=number_blocks, og_filename=filename, w=w, h=h, html_links=html_links, isos_names=isos_names)
  185. return render_template('show_pdf.html', og_filename=filename)
  186. #else:
  187. # filename = filename
  188. # return render_template('show_image.html', filename=filename)
  189. @app.route('/uploads/<filename>')
  190. def send_file(filename):
  191. return send_from_directory(UPLOAD_FOLDER, filename)
  192. # No caching at all for API endpoints.
  193. @app.after_request
  194. def add_header(response):
  195. # response.cache_control.no_store = True
  196. response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
  197. response.headers['Pragma'] = 'no-cache'
  198. response.headers['Expires'] = '-1'
  199. response.headers['Access-Control-Allow-Origin'] = '*'
  200. response.headers.add("Access-Control-Allow-Headers", "*")
  201. response.headers.add("Access-Control-Allow-Methods", "*")
  202. return response
  203. @app.route('/redis/get/<key>',methods=['GET'])
  204. def redis_get(key):
  205. db = redis.Redis("localhost")
  206. result = json.loads(db.get(key))
  207. return result
  208. @app.route('/redis/set/<key>',methods=['POST'])
  209. def redis_set(key):
  210. value = request.get_json(force=True)
  211. value = value["value"]
  212. db = redis.Redis("localhost")
  213. value_name = value[0]
  214. value_v = value[1]
  215. try:
  216. result = json.loads(db.get(key))
  217. result[value_name] = value_v
  218. json_res = json.dumps(result)
  219. db.set(key,json_res)
  220. except:
  221. dict_res = {}
  222. dict_res[value_name] = value_v
  223. json_dict = json.dumps(dict_res)
  224. db.set(key, json_dict)
  225. return "OK"
  226. @app.route('/index')
  227. def test():
  228. return render_template('index.html')