Ejemplo n.º 1
0
def known_kanji_view(request, full_name):
    profile = request.user.userprofile
    template = 'manageset/known_kanji_bank.html'
    page_template = 'manageset/added_kanji_pagination_block.html'
    known_kanji_list = KnownKanji.objects.filter(
        user_profile=profile).prefetch_related('kanji').order_by(
            'date_added').reverse()
    known_kanji = []
    for each in known_kanji_list:
        individual_kanji = each.kanji.get()
        known_kanji.append(individual_kanji)

    if request.is_ajax():
        template = page_template
        number_of_reviews = ''
    else:
        number_of_reviews = len(srs_get_and_update(request, full_name))

    return render(
        request, template, {
            'full_name': full_name,
            'known_kanji_list': known_kanji,
            'page_template': page_template,
            'review_number': number_of_reviews
        })
Ejemplo n.º 2
0
def main_profile(request,full_name):
    if verify_profiles(request,full_name) == False:
            return not_auth
    else:
        
        userprofiles = User.objects.get(username = full_name).id
       
        userprofile = UserProfile.objects.get(user = userprofiles)
        usersets = userprofile.user_sets.all().order_by('pub_date').prefetch_related('words')
        
        
        user_known_words = KnownWords.objects.filter(user_profile = userprofile)
        known_words = user_known_words.values('tier_level').annotate(count = Count('tier_level')).order_by('tier_level')
        total_word_count = user_known_words.exclude(tier_level__in = [0,10]).count()
        one_day_ago = datetime.now() - timedelta(days = 1)
        number_words_added_today = KnownWords.objects.filter(user_profile = userprofile, date_added__gte = one_day_ago).count()
        total_review_right = user_known_words.aggregate(Sum('times_answered_correct'))
        total_review_wrong = user_known_words.aggregate(Sum('times_answered_wrong'))
        try:
            total_reviews_ever = total_review_wrong['times_answered_wrong__sum'] + total_review_right['times_answered_correct__sum']
        except:
           total_reviews_ever = 0     
        
        count_dict = {}
        
        for each in known_words:
            count_dict[each['tier_level']] = each['count']
            
        for each in range(10):
            # each['tier_level']] = each['count']
            try:
                count_dict[each]
            except KeyError:
                count_dict[each] = 0
                
        number_of_added_kanji =  KnownKanji.objects.filter(user_profile = userprofile).count()
       
        
        number_of_reviews = len(srs_get_and_update(request, full_name))
        next_review = KnownWords.objects.filter(user_profile = userprofile, time_until_review__range = (0,86400)).values('time_until_review').order_by('time_until_review')
        due_tomorrow = len(next_review) + number_of_reviews
        kanji_percent = round(number_of_added_kanji /21.36, 2) 
        print kanji_percent, "kanji perecent"
        if number_of_reviews == 0:
  
            if next_review.exists():
                next_review = next_review[0]
                next_review = next_review['time_until_review']

                next_review = str(timedelta(seconds = next_review)).split('.')[0]
        else:
            next_review = "Now"
            
        
        return render(request,'manageset/dashboard_new.html', {'full_name':full_name, 'usersets':usersets, 'review_number': number_of_reviews, \
         'the_count':count_dict, 'next_review':next_review, 'due_tomorrow':due_tomorrow, 'added_kanji_count': number_of_added_kanji,\
          'word_count':total_word_count, 'words_added_today':number_words_added_today, 'total_reviews_ever':total_reviews_ever, 'kanji_percent':kanji_percent})
Ejemplo n.º 3
0
def word_bank_view(request,full_name):
    if verify_profiles(request,full_name) == False:
            return not_auth
    else:
        profile = request.user.userprofile
        profile_known_words = 2
        
        number_of_reviews = len(srs_get_and_update(request, full_name))
        return render(request, "manageset/known_word_bank.html", {'full_name':full_name, 'known_kanji': profile_known_words, 'review_number': number_of_reviews})           
Ejemplo n.º 4
0
    def get(self, request, full_name):
        profile = request.user.userprofile
        known_kanji = Kanji.objects.filter(knownkanji__user_profile = profile).annotate(added_date = Min('knownkanji__date_added')).order_by('-added_date')
        
        if request.is_ajax():
            self.template = self.page_template
            number_of_reviews = ''

        else:    
            number_of_reviews = len(srs_get_and_update(request, full_name))
        
        return render(request, self.template, {'full_name':full_name, 'known_kanji_list':known_kanji, 'page_template': self.page_template, 'review_number': number_of_reviews})
Ejemplo n.º 5
0
def word_bank_view(request, full_name):
    if verify_profiles(request, full_name) == False:
        return not_auth
    else:
        profile = request.user.userprofile
        profile_known_words = 2

        number_of_reviews = len(srs_get_and_update(request, full_name))
        return render(
            request, "manageset/known_word_bank.html", {
                'full_name': full_name,
                'known_kanji': profile_known_words,
                'review_number': number_of_reviews
            })
Ejemplo n.º 6
0
 def get(self, request, full_name):
     profile = request.user.userprofile
     known_kanji = KnownKanji.objects.filter(user_profile = profile).order_by('date_added').reverse()
     kanji_objects = []
     if request.is_ajax():
         self.template = self.page_template
         number_of_reviews = ''
         for each in known_kanji:
             individual_kanji = each.kanji.get()
             individual_kanji.selected_kanji = each.selected_kanji
             kanji_objects.append(individual_kanji)
     else:    
         number_of_reviews = len(srs_get_and_update(request, full_name))
    
     return render(request, self.template, {'full_name':full_name, 'known_kanji_list':kanji_objects, 'page_template': self.page_template, 'review_number': number_of_reviews})     
Ejemplo n.º 7
0
def new_kanji_view(request,full_name):
    if verify_profiles(request,full_name) == False:
            return not_auth
    else:
        template='manageset/new_kanji_view.html'
        page_template='manageset/entry_index_page.html'
        profile = request.user.userprofile
        known_kanji_list =  KnownKanji.objects.filter(user_profile = profile).values_list('kanji__pk', flat = True)
        profile_known_kanji = Kanji.objects.all().exclude(pk__in = known_kanji_list).order_by('grade','id')
        if request.is_ajax():
            template = page_template
            number_of_reviews = ''
        else:    
            number_of_reviews = len(srs_get_and_update(request, full_name))
        
        return render(request, template, {'full_name':full_name, 'known_kanji': profile_known_kanji, 'page_template': page_template, 'review_number': number_of_reviews})
Ejemplo n.º 8
0
def known_kanji_view(request,full_name):
    profile = request.user.userprofile
    template = 'manageset/known_kanji_bank.html'
    page_template = 'manageset/added_kanji_pagination_block.html'
    known_kanji_list = KnownKanji.objects.filter(user_profile = profile).prefetch_related('kanji').order_by('date_added').reverse()
    known_kanji = []
    for each in known_kanji_list:
        individual_kanji = each.kanji.get()
        known_kanji.append(individual_kanji)
        
    if request.is_ajax():
        template = page_template
        number_of_reviews = ''
    else:    
        number_of_reviews = len(srs_get_and_update(request, full_name))
        
    return render(request, template, {'full_name':full_name, 'known_kanji_list':known_kanji, 'page_template': page_template, 'review_number': number_of_reviews})
Ejemplo n.º 9
0
    def get(self, request, full_name):
        profile = request.user.userprofile
        known_kanji = Kanji.objects.filter(
            knownkanji__user_profile=profile).annotate(added_date=Min(
                'knownkanji__date_added')).order_by('-added_date')

        if request.is_ajax():
            self.template = self.page_template
            number_of_reviews = ''

        else:
            number_of_reviews = len(srs_get_and_update(request, full_name))

        return render(
            request, self.template, {
                'full_name': full_name,
                'known_kanji_list': known_kanji,
                'page_template': self.page_template,
                'review_number': number_of_reviews
            })
Ejemplo n.º 10
0
    def get(self, request, full_name):
        profile = request.user.userprofile
        known_kanji = KnownKanji.objects.filter(
            user_profile=profile).order_by('date_added').reverse()
        kanji_objects = []
        if request.is_ajax():
            self.template = self.page_template
            number_of_reviews = ''
            for each in known_kanji:
                individual_kanji = each.kanji.get()
                individual_kanji.selected_kanji = each.selected_kanji
                kanji_objects.append(individual_kanji)
        else:
            number_of_reviews = len(srs_get_and_update(request, full_name))

        return render(
            request, self.template, {
                'full_name': full_name,
                'known_kanji_list': kanji_objects,
                'page_template': self.page_template,
                'review_number': number_of_reviews
            })
Ejemplo n.º 11
0
def new_kanji_view(request, full_name):
    if verify_profiles(request, full_name) == False:
        return not_auth
    else:
        template = 'manageset/new_kanji_view.html'
        page_template = 'manageset/entry_index_page.html'
        profile = request.user.userprofile
        known_kanji_list = KnownKanji.objects.filter(
            user_profile=profile).values_list('kanji__pk', flat=True)
        profile_known_kanji = Kanji.objects.all().exclude(
            pk__in=known_kanji_list).order_by('grade', 'id')
        if request.is_ajax():
            template = page_template
            number_of_reviews = ''
        else:
            number_of_reviews = len(srs_get_and_update(request, full_name))

        return render(
            request, template, {
                'full_name': full_name,
                'known_kanji': profile_known_kanji,
                'page_template': page_template,
                'review_number': number_of_reviews
            })
Ejemplo n.º 12
0
def new_words_view(request, full_name):
    number_of_reviews = len(srs_get_and_update(request, full_name))
    template='manageset/your_words.html'
    page_template='manageset/entry_index_words.html'
    profile = request.user.userprofile
    
    # profile_known_kanji = profile.known_kanji.all()
    # these two callbacks also add like half a second
    
    usersets = profile.user_sets.all().count()
    kanji_in = KnownKanji.objects.filter(user_profile = profile).values_list('kanji__pk', flat = True)

    known_word_list = KnownWords.objects.values_list('words', flat = True)
    # print known_word_list
    # kanji_in = []
    # exclude_kanji = []
    # m = 200
    # while (m < 2000):
       # print 'The count is:', m
       # kanji_in.append(m)
       # m = m + 1
    # print exclude_kanji
    

    # start = time.clock()
    
#--------------------------------1st way-------------------------------------------------------------------------------------------------------    
    #executing this query will take a long long time...only works if it gets sent straight to browser...very slow until you add enough kanji...4s if you add 410 but slows down after that, which means works best when you have a lot of kanji in your bank (closer to around 1600 )
   
    # exclude_kanji = Kanji.objects.values('id').exclude(id__in = kanji_in)
 #    print "the length of exclude kanji", len(exclude_kanji)
 #    exclude_kanji = []
 #
 #    i = 20
 #    for each in range(1,200):
 #        exclude_kanji.append(each)
 #        i + 1
 #
 #    print "----------------------------------------------------------------------------- ", exclude_kanji
 #    words = Words.objects.exclude(kanji__in = exclude_kanji).exclude(frequency = 0).exclude(id__in = known_word_list).order_by('frequency')[0:100]
 #
 #    data = words
 #--------------------------------end 1st way-------------------------------------------------------------------------------------------------------
 #    data = words
    
    # print words
    # print len(words)
    # i = 0
#     for each in words:
#         i = i + 1
#
#     print i 
    # print exclude_words
    # print exclude_kanji
    # print len(exclude_words)
    # print len(exclude_words)
    # print len(exclude_words)
 #    for each in exclude_kanji:
 #        print each
 #    elapsed = (time.clock() - start)
 #    print "exclude query ", elapsed
    # print exclude_words
      
    # start = time.clock()
    #this query add in another exclude to remove words that have extra kanji makes it a lot slower
    # words = Words.objects.filter(kanji__in = kanji_in).exclude(frequency = 0).exclude(id__in = known_word_list).order_by('frequency').prefetch_related('kanji').distinct()[0:1000]
    # print Words.objects.filter(kanji__in = kanji_in).exclude(frequency = 0).exclude(id__in = known_word_list).order_by('frequency').prefetch_related('kanji').distinct()[0:100].query
    # words = Words.objects.exclude(frequency = 0).exclude(kanji__in = exclude_kanji).exclude(id__in = known_word_list).order_by('frequency').distinct()[0:1000]
    # print "all words : ", words
    # print Words.objects.exclude(frequency = 0).exclude(kanji__in = exclude_kanji).exclude(id__in = known_word_list).order_by('frequency').distinct()[0:1000]
    # print words
    # print words
    # elapsed = (time.clock() - start)
    # print "database query time: ", elapsed
    
    
    

    
    
    
    #start different way -------------------------------------------------------------
    

    
    

    selected_kanji = KnownKanji.objects.filter(user_profile = profile, selected_kanji = True).prefetch_related('kanji')
    
    
    new_kanji = []
    for each in selected_kanji:
        new_kanji.append(each.kanji.get().id)

    
    special_words = Words.objects.filter(kanji__in = new_kanji).exclude(published = False).exclude(id__in = known_word_list).exclude(frequency_thousand = None).exclude(frequency_thousand__gte = 21).prefetch_related('kanji').order_by('-combined_frequency')
    
    for each in special_words:
        print each.wordmeanings_set.all()

    special_words = list(special_words)
    for each in list(special_words):
        kanji = each.kanji.all()
        id_list = set()
        for kanji_id in kanji:
            id_list.add(kanji_id.id)

        the_list = list(id_list - set(kanji_in))

        if the_list:
            special_words.remove(each)


    if len(special_words) == 0:        

        words = Words.objects.filter(kanji__in = kanji_in).exclude(id__in = known_word_list).exclude(published = False).exclude(frequency_thousand = None).exclude(frequency_thousand__gte = 21).order_by('-combined_frequency').prefetch_related('kanji').distinct()[0:1000]

        words_list = list(words)
     
        i = 0
        for each in list(words):
        
            kanji = each.kanji.all()
            id_list = set()
            for kanji_id in kanji:
                id_list.add(kanji_id.id)
        
        
            the_one_list = list(id_list - set(kanji_in))
        
            if the_one_list:
                words_list.remove(each)
        
    else:
        words_list = []
        
    data = special_words + words_list


        
    
    if request.is_ajax():
        template = page_template               
    return render(request, template, {'full_name':full_name, 'data':data, 'page_template':page_template, 'usersets':usersets, 'selected_kanji':selected_kanji, 'review_number': number_of_reviews})        
Ejemplo n.º 13
0
def main_profile(request, full_name):
    if verify_profiles(request, full_name) == False:
        return not_auth
    else:

        userprofiles = User.objects.get(username=full_name).id

        userprofile = UserProfile.objects.get(user=userprofiles)
        usersets = userprofile.user_sets.all().order_by(
            'pub_date').prefetch_related('words')

        user_known_words = KnownWords.objects.filter(user_profile=userprofile)
        known_words = user_known_words.values('tier_level').annotate(
            count=Count('tier_level')).order_by('tier_level')
        total_word_count = user_known_words.exclude(
            tier_level__in=[0, 10]).count()
        one_day_ago = datetime.now() - timedelta(days=1)
        number_words_added_today = KnownWords.objects.filter(
            user_profile=userprofile, date_added__gte=one_day_ago).count()
        total_review_right = user_known_words.aggregate(
            Sum('times_answered_correct'))
        total_review_wrong = user_known_words.aggregate(
            Sum('times_answered_wrong'))
        try:
            total_reviews_ever = total_review_wrong[
                'times_answered_wrong__sum'] + total_review_right[
                    'times_answered_correct__sum']
        except:
            total_reviews_ever = 0

        count_dict = {}

        for each in known_words:
            count_dict[each['tier_level']] = each['count']

        for each in range(10):
            # each['tier_level']] = each['count']
            try:
                count_dict[each]
            except KeyError:
                count_dict[each] = 0

        number_of_added_kanji = KnownKanji.objects.filter(
            user_profile=userprofile).count()

        number_of_reviews = len(srs_get_and_update(request, full_name))
        next_review = KnownWords.objects.filter(
            user_profile=userprofile,
            time_until_review__range=(0, 86400)).values(
                'time_until_review').order_by('time_until_review')
        due_tomorrow = len(next_review) + number_of_reviews
        kanji_percent = round(number_of_added_kanji / 21.36, 2)
        print kanji_percent, "kanji perecent"
        if number_of_reviews == 0:

            if next_review.exists():
                next_review = next_review[0]
                next_review = next_review['time_until_review']

                next_review = str(timedelta(seconds=next_review)).split('.')[0]
        else:
            next_review = "Now"


        return render(request,'manageset/dashboard_new.html', {'full_name':full_name, 'usersets':usersets, 'review_number': number_of_reviews, \
         'the_count':count_dict, 'next_review':next_review, 'due_tomorrow':due_tomorrow, 'added_kanji_count': number_of_added_kanji,\
          'word_count':total_word_count, 'words_added_today':number_words_added_today, 'total_reviews_ever':total_reviews_ever, 'kanji_percent':kanji_percent})
Ejemplo n.º 14
0
def new_words_view(request, full_name):
    number_of_reviews = len(srs_get_and_update(request, full_name))
    template = 'manageset/your_words.html'
    page_template = 'manageset/entry_index_words.html'
    profile = request.user.userprofile

    # profile_known_kanji = profile.known_kanji.all()
    # these two callbacks also add like half a second

    usersets = profile.user_sets.all().count()
    kanji_in = KnownKanji.objects.filter(user_profile=profile).values_list(
        'kanji__pk', flat=True)

    known_word_list = KnownWords.objects.values_list('words', flat=True)
    # print known_word_list
    # kanji_in = []
    # exclude_kanji = []
    # m = 200
    # while (m < 2000):
    # print 'The count is:', m
    # kanji_in.append(m)
    # m = m + 1
    # print exclude_kanji

    # start = time.clock()

    #--------------------------------1st way-------------------------------------------------------------------------------------------------------
    #executing this query will take a long long time...only works if it gets sent straight to browser...very slow until you add enough kanji...4s if you add 410 but slows down after that, which means works best when you have a lot of kanji in your bank (closer to around 1600 )

    # exclude_kanji = Kanji.objects.values('id').exclude(id__in = kanji_in)
    #    print "the length of exclude kanji", len(exclude_kanji)
    #    exclude_kanji = []
    #
    #    i = 20
    #    for each in range(1,200):
    #        exclude_kanji.append(each)
    #        i + 1
    #
    #    print "----------------------------------------------------------------------------- ", exclude_kanji
    #    words = Words.objects.exclude(kanji__in = exclude_kanji).exclude(frequency = 0).exclude(id__in = known_word_list).order_by('frequency')[0:100]
    #
    #    data = words
    #--------------------------------end 1st way-------------------------------------------------------------------------------------------------------
    #    data = words

    # print words
    # print len(words)
    # i = 0
    #     for each in words:
    #         i = i + 1
    #
    #     print i
    # print exclude_words
    # print exclude_kanji
    # print len(exclude_words)
    # print len(exclude_words)
    # print len(exclude_words)
    #    for each in exclude_kanji:
    #        print each
    #    elapsed = (time.clock() - start)
    #    print "exclude query ", elapsed
    # print exclude_words

    # start = time.clock()
    #this query add in another exclude to remove words that have extra kanji makes it a lot slower
    # words = Words.objects.filter(kanji__in = kanji_in).exclude(frequency = 0).exclude(id__in = known_word_list).order_by('frequency').prefetch_related('kanji').distinct()[0:1000]
    # print Words.objects.filter(kanji__in = kanji_in).exclude(frequency = 0).exclude(id__in = known_word_list).order_by('frequency').prefetch_related('kanji').distinct()[0:100].query
    # words = Words.objects.exclude(frequency = 0).exclude(kanji__in = exclude_kanji).exclude(id__in = known_word_list).order_by('frequency').distinct()[0:1000]
    # print "all words : ", words
    # print Words.objects.exclude(frequency = 0).exclude(kanji__in = exclude_kanji).exclude(id__in = known_word_list).order_by('frequency').distinct()[0:1000]
    # print words
    # print words
    # elapsed = (time.clock() - start)
    # print "database query time: ", elapsed

    #start different way -------------------------------------------------------------

    selected_kanji = KnownKanji.objects.filter(
        user_profile=profile, selected_kanji=True).prefetch_related('kanji')

    new_kanji = []
    for each in selected_kanji:
        new_kanji.append(each.kanji.get().id)

    special_words = Words.objects.filter(kanji__in=new_kanji).exclude(
        published=False).exclude(id__in=known_word_list).exclude(
            frequency_thousand=None).exclude(
                frequency_thousand__gte=21).prefetch_related('kanji').order_by(
                    '-combined_frequency')

    for each in special_words:
        print each.wordmeanings_set.all()

    special_words = list(special_words)
    for each in list(special_words):
        kanji = each.kanji.all()
        id_list = set()
        for kanji_id in kanji:
            id_list.add(kanji_id.id)

        the_list = list(id_list - set(kanji_in))

        if the_list:
            special_words.remove(each)

    if len(special_words) == 0:

        words = Words.objects.filter(kanji__in=kanji_in).exclude(
            id__in=known_word_list).exclude(published=False).exclude(
                frequency_thousand=None).exclude(
                    frequency_thousand__gte=21).order_by(
                        '-combined_frequency').prefetch_related(
                            'kanji').distinct()[0:1000]

        words_list = list(words)

        i = 0
        for each in list(words):

            kanji = each.kanji.all()
            id_list = set()
            for kanji_id in kanji:
                id_list.add(kanji_id.id)

            the_one_list = list(id_list - set(kanji_in))

            if the_one_list:
                words_list.remove(each)

    else:
        words_list = []

    data = special_words + words_list

    if request.is_ajax():
        template = page_template
    return render(
        request, template, {
            'full_name': full_name,
            'data': data,
            'page_template': page_template,
            'usersets': usersets,
            'selected_kanji': selected_kanji,
            'review_number': number_of_reviews
        })