def upload_file(): try: now = datetime.now() competitions = [ c for c in Competition.query.all() if (not c.start_on or c.start_on <= now) and ( not c.end_on or c.end_on >= now) ] if request.method == 'POST': competition_id = request.form.get('competitions') if competition_id == None: flash('No competition selected') return redirect(request.url) user_id = login.current_user.id # check if the post request has the file part if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] # if user does not select file, browser also # submit a empty part without filename if file.filename == '': flash('No selected file') return redirect(request.url) # check if the user has made submissions in the past 24h if Submission.query.filter_by(user_id=user_id).filter_by( competition_id=competition_id).filter( Submission.submitted_on > now - timedelta(hours=23)).count() > 0: flash("You already did a submission in the past 24h.") return redirect(request.url) if file: filename = str(uuid.uuid4()) + ".csv" filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(filepath) # save submission submission = Submission() submission.user_id = login.current_user.id submission.competition_id = competition_id submission.filename = filename (submission.preview_score, submission.score) = get_scores(filepath, competition_id) submission.submitted_on = now.replace(microsecond=0) submission.comment = request.form.get("comment") db.session.add(submission) db.session.commit() return redirect(url_for('scores')) return render_template('submission.html', competitions=competitions) except ParsingError as e: flash(str(e)) return redirect(request.url)