Added functionality for default datasets.
Incorporated dataset selector into test creation.
This commit is contained in:
		@@ -55,6 +55,8 @@ class CreateTest(FlaskForm):
 | 
			
		||||
    ]
 | 
			
		||||
    expiry_date = DateField('Expiry Date', format="%Y-%m-%d", validators=[InputRequired()], default = date.today() + timedelta(days=1) )
 | 
			
		||||
    time_limit = SelectField('Time Limit', choices=time_options)
 | 
			
		||||
    dataset = SelectField('Question Dataset')
 | 
			
		||||
 | 
			
		||||
class UploadDataForm(FlaskForm):
 | 
			
		||||
    data_file = FileField('Data File', validators=[FileRequired(), FileAllowed(['json'])])
 | 
			
		||||
    data_file = FileField('Data File', validators=[FileRequired(), FileAllowed(['json'])])
 | 
			
		||||
    default = BooleanField('Make Default', render_kw={'checked': True})
 | 
			
		||||
@@ -3,17 +3,20 @@ from datetime import datetime
 | 
			
		||||
from uuid import uuid4
 | 
			
		||||
from flask import flash, jsonify
 | 
			
		||||
import secrets
 | 
			
		||||
import os
 | 
			
		||||
from json import dump, loads
 | 
			
		||||
 | 
			
		||||
from main import db
 | 
			
		||||
from main import app, db
 | 
			
		||||
from common.security import encrypt
 | 
			
		||||
 | 
			
		||||
class Test:
 | 
			
		||||
    def __init__(self, _id=None, start_date=None, expiry_date=None, time_limit=None, creator=None):
 | 
			
		||||
    def __init__(self, _id=None, start_date=None, expiry_date=None, time_limit=None, creator=None, dataset=None):
 | 
			
		||||
        self._id = _id
 | 
			
		||||
        self.start_date = start_date
 | 
			
		||||
        self.expiry_date = expiry_date
 | 
			
		||||
        self.time_limit = None if time_limit == 'none' or time_limit == '' else time_limit
 | 
			
		||||
        self.creator = creator
 | 
			
		||||
        self.dataset = dataset
 | 
			
		||||
    
 | 
			
		||||
    def create(self):
 | 
			
		||||
        test = {
 | 
			
		||||
@@ -23,9 +26,16 @@ class Test:
 | 
			
		||||
            'expiry_date': self.expiry_date,
 | 
			
		||||
            'time_limit': self.time_limit,
 | 
			
		||||
            'creator': encrypt(self.creator),
 | 
			
		||||
            'test_code': secrets.token_hex(6).upper()
 | 
			
		||||
            'test_code': secrets.token_hex(6).upper(),
 | 
			
		||||
            'dataset': self.dataset
 | 
			
		||||
        }
 | 
			
		||||
        if db.tests.insert_one(test):
 | 
			
		||||
            dataset_file_path = os.path.join(app.config["DATA_FILE_DIRECTORY"],self.dataset)
 | 
			
		||||
            with open(dataset_file_path, 'r') as dataset_file:
 | 
			
		||||
                data = loads(dataset_file.read())
 | 
			
		||||
            data['meta']['tests'].append(self._id)
 | 
			
		||||
            with open(dataset_file_path, 'w') as dataset_file:
 | 
			
		||||
                dump(data, dataset_file, indent=2)
 | 
			
		||||
            flash(f'Created a new exam with Exam Code <strong>{self.render_test_code(test["test_code"])}</strong>.', 'success')
 | 
			
		||||
            return jsonify({'success': test}), 200
 | 
			
		||||
        return jsonify({'error': f'Could not create exam. An error occurred.'}), 400
 | 
			
		||||
@@ -54,7 +64,15 @@ class Test:
 | 
			
		||||
        return test_code.replace('—', '')
 | 
			
		||||
    
 | 
			
		||||
    def delete(self):
 | 
			
		||||
        if self.dataset is None:
 | 
			
		||||
            self.dataset = db.tests.find_one({'_id': self._id})['dataset']
 | 
			
		||||
        if db.tests.delete_one({'_id': self._id}):
 | 
			
		||||
            dataset_file_path = os.path.join(app.config["DATA_FILE_DIRECTORY"],self.dataset)
 | 
			
		||||
            with open(dataset_file_path, 'r') as dataset_file:
 | 
			
		||||
                data = loads(dataset_file.read())
 | 
			
		||||
            data['meta']['tests'].remove(self._id)
 | 
			
		||||
            with open(dataset_file_path, 'w') as dataset_file:
 | 
			
		||||
                dump(data, dataset_file, indent=2)
 | 
			
		||||
            message = 'Deleted exam.'
 | 
			
		||||
            flash(message, 'alert')
 | 
			
		||||
            return jsonify({'success': message}), 200
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user