Added a whole lot of views.
Finished quiz API views Finished question generator and answer eval
This commit is contained in:
		@@ -1,4 +1,10 @@
 | 
			
		||||
from flask import Blueprint
 | 
			
		||||
from ..models import Dataset, Entry
 | 
			
		||||
from ..tools.test import evaluate_answers, generate_questions
 | 
			
		||||
 | 
			
		||||
from flask import Blueprint, jsonify, request
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, timedelta
 | 
			
		||||
from json import loads
 | 
			
		||||
 | 
			
		||||
api = Blueprint(
 | 
			
		||||
    name='api',
 | 
			
		||||
@@ -7,8 +13,54 @@ api = Blueprint(
 | 
			
		||||
 | 
			
		||||
@api.route('/questions/', methods=['POST'])
 | 
			
		||||
def _fetch_questions():
 | 
			
		||||
    return 'Fetch Questions'
 | 
			
		||||
    id = request.get_json()['id']
 | 
			
		||||
    entry = Entry.query.filter_by(id=id).first()
 | 
			
		||||
    if not entry: return jsonify({'error': 'Invalid entry ID.'}), 400
 | 
			
		||||
    test = entry['test']
 | 
			
		||||
    user_code = entry['user_code']
 | 
			
		||||
    time_limit = test['time_limit']
 | 
			
		||||
    time_adjustment = 0
 | 
			
		||||
    if time_limit:
 | 
			
		||||
        _time_limit = int(time_limit)
 | 
			
		||||
        if user_code:
 | 
			
		||||
            time_adjustment = test['time_adjustments'][user_code]
 | 
			
		||||
            _time_limit += time_adjustment
 | 
			
		||||
        end_delta = timedelta(minutes=_time_limit)
 | 
			
		||||
        end_time = datetime.utcnow() + end_delta
 | 
			
		||||
    else:
 | 
			
		||||
        end_time = None
 | 
			
		||||
    entry.start()
 | 
			
		||||
    dataset = test['dataset']
 | 
			
		||||
    success, message = dataset.check_file()
 | 
			
		||||
    if not success: return jsonify({'error': message}), 500
 | 
			
		||||
    data_path = dataset.get_file()
 | 
			
		||||
    with open(data_path, 'r') as data_file:
 | 
			
		||||
        data = loads(data_file.read())
 | 
			
		||||
    questions = generate_questions(data)
 | 
			
		||||
    return jsonify({
 | 
			
		||||
        'time_limit': end_time,
 | 
			
		||||
        'questions': questions,
 | 
			
		||||
        'start_time': entry['start_time'],
 | 
			
		||||
        'time_adjustment': time_adjustment
 | 
			
		||||
    }), 200
 | 
			
		||||
 | 
			
		||||
@api.route('/submit/', methods=['POST'])
 | 
			
		||||
def _submit_quiz():
 | 
			
		||||
    return 'Submit Quiz'
 | 
			
		||||
    id = request.get_json()['id']
 | 
			
		||||
    answers = request.get_json()['answers']
 | 
			
		||||
    entry = Entry.query.filter_by(id=id).first()
 | 
			
		||||
    if not entry: return jsonify({'error': 'Unrecognised ID.'}), 400
 | 
			
		||||
    test = entry['test']
 | 
			
		||||
    dataset = test['dataset']
 | 
			
		||||
    success, message = dataset.check_file()
 | 
			
		||||
    if not success: return jsonify({'error': message}), 500
 | 
			
		||||
    data_path = dataset.get_file()
 | 
			
		||||
    with open(data_path, 'r') as data_file:
 | 
			
		||||
        data = loads(data_file.read())
 | 
			
		||||
    result = evaluate_answers(answers=answers, key=data)
 | 
			
		||||
    entry.complete(answers=answers, result=result)
 | 
			
		||||
    return jsonify({
 | 
			
		||||
        'success': 'Your submission has been processed. Redirecting you to receive your results.',
 | 
			
		||||
        'id': id
 | 
			
		||||
    }), 200
 | 
			
		||||
    
 | 
			
		||||
		Reference in New Issue
	
	Block a user