Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. import os
  2. import random
  3. import threading
  4.  
  5. from flask import render_template, Blueprint, Response, after_this_request, request, send_file, stream_with_context
  6.  
  7. from ebayavgprice import UPLOAD_FOLDER, RESULTS_FOLDER, FILE_NAME_PREFIX
  8. from ebayavgprice.forms import FileUploadForm
  9. from ebayavgprice.functions import EbayAvgPrice
  10.  
  11. app_bp = Blueprint("app_bp", __name__, template_folder="templates")
  12.  
  13. exporting_threads = {}
  14.  
  15.  
  16. @app_bp.route("/", methods=["GET", "POST"])
  17. def index():
  18. global exporting_threads
  19. form = FileUploadForm()
  20.  
  21. if form.validate_on_submit():
  22. document = form.document.data
  23. has_headers = form.has_headers.data
  24. delete_after_upload = form.delete_after_upload.data
  25. delete_after_download = form.delete_after_download.data
  26. filename = str(random.randint(100000, 999999)) + "_" + document.filename
  27. upload_location = os.path.join(UPLOAD_FOLDER, filename)
  28. document.save(upload_location)
  29. user_thread = EbayAvgPrice(upload_location, has_headers)
  30. thread_id = len(exporting_threads) + 1
  31. exporting_threads[thread_id] = user_thread
  32. threading.Thread(target=user_thread.get_avg_price).start()
  33. msg = f"{document.filename} uploaded successfully"
  34. if delete_after_upload:
  35. os.remove(upload_location)
  36.  
  37. return render_template("index.html",
  38. delete=delete_after_download,
  39. form=form,
  40. filename=FILE_NAME_PREFIX + filename,
  41. message=msg,
  42. thread_id=thread_id,
  43. track=True)
  44.  
  45. return render_template("index.html", form=form, errors=form.errors)
  46.  
  47.  
  48. @app_bp.route("/progress/<int:thread_id>")
  49. def progress(thread_id):
  50. global exporting_threads
  51.  
  52. @after_this_request
  53. def delete_thread(response):
  54. del exporting_threads[thread_id]
  55. return response
  56.  
  57. return Response(exporting_threads[thread_id].get_progress(), mimetype='text/event-stream')
  58.  
  59.  
  60. @app_bp.route("/download")
  61. def download():
  62. file = request.args.get("file")
  63. delete = bool(request.args.get("delete"))
  64.  
  65. if delete:
  66. @after_this_request
  67. def remove_file(response):
  68. os.remove(os.path.join(RESULTS_FOLDER, file))
  69. return response
  70.  
  71. response = send_file(os.path.join(RESULTS_FOLDER, file), attachment_filename=file, as_attachment=True)
  72. response.headers["x-filename"] = file
  73. response.headers["Access-Control-Expose-Headers"] = 'x-filename'
  74. return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement