Exemple #1
0
    def current(self, request):
        logger.info(f"Fetching current reviews for: {request.user.username}")
        reviews = (get_users_current_reviews(
            request.user).select_related("vocabulary").prefetch_related(
                "meaning_synonyms",
                "reading_synonyms",
                "vocabulary__readings",
                "vocabulary__readings__parts_of_speech",
            ))
        logger.debug(
            f"Fetched current reviews for: {request.user.username}. Paginating.."
        )
        page = self.paginate_queryset(reviews)
        logger.debug(f"Paginated reviews for {request.user.username}")

        if page is not None:
            logger.debug(f"Serializing Page for {request.user.username}")
            serializer = StubbedReviewSerializer(page, many=True)
            logger.debug(f"Serialized Page for {request.user.username}")
            return self.get_paginated_response(serializer.data)

        logger.debug(
            f"Serializing Full result set for {request.user.username}")
        serializer = StubbedReviewSerializer(reviews, many=True)
        logger.debug(f"Serialized Full result set for {request.user.username}")
        return Response(serializer.data)
Exemple #2
0
def review_count_preprocessor(request):
    """
    preprocessor which returns user's review information like the following:
    1) Current review count.
    2) If no reviews, when is next review.
    3) How many reviews coming up in next hour.
    4) How many reviews coming up in next day.
    """
    context_dict = {}
    if hasattr(request, 'user'):
        if hasattr(request.user, 'profile'):
            review_count = get_users_current_reviews(request.user).count()
            context_dict['review_count'] = review_count
            if review_count == 0:
                reviews = get_users_future_reviews(request.user)
                if reviews:
                    next_review_date = reviews[0].next_review_date
                    context_dict['next_review_date'] = next_review_date
                    context_dict[
                        'next_review_timestamp_local'] = next_review_date.timestamp(
                        ) * 1000
                    context_dict['next_review_timestamp_utc'] = int(
                        time.mktime(next_review_date.timetuple())
                    ) * 1000  #TODO potentially remove?
            one_hour = datetime.timedelta(hours=1)
            today = datetime.timedelta(hours=24)
            context_dict[
                'reviews_within_hour_count'] = get_users_future_reviews(
                    request.user, time_limit=one_hour).count()
            context_dict[
                'reviews_within_day_count'] = get_users_future_reviews(
                    request.user, time_limit=today).count()
            return context_dict
    return context_dict
Exemple #3
0
 def get(self, request, *args, **kwargs):
     logger.info("{} has started a review session.".format(
         request.user.username))
     if get_users_current_reviews(self.request.user).count() < 1:
         return HttpResponseRedirect(reverse_lazy("kw:home"))
     else:
         return super(Review, self).get(request)
Exemple #4
0
 def get(self, request, *args, **kwargs):
     user = request.user
     number_of_reviews = all_srs(user)
     new_review_count = get_users_current_reviews(user).count()
     logger.info("{} has requested an SRS update. {} reviews added. {} reviews total.".format(user.username,
                                                                                              number_of_reviews or 0,
                                                                                              new_review_count or 0))
     return HttpResponse(new_review_count)
Exemple #5
0
    def current(self, request):
        reviews = get_users_current_reviews(request.user)
        page = self.paginate_queryset(reviews)

        if page is not None:
            serializer = StubbedReviewSerializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = StubbedReviewSerializer(reviews, many=True)
        return Response(serializer.data)
Exemple #6
0
    def current(self, request):
        reviews = get_users_current_reviews(request.user)
        page = self.paginate_queryset(reviews)

        if page is not None:
            serializer = StubbedReviewSerializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = StubbedReviewSerializer(reviews, many=True)
        return Response(serializer.data)
Exemple #7
0
    def test_full_sync_of_user_on_v2(self):

        # Setup mocks for user response and full sync (with a single assignment)
        mock_user_response_v2()
        mock_assignments_with_one_assignment()
        mock_study_materials()
        mock_subjects_v2()

        self.user.profile.api_key_v2 = "whatever"
        self.user.profile.save()

        syncer = WanikaniUserSyncerV2(self.user.profile)
        syncer.sync_with_wk(full_sync=True)

        reviews = get_users_current_reviews(self.user)
        assert reviews.count() == 1
Exemple #8
0
    def test_when_user_resets_their_account_we_remove_all_reviews_and_then_unlock_their_current_level(self):
        self.user.profile.unlocked_levels.get_or_create(level=1)
        new_review = create_review(create_vocab("arbitrary word"), self.user)
        new_review.needs_review = True
        new_review.save()
        self.assertEqual(get_users_current_reviews(self.user).count(), 2)

        mock_vocab_list_response_with_single_vocabulary(self.user)
        mock_user_info_response(self.user.profile.api_key)

        reset_user(self.user, 1)

        self.user.refresh_from_db()
        self.user.profile.refresh_from_db()
        self.assertEqual(get_users_lessons(self.user).count(), 0)
        self.assertEqual(self.user.profile.level, 5)
Exemple #9
0
    def test_when_user_resets_their_account_we_remove_all_reviews_and_then_unlock_their_current_level(
            self):
        return
        self.user.profile.unlocked_levels.get_or_create(level=1)
        new_review = create_review(create_vocab("arbitrary word"), self.user)
        new_review.needs_review = True
        new_review.save()
        self.assertEqual(get_users_current_reviews(self.user).count(), 2)

        # TODO Fill with V2 mocks.

        reset_user(self.user, 1)

        self.user.refresh_from_db()
        self.user.profile.refresh_from_db()
        self.assertEqual(get_users_lessons(self.user).count(), 0)
        self.assertEqual(self.user.profile.level, 5)
Exemple #10
0
    def test_when_user_resets_their_account_we_remove_all_reviews_and_then_unlock_their_current_level(
        self
    ):
        self.user.profile.unlocked_levels.get_or_create(level=1)
        new_review = create_review(create_vocab("arbitrary word"), self.user)
        new_review.needs_review = True
        new_review.save()
        self.assertEqual(get_users_current_reviews(self.user).count(), 2)

        mock_vocab_list_response_with_single_vocabulary(self.user, self.user.profile.level)
        mock_user_info_response(self.user.profile.api_key)

        reset_user(self.user, 1)

        self.user.refresh_from_db()
        self.user.profile.refresh_from_db()
        self.assertEqual(get_users_lessons(self.user).count(), 0)
        self.assertEqual(self.user.profile.level, 5)
Exemple #11
0
    def test_users_not_following_wanikani_still_get_vocab_unlocked_when_they_unlock_a_level(
            self):
        mock_user_response_v2()
        mock_assignments_with_one_assignment()
        mock_study_materials()
        mock_subjects_v2()

        self.user.profile.follow_me = False
        self.user.profile.api_key_v2 = "whatever"
        # Clear out all reviews so a level unlock works.
        UserSpecific.objects.filter(user=self.user).delete()
        syncer = WanikaniUserSyncerV2(self.user.profile)
        reviews = get_users_current_reviews(self.user)
        assert reviews.count() == 0
        new_review_count, unlocked_count, locked_count = syncer.unlock_vocab(
            levels=[1])
        assert new_review_count == 1
        reviews = get_users_lessons(self.user)
        assert reviews.count() == 1
Exemple #12
0
 def get_reviews_count(self, obj):
     return get_users_current_reviews(obj.user).count()
Exemple #13
0
 def get_queryset(self):
     return get_users_current_reviews(self.request.user)
Exemple #14
0
 def srs(self, request):
     all_srs(request.user)
     new_review_count = get_users_current_reviews(request.user).count()
     return Response({"review_count": new_review_count})
Exemple #15
0
 def srs(self, request):
     all_srs(request.user)
     new_review_count = get_users_current_reviews(request.user).count()
     return Response({"review_count": new_review_count})
Exemple #16
0
 def get_queryset(self):
     user = self.request.user
     res = get_users_current_reviews(user).order_by('?')[:300]
     return res
Exemple #17
0
 def get_reviews_count(self, obj):
     return get_users_current_reviews(obj.user).count()