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)
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
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)
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)
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)
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
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)
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)
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)
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
def get_reviews_count(self, obj): return get_users_current_reviews(obj.user).count()
def get_queryset(self): return get_users_current_reviews(self.request.user)
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})
def get_queryset(self): user = self.request.user res = get_users_current_reviews(user).order_by('?')[:300] return res