Completed admin views
Corrected model method return values
This commit is contained in:
		@@ -2,7 +2,7 @@ from ..data import data
 | 
			
		||||
from ..modules import db
 | 
			
		||||
from ..tools.logs import write
 | 
			
		||||
 | 
			
		||||
from flask import flash, jsonify
 | 
			
		||||
from flask import flash
 | 
			
		||||
from flask_login import current_user
 | 
			
		||||
from werkzeug.utils import secure_filename
 | 
			
		||||
 | 
			
		||||
@@ -41,11 +41,11 @@ class Dataset(db.Model):
 | 
			
		||||
        if self.default:
 | 
			
		||||
            message = 'Cannot delete the default dataset.'
 | 
			
		||||
            flash(message, 'error')
 | 
			
		||||
            return False, jsonify({'error': message})
 | 
			
		||||
            return False, message
 | 
			
		||||
        if Dataset.query.all().count() == 1:
 | 
			
		||||
            message = 'Cannot delete the only dataset.'
 | 
			
		||||
            flash(message, 'error')
 | 
			
		||||
            return False, jsonify({'error': message})
 | 
			
		||||
            return False, message
 | 
			
		||||
        write('system.log', f'Dataset {self.id} deleted by {current_user.get_username()}.')
 | 
			
		||||
        filename = secure_filename('.'.join([self.id,'json']))
 | 
			
		||||
        file_path = path.join(data, 'questions', filename)
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ from ..tools.encryption import decrypt, encrypt
 | 
			
		||||
from ..tools.logs import write
 | 
			
		||||
from .test import Test
 | 
			
		||||
 | 
			
		||||
from flask import jsonify
 | 
			
		||||
from flask_login import current_user
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, timedelta
 | 
			
		||||
@@ -79,7 +78,7 @@ class Entry(db.Model):
 | 
			
		||||
        write('tests.log', f'Test completed by {self.get_first_name()} {self.get_surname()}.')
 | 
			
		||||
        delta = timedelta(minutes=self.test.time_limit+1)
 | 
			
		||||
        if not self.test.time_limit or self.end_time <= self.start_time + delta:
 | 
			
		||||
            self.status = 'finished'
 | 
			
		||||
            self.status = 'completed'
 | 
			
		||||
            self.valid = True
 | 
			
		||||
        else:
 | 
			
		||||
            self.status = 'late'
 | 
			
		||||
@@ -87,10 +86,18 @@ class Entry(db.Model):
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
 | 
			
		||||
    def validate(self):
 | 
			
		||||
        if self.valid: return False, jsonify({'error':f'The entry is already valid.'})
 | 
			
		||||
        if self.status == 'started': return False, jsonify({'error':f'The entry is still pending.'})
 | 
			
		||||
        if self.valid: return False, f'The entry is already valid.'
 | 
			
		||||
        if self.status == 'started': return False, 'The entry is still pending.'
 | 
			
		||||
        self.valid = True
 | 
			
		||||
        self.status = 'completed'
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        message = f'The entry {self.id} has been validated by {current_user.get_username()}.'
 | 
			
		||||
        return True, jsonify({'success': message})
 | 
			
		||||
        write('system.log', f'The entry {self.id} has been validated by {current_user.get_username()}.')
 | 
			
		||||
        return True, f'The entry {self.id} has been validated.'
 | 
			
		||||
 | 
			
		||||
    def delete(self):
 | 
			
		||||
        id = self.id
 | 
			
		||||
        name = f'{self.get_first_name()} {self.get_surname()}'
 | 
			
		||||
        db.session.delete(self)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        write('system.log', f'The entry {id} by {name} has been deleted by {current_user.get_username()}.')
 | 
			
		||||
        return True, 'Entry deleted.'
 | 
			
		||||
@@ -3,11 +3,9 @@ from ..tools.encryption import decrypt, encrypt
 | 
			
		||||
from ..tools.forms import JsonEncodedDict
 | 
			
		||||
from ..tools.logs import write
 | 
			
		||||
 | 
			
		||||
from flask import jsonify
 | 
			
		||||
from flask.helpers import flash
 | 
			
		||||
from flask_login import current_user
 | 
			
		||||
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from datetime import date, datetime
 | 
			
		||||
from json import dump, loads
 | 
			
		||||
import os
 | 
			
		||||
import secrets
 | 
			
		||||
@@ -48,35 +46,45 @@ class Test(db.Model):
 | 
			
		||||
        self.generate_id()
 | 
			
		||||
        self.generate_code()
 | 
			
		||||
        self.creator = current_user
 | 
			
		||||
        errors = []
 | 
			
		||||
        if self.start_date.date() < date.today():
 | 
			
		||||
            errors.append('The start date cannot be in the past.')
 | 
			
		||||
        if self.end_date.date() < date.today():
 | 
			
		||||
            errors.append('The expiry date cannot be in the past.')
 | 
			
		||||
        if self.end_date < self.start_date:
 | 
			
		||||
            errors.append('The expiry date cannot be before the start date.')
 | 
			
		||||
        if errors:
 | 
			
		||||
            return False, errors
 | 
			
		||||
        db.session.add(self)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        write('system.log', f'Test with code {self.code} created by {current_user.get_username()}.')
 | 
			
		||||
        write('system.log', f'Test with code {self.get_code()} created by {current_user.get_username()}.')
 | 
			
		||||
        return True, f'Test with code {self.get_code()} has been created.'
 | 
			
		||||
    
 | 
			
		||||
    def delete(self):
 | 
			
		||||
        code = self.code
 | 
			
		||||
        if self.entries: return False, f'Cannot delete a test with submitted entries.'
 | 
			
		||||
        db.session.delete(self)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        write('system.log', f'Test with code {code} deleted by {current_user.get_username()}.')
 | 
			
		||||
        write('system.log', f'Test with code {code} has been deleted by {current_user.get_username()}.')
 | 
			
		||||
        return True, f'Test with code {code} has been deleted.'
 | 
			
		||||
    
 | 
			
		||||
    def start(self):
 | 
			
		||||
        now = datetime.now()
 | 
			
		||||
        if self.start_date > now:
 | 
			
		||||
        if self.start_date.date() > now.date():
 | 
			
		||||
            self.start_date = now
 | 
			
		||||
            db.session.commit()
 | 
			
		||||
            message = f'Test with code {self.code} started by {current_user.get_username()}.'
 | 
			
		||||
            write('system.log', message)
 | 
			
		||||
            return True, jsonify({'success': message})
 | 
			
		||||
        return False, jsonify({'error': f'Test with code {self.code} has already started.'})
 | 
			
		||||
            write('system.log', f'Test with code {self.code} has been started by {current_user.get_username()}.')
 | 
			
		||||
            return True,  f'Test with code {self.code} has been started.'
 | 
			
		||||
        return False, f'Test with code {self.code} has already started.'
 | 
			
		||||
 | 
			
		||||
    def end(self):
 | 
			
		||||
        now = datetime.now()
 | 
			
		||||
        if self.end_date > now:
 | 
			
		||||
        if self.end_date.date() > now.date():
 | 
			
		||||
            self.end_date = now
 | 
			
		||||
            db.session.commit()
 | 
			
		||||
            message = f'Test with code {self.code} ended by {current_user.get_username()}.'
 | 
			
		||||
            write('system.log', message)
 | 
			
		||||
            return True, jsonify({'success': message})
 | 
			
		||||
        return False, jsonify({'error': f'Test with code {self.code} has already started.'})
 | 
			
		||||
            write('system.log', f'Test with code {self.code} ended by {current_user.get_username()}.')
 | 
			
		||||
            return True, f'Test with code {self.code} has been ended.'
 | 
			
		||||
        return False, f'Test with code {self.code} has already ended.'
 | 
			
		||||
 | 
			
		||||
    def add_adjustment(self, time:int):
 | 
			
		||||
        adjustments = self.adjustments if self.adjustments is not None else {}
 | 
			
		||||
@@ -85,23 +93,21 @@ class Test(db.Model):
 | 
			
		||||
        self.adjustments = adjustments
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        write('system.log', f'Time adjustment for {time} minutes with code {code} added to test {self.get_code()} by {current_user.get_username()}.')
 | 
			
		||||
        return True, jsonify({'success': f'Time adjustment for {time} minutes added to test {self.get_code()}. This can be accessed using the user code {code.upper()}.'})
 | 
			
		||||
        return True, f'Time adjustment for {time} minutes added to test {self.get_code()}. This can be accessed using the user code {code.upper()}.'
 | 
			
		||||
 | 
			
		||||
    def remove_adjustment(self, code:str):
 | 
			
		||||
        if not self.adjustments: return False, jsonify({'error': f'There are no adjustments configured for test {self.get_code()}.'})
 | 
			
		||||
        if not self.adjustments: return False, f'There are no adjustments configured for test {self.get_code()}.'
 | 
			
		||||
        self.adjustments.pop(code)
 | 
			
		||||
        if not self.adjustments: self.adjustments = None
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        message = f'Time adjustment for with code {code} removed from test {self.get_code()} by {current_user.get_username()}.'
 | 
			
		||||
        write('system.log', message)
 | 
			
		||||
        return True, jsonify({'success': message})
 | 
			
		||||
        write('system.log', f'Time adjustment for with code {code} has been removed from test {self.get_code()} by {current_user.get_username()}.')
 | 
			
		||||
        return True, f'Time adjustment for with code {code} has been removed from test {self.get_code()}.'
 | 
			
		||||
 | 
			
		||||
    def update(self, start_date:datetime=None, end_date:datetime=None, time_limit:int=None):
 | 
			
		||||
        if not start_date and not end_date and time_limit is None: return False, jsonify({'error': 'There were no changes requested.'})
 | 
			
		||||
        if not start_date and not end_date and time_limit is None: return False, 'There were no changes requested.'
 | 
			
		||||
        if start_date: self.start_date = start_date
 | 
			
		||||
        if end_date: self.end_date = end_date
 | 
			
		||||
        if time_limit is not None: self.time_limit = time_limit
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        message = f'Test with code {self.get_code()} has been updated by user {current_user.get_username()}'
 | 
			
		||||
        write('system.log', message)
 | 
			
		||||
        return True, jsonify({'success': message})
 | 
			
		||||
        write('system.log', f'Test with code {self.get_code()} has been updated by user {current_user.get_username()}.')
 | 
			
		||||
        return True, f'Test with code {self.get_code()} has been updated by.'
 | 
			
		||||
@@ -99,7 +99,7 @@ class User(UserMixin, db.Model):
 | 
			
		||||
        return True, message
 | 
			
		||||
 | 
			
		||||
    def update(self, password:str=None, email:str=None, notify:bool=False):
 | 
			
		||||
        if not password and not email: return False, jsonify({'error': 'There were no changes requested.'})
 | 
			
		||||
        if not password and not email: return False, 'There were no changes requested.'
 | 
			
		||||
        if password: self.set_password(password)
 | 
			
		||||
        if email: self.set_email(email)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user