예제 #1
0
파일: words.py 프로젝트: TesterCC/Rwords
    def add_word(self, word_name):
        """add a word"""
        try:
            word_info = get_word_info(word_name)
            mp3_path = utills.download_mp3(word_info['mp3_url'], word_name)

            word_store.create(
                word_info['word_name'],
                word_info['ph'],
                word_info['tran_means'],
                word_info['mp3_url'],
                mp3_path,
            )
            errno = 0
            errmsg = 'success'
            data = {}
        except IcibaInvalidWordException:
            errno = 1
            errmsg = "The '{}' cannot found in Iciba.".format(word_name)
            data = {}

        except WordRepeatAddException:
            errno = 1
            errmsg = "The '{}' is already in memory store!".format(word_name)
            data = {}

        return errno, errmsg, data
    def test_review_a_word(self):
        # TODO I don't know how to test it.
        # SO, smoke testing.
        with session_scope() as session:
            session.query(Word).filter_by(word_name=mock_info.word_info['word_name']).delete()
        word_id = word_store.create(
            mock_info.word_info['word_name'],
            mock_info.word_info['ph'],
            mock_info.word_info['tran_means'],
            mock_info.word_info['mp3_url'],
            '',
        )

        review_hander.review_a_word(word_id, 2)
        for i in range(3):
            review_hander.review_a_word(word_id, 5)
        with session_scope() as session:
            assert session.query(ReviewList).filter_by(word_id=word_id).first() is None
        review_list_store.add_word_in_list(word_id)
        review_hander.review_a_word(word_id, 5)

        with session_scope() as session:
            session.query(Mp3).filter_by(word_id=word_id).delete()
            session.query(ReviewList).filter_by(word_id=word_id).delete()
            session.query(Word).filter_by(id=word_id).delete()
예제 #3
0
 def test_create(self):
     mock_word_info = mock_info.word_info
     with session_scope() as session:
         session.query(Word).filter_by(
             word_name=mock_word_info['word_name']).delete()
         session.commit()
         word_id = word_store.create(
             mock_word_info['word_name'],
             mock_word_info['ph'],
             mock_word_info['tran_means'],
             mock_word_info['mp3_url'],
             '',
         )
         word_obj = session.query(Word).filter_by(id=word_id).first()
         assert word_obj.word_name == mock_word_info['word_name']
         assert word_obj.ph == mock_word_info['ph']
         tran_mean = word_obj.tran_means[0]
         assert {
             'part': tran_mean.part,
             'means': json.loads(tran_mean.means)
         } == mock_word_info['tran_means'][0]
         assert word_obj.mp3.url == mock_word_info['mp3_url']
         assert isinstance(word_obj.word_factor, WordFactor)
         session.query(Mp3).filter_by(word_id=word_id).delete()
         session.query(ReviewList).filter_by(word_id=word_id).delete()
         session.delete(word_obj)
         session.query(OptimumFactorMatrix).delete()
예제 #4
0
    def test_get_OF_matrix(self):
        mock_word_info = mock_info.word_info
        mock_OF_matrix = mock_info.OF_matrix
        with session_scope() as session:
            session.query(Word).filter_by(
                word_name=mock_word_info['word_name']).delete()
        word_id = word_store.create(
            mock_word_info['word_name'],
            mock_word_info['ph'],
            mock_word_info['tran_means'],
            mock_word_info['mp3_url'],
            '',
        )

        with session_scope() as session:
            word_factor_id = session.query(WordFactor).filter_by(
                word_id=word_id).first().id
            OF_objs = [
                OptimumFactorMatrix(word_factor_id=word_factor_id,
                                    number=item[0],
                                    OF=item[1]) for item in mock_OF_matrix
            ]
            session.add_all(OF_objs)

        assert word_factor_store.get_OF_matrix(word_id) == mock_OF_matrix

        with session_scope() as session:
            session.query(Mp3).filter_by(word_id=word_id).delete()
            session.query(ReviewList).filter_by(word_id=word_id).delete()
            session.query(Word).filter_by(id=word_id).delete()
            session.query(OptimumFactorMatrix).delete()
예제 #5
0
    def test_update_mp3(self):
        mock_word_info = mock_info.word_info
        with session_scope() as session:
            session.query(Word).filter_by(
                word_name=mock_word_info['word_name']).delete()

        word_id = word_store.create(
            mock_word_info['word_name'],
            mock_word_info['ph'],
            mock_word_info['tran_means'],
            mock_word_info['mp3_url'],
            '',
        )

        mock_path = '/data/mp3/mock.mp3'
        mock_url = mock_word_info['mp3_url'] + 'mock'
        word_store.update_mp3(id=word_id, path=mock_path, url=mock_url)
        assert word_store.get_word(id=word_id)['mp3']['path'] == mock_path
        assert word_store.get_word(id=word_id)['mp3']['url'] == mock_url

        with session_scope() as session:
            session.query(Mp3).delete()
            session.query(ReviewList).delete()
            session.query(Word).delete()
            session.query(OptimumFactorMatrix).delete()
예제 #6
0
    def test_get_words_count(self):
        with session_scope() as session:
            session.query(Word).delete()

        word_store.create(
            mock_info.word_info['word_name'],
            mock_info.word_info['ph'],
            mock_info.word_info['tran_means'],
            mock_info.word_info['mp3_url'],
            '',
        )
        assert word_store.get_words_count() == 1

        with session_scope() as session:
            session.query(Mp3).delete()
            session.query(TranMean).delete()
            session.query(ReviewList).delete()
            session.query(Word).delete()
            session.query(WordFactor).delete()
            session.query(OptimumFactorMatrix).delete()
예제 #7
0
    def test_get_a_word_id(self):
        word_id = word_store.create(
            mock_info.word_info['word_name'],
            mock_info.word_info['ph'],
            mock_info.word_info['tran_means'],
            mock_info.word_info['mp3_url'],
            '',
        )
        assert isinstance(review_list_store.get_a_word_id(), int)

        with session_scope() as session:
            session.query(Mp3).delete()
            session.query(ReviewList).delete()
            session.query(Word).delete()
            session.query(TranMean).delete()
            session.query(OptimumFactorMatrix).delete()
예제 #8
0
    def test_get_EF(self):
        mock_word_info = mock_info.word_info
        with session_scope() as session:
            session.query(Word).filter_by(
                word_name=mock_word_info['word_name']).delete()
        word_id = word_store.create(
            mock_word_info['word_name'],
            mock_word_info['ph'],
            mock_word_info['tran_means'],
            mock_word_info['mp3_url'],
            '',
        )

        assert word_factor_store.get_EF(word_id) == 1.3

        with session_scope() as session:
            session.query(Mp3).filter_by(word_id=word_id).delete()
            session.query(ReviewList).filter_by(word_id=word_id).delete()
            session.query(Word).filter_by(id=word_id).delete()
    def test_get_factors(self):
        with session_scope() as session:
            session.query(Word).filter_by(word_name=mock_info.word_info['word_name']).delete()
        word_id = word_store.create(
            mock_info.word_info['word_name'],
            mock_info.word_info['ph'],
            mock_info.word_info['tran_means'],
            mock_info.word_info['mp3_url'],
            '',
        )
        IF, EF, OF_matrix = review_hander.get_factors(word_id, 0)
        assert IF == 1
        assert EF == MAX_EF
        assert OF_matrix == [(0, MIN_EF)]
        # TODO Here need 'else' test

        with session_scope() as session:
            session.query(Mp3).filter_by(word_id=word_id).delete()
            session.query(ReviewList).filter_by(word_id=word_id).delete()
            session.query(Word).filter_by(id=word_id).delete()
예제 #10
0
    def test_set_OF_matrix(self):
        mock_word_info = mock_info.word_info
        with session_scope() as session:
            session.query(Word).filter_by(
                word_name=mock_word_info['word_name']).delete()
        word_id = word_store.create(
            mock_word_info['word_name'],
            mock_word_info['ph'],
            mock_word_info['tran_means'],
            mock_word_info['mp3_url'],
            '',
        )

        word_factor_store.set_OF_matrix(word_id, mock_info.OF_matrix)
        assert word_factor_store.get_OF_matrix(word_id) == mock_info.OF_matrix

        with session_scope() as session:
            session.query(Mp3).filter_by(word_id=word_id).delete()
            session.query(ReviewList).filter_by(word_id=word_id).delete()
            session.query(Word).filter_by(id=word_id).delete()
            session.query(OptimumFactorMatrix).delete()
예제 #11
0
    def test_set_next_review_time(self):
        with session_scope() as session:
            session.query(Word).filter_by(
                word_name=mock_info.word_info['word_name']).delete()
        word_id = word_store.create(
            mock_info.word_info['word_name'],
            mock_info.word_info['ph'],
            mock_info.word_info['tran_means'],
            mock_info.word_info['mp3_url'],
            '',
        )

        word_factor_store.set_next_review_time(
            word_id=word_id, next_review_time=mock_info.next_review_time)

        with session_scope() as session:
            assert session.query(WordFactor).filter_by(word_id=word_id).first(
            ).next_review_time == mock_info.next_review_time

            session.query(Mp3).filter_by(word_id=word_id).delete()
            session.query(ReviewList).filter_by(word_id=word_id).delete()
            session.query(Word).filter_by(id=word_id).delete()
예제 #12
0
    def test_get_words(self):
        with session_scope() as session:
            session.query(Word).filter_by(
                word_name=mock_info.word_info['word_name']).delete()

        test_word_ids = []
        for i in range(10):
            word_id = word_store.create(
                mock_info.word_info['word_name'] + str(i),
                mock_info.word_info['ph'],
                mock_info.word_info['tran_means'],
                mock_info.word_info['mp3_url'],
                '',
            )
            test_word_ids.append(word_id)
        word_infos = word_store.get_words(ids=test_word_ids, start=2, end=6)
        assert len(word_infos) == 4

        with session_scope() as session:
            session.query(Mp3).delete()
            session.query(ReviewList).delete()
            session.query(Word).delete()
            session.query(OptimumFactorMatrix).delete()
예제 #13
0
    def test_get_today_word_ids(self):
        with session_scope() as session:
            session.query(Word).filter_by(
                word_name=mock_info.word_info['word_name']).delete()
            word_id = word_store.create(
                mock_info.word_info['word_name'],
                mock_info.word_info['ph'],
                mock_info.word_info['tran_means'],
                mock_info.word_info['mp3_url'],
                '',
                session=session,
            )
            word_factor = session.query(WordFactor).filter_by(
                word_id=word_id).first()
            word_factor.next_review_time = datetime.datetime.now()

        assert word_factor_store.get_today_word_ids() == [word_id]

        with session_scope() as session:
            session.query(Mp3).filter_by(word_id=word_id).delete()
            session.query(ReviewList).filter_by(word_id=word_id).delete()
            session.query(WordFactor).filter_by(word_id=word_id).delete()
            session.query(Word).filter_by(id=word_id).delete()