示例#1
0
    def add(self):
        if not request.is_json:
            return jsonify({"msg": "missing json request"}), 400

        first_name = request.json.get('first_name', None)
        last_name = request.json.get('last_name', None)
        expire_date = datetime.datetime.strptime(
            request.json.get('expire_date', None), '%Y-%m-%d')
        national_id = request.json.get('national_id', None)
        advisor = request.json.get('advisor', None)
        student_id = request.json.get(
            'student_id', None)  #TODO: generate a unique vlaue instead of None
        user_id = get_current_user().id
        exams = []
        workbooks = []
        classes = []

        try:
            session = db_session()
            student = Student(first_name, last_name, expire_date, national_id,
                              advisor, student_id, user_id, classes, exams,
                              workbooks)
            session.add(student)
            session.commit()
            return jsonify(success=True), 201
        except Exception as e:
            session.rollback()
            Logger.debug("could not create student")
            Logger.error(e.message)
            print e.message
            return jsonify(success=False), 400
示例#2
0
    def _update_db(self, presents_id, all_results):

        session = db_session()
        try:
            workbooks = session.query(Workbook).filter(
                Workbook.exam_id == self.exam.id).all()

            for workbook in workbooks:
                student_id = session.query(Student).filter(
                    Student.id == workbook.student_id).first().student_id
                if student_id in presents_id:
                    workbook.presence = True
                    workbook.answers = all_results[student_id]
                else:
                    workbook.presence = False

                session.add(workbook)
                session.commit()
            session.close()
        except Exception as e:
            Logger.debug("could not update the presents in database")
            Logger.error(e.message)

        finally:
            session.close()
示例#3
0
    def registration(self):
        if not request.is_json:
            return jsonify({"msg": "Missing JSON in request"}), 400
        username = request.json.get('username', None)  #TODO: hash the password
        password = request.json.get('password')
        first_name = request.json.get('first_name')
        last_name = request.json.get('last_name')
        email = request.json.get('email')
        national_id = request.json.get('national_id')
        classes = []
        students = []
        exams = []
        account_activated = True
        # roles = [Role('holder')]

        session = db_session()
        try:
            user = User(first_name, last_name, email, national_id, username,
                        password, account_activated, classes, students, exams)
            session.add(user)
            session.commit()
            #TODO: redirect and provide JWT token and return it
            return jsonify(success=True), 201
        except Exception as e:
            session.rollback()
            Logger.debug("registration: Could not add new user to database")
            Logger.error(e.message)
            return jsonify(success=False), 400
示例#4
0
    def post(self):
        if not request.is_json:
            return jsonify({"msg": "missing json request"}), 400

        name = request.json.get('name', None)
        answers_key = request.json.get('answers_key', dict())
        date = datetime.datetime.strptime(request.json.get('date', None),
                                          '%Y-%m-%d')
        description = request.json.get('description', None)
        lessons = request.json.get('lessons', dict())
        setting = request.json.get('setting', dict())
        marks = dict()
        ranks = dict()
        percentage_of_responses_to_questions = dict()
        user_id = get_current_user().id
        students = list()
        workbooks = list()
        classes = list()

        try:
            session = db_session()
            exam = Exam(name, answers_key, date, description, lessons, setting,
                        marks, ranks, percentage_of_responses_to_questions,
                        user_id, students, classes, workbooks)
            session.add(exam)
            session.commit()
            return jsonify(success=True), 201
        except Exception as e:
            session.rollback()
            Logger.debug("could not create new exam")
            Logger.error(e.message)
            return jsonify(success=False), 400
示例#5
0
 def generate_workbook_for_students(self):
     session = db_session()
     for student in self.exam.students:
         workbook = Workbook(datetime.datetime.now(), {}, {}, False,
                             student.id, self.exam.id)
         student.workbooks.append(workbook)
         # session = session.object_session(student)
         session.add(student)
         session.commit()
     session.close()
示例#6
0
    def run_correction(self):
        #calculate true or false answers
        workbooks_evaluated_answers_dic = self.__corrector.evaluate_answers_for_all(
        )

        #calculate and write percentages to database
        workbooks_percentages_dic = self.__corrector.calculate_percentage_for_all_students(
            workbooks_evaluated_answers_dic)

        #calculate balance to each lesson and for all students
        workbooks_balances_dic = self.__corrector.calculate_lessons_balance_for_all(
            workbooks_percentages_dic)

        #calculate ranks for each lesson for all students
        workbooks_lessons_ranks_dic = self.__corrector.calculate_lessons_ranks_for_all(
            workbooks_balances_dic)

        #calculate total balance for each student
        workbooks_total_balances_dic = self.__corrector.calculate_total_balance_for_all(
            workbooks_balances_dic)

        #calculate ranks
        sorted_by_balance_tuple = sorted(workbooks_total_balances_dic.items(),
                                         key=operator.itemgetter(1),
                                         reverse=True)

        session = db_session()

        #write data to database
        try:
            for index, workbook_balance_tuple in enumerate(
                    sorted_by_balance_tuple):
                workbook_id, balance = workbook_balance_tuple
                result = {}
                workbook = session.query(Workbook).filter(
                    Workbook.id == workbook_id).first()
                workbook.answers = workbooks_evaluated_answers_dic[workbook]
                result["percentages"] = workbooks_percentages_dic[workbook_id]
                result["rank"] = index + 1
                result["balance"] = balance
                result["total_growth"] = None
                result["lessons_rank"] = workbooks_lessons_ranks_dic[
                    workbook_id]
                result["lessons_growth"] = {}
                workbook.results = result
                session.add(workbook)
                session.commit()
        except Exception as e:
            Logger.debug("could not write results to database")
            Logger.error(e.message)
            raise
        finally:
            session.close()
示例#7
0
        def decorated_function(*args, **kwargs):
            user = "******"
            try:
                user = g.user.id
            except:
                pass
            log = Log(log_date=str(datetime.datetime.now()), log_desc=_("go to :") + title, log_user=user)
            session = db_session()
            session._model_changes = {}
            session.add(log)
            session.commit()

            g.page_title = title
            return f(*args, **kwargs)
示例#8
0
        def decorated_function(*args, **kwargs):
            user = '******'
            try:
                user = g.user.id
            except:
                pass
            log = Log(log_date=str(datetime.datetime.now()),
                      log_desc=_('go to :') + title,
                      log_user=user)
            session = db_session()
            session._model_changes = {}
            session.add(log)
            session.commit()

            g.page_title = title
            return f(*args, **kwargs)
示例#9
0
    def add(self):
        if not request.is_json:
            return jsonify({"msg": "missing json request"}), 400
        name = request.json.get("name", None)
        desciption = request.json.get("description", None)
        students = []
        user_id = get_current_user().id
        exams = []

        try:
            session = db_session()
            new_class = Class(name, desciption, students, user_id, exams)
            session.add(new_class)
            session.commit()
            return jsonify(success=True), 201
        except Exception as e:
            session.rollback()
            Logger.debug("could not create new class")
            Logger.error(e.message)
            return jsonify(success=False), 400
示例#10
0
 def add_exams(self, class_id):
     try:
         session = db_session()
         if not request.is_json:
             return jsonify({"msg": "missing json request"}), 400
         exams = request.json.get('exams', None)
         the_class = Class.query.filter_by(id=class_id).first()
         for exam_id in exams:
             exam = Exam.query.filter_by(id=exam_id).first()
             exam.students += the_class.students
             the_class.exams.append(exam)
             exam.classes.append(the_class)
             session.add(the_class)
             session.add(exam)
             session.commit()
         return jsonify(success=True), 200
     except Exception as e:
         session.rollback()
         Logger.debug("could not assign exams to class")
         Logger.error(e.message)
         return jsonify(success=False), 400
示例#11
0
    def patch(self, id):
        exam = Exam.query.filter_by(id=id).first()
        if not request.is_json:
            return jsonify({"msg": "missing json request"}), 400
        exam.name = request.json.get('name', exam.name)
        exam.answers_key = request.json.get('answers_key', exam.answers_key)
        # exam.date = datetime.datetime.strptime(request.json.get('date', str(exam.date)),'%Y-%m-%d')
        exam.description = request.json.get('description', exam.description)
        exam.lessons = request.json.get('lessons', exam.lessons)
        exam.setting = request.json.get('setting', exam.setting)

        try:
            session = db_session()
            session.add(exam)
            session.commit()
            return jsonify(success=True), 200
        except Exception as e:
            session.rollback()
            Logger.debug("could not update exam")
            Logger.error(e.message)
            return jsonify(success=False), 400
示例#12
0
 def add_students(self, class_id):
     try:
         if not request.is_json:
             return jsonify({"msg": "missing json request"}), 400
         students = request.json.get('students', None)
         the_class = Class.query.filter_by(id=class_id).first()
         session = db_session()
         for student_id in students:
             student = Student.query.filter_by(id=student_id).first()
             student.classes.append(the_class)
             the_class.students.append(student)
             if the_class.exams:
                 for exam in the_class.exams:
                     exam.students.append(student)
                     session.add(exam)
             session.add(the_class)
             session.add(student)
             session.commit()
         return jsonify(success=True), 200
     except Exception as e:
         session.rollback()
         Logger.debug("could not assign students to class")
         Logger.error(e.message)
         return jsonify(success=False), 400
 def get_user(identity):
     session = db_session()
     return session.query(User).filter(User.username == identity).first()