Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import random
- import threading
- from flask import render_template, Blueprint, Response, after_this_request, request, send_file, stream_with_context
- from ebayavgprice import UPLOAD_FOLDER, RESULTS_FOLDER, FILE_NAME_PREFIX
- from ebayavgprice.forms import FileUploadForm
- from ebayavgprice.functions import EbayAvgPrice
- app_bp = Blueprint("app_bp", __name__, template_folder="templates")
- exporting_threads = {}
- @app_bp.route("/", methods=["GET", "POST"])
- def index():
- global exporting_threads
- form = FileUploadForm()
- if form.validate_on_submit():
- document = form.document.data
- has_headers = form.has_headers.data
- delete_after_upload = form.delete_after_upload.data
- delete_after_download = form.delete_after_download.data
- filename = str(random.randint(100000, 999999)) + "_" + document.filename
- upload_location = os.path.join(UPLOAD_FOLDER, filename)
- document.save(upload_location)
- user_thread = EbayAvgPrice(upload_location, has_headers)
- thread_id = len(exporting_threads) + 1
- exporting_threads[thread_id] = user_thread
- threading.Thread(target=user_thread.get_avg_price).start()
- msg = f"{document.filename} uploaded successfully"
- if delete_after_upload:
- os.remove(upload_location)
- return render_template("index.html",
- delete=delete_after_download,
- form=form,
- filename=FILE_NAME_PREFIX + filename,
- message=msg,
- thread_id=thread_id,
- track=True)
- return render_template("index.html", form=form, errors=form.errors)
- @app_bp.route("/progress/<int:thread_id>")
- def progress(thread_id):
- global exporting_threads
- @after_this_request
- def delete_thread(response):
- del exporting_threads[thread_id]
- return response
- return Response(exporting_threads[thread_id].get_progress(), mimetype='text/event-stream')
- @app_bp.route("/download")
- def download():
- file = request.args.get("file")
- delete = bool(request.args.get("delete"))
- if delete:
- @after_this_request
- def remove_file(response):
- os.remove(os.path.join(RESULTS_FOLDER, file))
- return response
- response = send_file(os.path.join(RESULTS_FOLDER, file), attachment_filename=file, as_attachment=True)
- response.headers["x-filename"] = file
- response.headers["Access-Control-Expose-Headers"] = 'x-filename'
- return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement