import secrets from datetime import datetime from uuid import uuid4 from flask import flash, jsonify from main import db from security import encrypt, decrypt class Test: def __init__(self, _id=None, expiry=None, time_limit=None, creator=None): self._id = _id self.expiry = expiry self.time_limit = None if time_limit == 'none' or time_limit == '' else time_limit self.creator = creator def create(self): test = { '_id': self._id, 'date': datetime.today(), 'expiry': self.expiry, 'time_limit': self.time_limit, 'creator': encrypt(self.creator), 'test_code': secrets.token_hex(6).upper() } if db.tests.insert_one(test): flash(f'Created a new exam with Exam Code {self.render_test_code(test["test_code"])}.', 'success') return jsonify({'success': test}), 200 return jsonify({'error': f'Could not create exam. An error occurred.'}), 400 def add_user_code(self, user_code, time_adjustment): code = { '_id': uuid4().hex, 'user_code': user_code, 'time_adjustment': time_adjustment } if db.tests.find_one_and_update({'_id': self._id}, {'$push': {'time_adjustments': code}},upsert=False): return jsonify({'success': code}) else: return jsonify({'error': 'An error occurred.'}), 400 def render_test_code(self, test_code): return '—'.join([test_code[:4], test_code[4:8], test_code[8:]]) def parse_test_code(self, test_code): return test_code.replace('—', '')