def _get_old_in_time_exam(self): now = datetime.datetime.now() before_now_5min = now - datetime.timedelta(minutes=5) before_now_1day = now - datetime.timedelta(days=1) query1 = Exam.select(lambda x: x.created_at <= before_now_5min and (x.mistake > 0 or x.appear_count == 1)) before_now_2day = now - datetime.timedelta(days=2) query2 = Exam.select(lambda x: before_now_2day <= x.created_at and x. created_at <= before_now_1day and (x.mistake > 0 or x.appear_count <= 2)) before_now_4day = now - datetime.timedelta(days=4) query3 = Exam.select(lambda x: before_now_4day <= x.created_at and x. created_at <= before_now_2day and (x.mistake > 0 or x.appear_count <= 3)) before_now_7day = now - datetime.timedelta(days=7) query4 = Exam.select(lambda x: before_now_7day <= x.created_at and x. created_at <= before_now_4day and (x.mistake > 0 or x.appear_count <= 4)) before_now_15day = now - datetime.timedelta(days=15) query5 = Exam.select(lambda x: before_now_15day <= x.created_at and x. created_at <= before_now_7day and (x.mistake > 0 or x.appear_count <= 5)) query6 = Exam.select(lambda x: before_now_15day > x.created_at and (x.mistake > 0 or x.appear_count <= 6)) query = query1 or query2 or query3 or query4 or query5 or query6 if query.count(): exam = self._get_query_random(query) exam.appear_count += 1 if exam.mistake: exam.mistake -= 1 commit() return exam
def get_exam(self): exam = self._get_old_in_time_exam() if exam: return self.exam_to_dict(exam) ids_query = select(el.explain.id for el in Exam) while True: try: query = Explain.select(lambda x: x.id not in ids_query) explain = self._get_query_random(query) sentence = self._get_query_random( Sentence.select(lambda x: x.explain == explain)) exam_query = Exam.select(lambda x: x.sentence == sentence) if exam_query.count(): exam = exam_query.first() exam.appear_cout += 1 else: exam = Exam(word=explain.word, explain=explain, sentence=sentence) return self.exam_to_dict(exam) except Exception: pass