コード例 #1
0
    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
コード例 #2
0
    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