示例#1
0
    def get_evaluated_quizitems_count(self,
                                      correct_ans_flag=False,
                                      incorrect_ans_flag=False):

        if not hasattr(self, 'list_of_qi_ids') and not hasattr(
                self, 'total_qi_cur'):
            self.total_qi_cur = self.get_attempted_quizitems_count(True)
            self.list_of_qi_ids = []
            for each_qi in self.total_qi_cur:
                correct_ans_list = None
                if each_qi.origin:
                    prior_node_id = each_qi.origin[0].get(
                        'prior_node_id_of_thread', None)
                    if prior_node_id:
                        prior_node_obj = node_collection.one(
                            {'_id': ObjectId(prior_node_id)}, {
                                '_id': 1,
                                'attribute_set': 1
                            })
                        if prior_node_obj.attribute_set:
                            for pr_each_attr in prior_node_obj.attribute_set:
                                if pr_each_attr and 'correct_answer' in pr_each_attr:
                                    correct_ans_list = pr_each_attr[
                                        'correct_answer']
                                    break
                    if each_qi.attribute_set:
                        for each_attr in each_qi.attribute_set:
                            if each_attr and 'quizitempost_user_submitted_ans' in each_attr:
                                if each_attr[
                                        'quizitempost_user_submitted_ans']:
                                    submitted_ans = each_attr[
                                        'quizitempost_user_submitted_ans']
                                    if all(
                                            type(edict) == dict
                                            for edict in submitted_ans):
                                        submitted_ans = get_dict_from_list_of_dicts(
                                            each_attr[
                                                'quizitempost_user_submitted_ans']
                                        )
                                        submitted_ans = reduce(
                                            lambda x, y: x + y,
                                            submitted_ans.values())
                                        if correct_ans_list and submitted_ans:
                                            if sublistExists(
                                                    submitted_ans,
                                                    correct_ans_list):
                                                if each_qi._id not in self.list_of_qi_ids:
                                                    self.list_of_qi_ids.append(
                                                        each_qi._id)
                                break

        if correct_ans_flag:
            return len(self.list_of_qi_ids)

        elif incorrect_ans_flag:
            return (self.total_qi_cur.count() - len(self.list_of_qi_ids))

        else:
            return 0
示例#2
0
    def get_evaluated_quizitems_count(self, correct_ans_flag=False, incorrect_ans_flag=False):
        t0 = time.time()

        if not hasattr(self, "list_of_qi_ids") and not hasattr(self, "total_qi_cur"):
            self.total_qi_cur = self.get_attempted_quizitems_count(True)
            self.list_of_qi_ids = []
            for each_qi in self.total_qi_cur:
                if each_qi.origin:
                    prior_node_id = each_qi.origin[0].get("prior_node_id_of_thread", None)
                    if prior_node_id:
                        prior_node_obj = node_collection.one(
                            {"_id": ObjectId(prior_node_id)}, {"_id": 1, "attribute_set": 1}
                        )
                        if prior_node_obj.attribute_set:
                            for pr_each_attr in prior_node_obj.attribute_set:
                                if pr_each_attr and "correct_answer" in pr_each_attr:
                                    correct_ans_list = pr_each_attr["correct_answer"]
                    if each_qi.attribute_set:
                        for each_attr in each_qi.attribute_set:
                            if each_attr and "quizitempost_user_submitted_ans" in each_attr:
                                if each_attr["quizitempost_user_submitted_ans"]:
                                    submitted_ans = each_attr["quizitempost_user_submitted_ans"]
                                    if all(type(edict) == dict for edict in submitted_ans):
                                        submitted_ans = get_dict_from_list_of_dicts(
                                            each_attr["quizitempost_user_submitted_ans"]
                                        )
                                        submitted_ans = reduce(lambda x, y: x + y, submitted_ans.values())

                                        if correct_ans_list and submitted_ans:
                                            if sublistExists(submitted_ans, correct_ans_list):
                                                if each_qi._id not in self.list_of_qi_ids:
                                                    self.list_of_qi_ids.append(each_qi._id)
        if correct_ans_flag:
            t1 = time.time()
            time_diff = t1 - t0
            # print "\n get_evaluated_quizitems_count == ", time_diff

            return len(self.list_of_qi_ids)
        elif incorrect_ans_flag:
            t1 = time.time()
            time_diff = t1 - t0
            # print "\n get_evaluated_quizitems_count == ", time_diff

            return self.total_qi_cur.count() - len(self.list_of_qi_ids)
        else:
            return 0
示例#3
0
	def get_evaluated_quizitems_count(self,correct_ans_flag=False, incorrect_ans_flag=False):
		

		if not hasattr(self,'list_of_qi_ids') and not hasattr(self,'total_qi_cur'):
			self.total_qi_cur = self.get_attempted_quizitems_count(True)
			self.list_of_qi_ids = []
			for each_qi in self.total_qi_cur:
				if each_qi.origin:
					prior_node_id = each_qi.origin[0].get('prior_node_id_of_thread',None)
					if prior_node_id:
						prior_node_obj = node_collection.one({'_id': ObjectId(prior_node_id)},{'_id':1, 'attribute_set':1})
						if prior_node_obj.attribute_set:
							for pr_each_attr in prior_node_obj.attribute_set:
								if pr_each_attr and 'correct_answer' in pr_each_attr:
									correct_ans_list = pr_each_attr['correct_answer']
									break
					if each_qi.attribute_set:
						for each_attr in each_qi.attribute_set:
							if each_attr and 'quizitempost_user_submitted_ans' in each_attr:
								if each_attr['quizitempost_user_submitted_ans']:
									submitted_ans = each_attr['quizitempost_user_submitted_ans']
									if all(type(edict)==dict for edict in submitted_ans):
										submitted_ans = get_dict_from_list_of_dicts(each_attr['quizitempost_user_submitted_ans'])
										submitted_ans = reduce(lambda x, y: x+y, submitted_ans.values())
										if correct_ans_list and submitted_ans:
											if sublistExists(submitted_ans, correct_ans_list):
												if each_qi._id not in self.list_of_qi_ids:
													self.list_of_qi_ids.append(each_qi._id)
								break
		if correct_ans_flag:
			
			

			return len(self.list_of_qi_ids)
		elif incorrect_ans_flag:
			
			

			return (self.total_qi_cur.count()-len(self.list_of_qi_ids))
		else:
			return 0