Example #1
0
    def render(self, context):
        # Get the page number to use if it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # The request object is used to retrieve the current page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        if self.var_name is None:
            return utils.text(page_number)
        context[self.var_name] = page_number
        return ''
    def render(self, context):
        # Get the page number to use if it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # The request object is used to retrieve the current page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        if self.var_name is None:
            return utils.text(page_number)
        context[self.var_name] = page_number
        return ''
Example #3
0
    def render(self, context):
        # Handle page number when it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # Calculate the number of items to show on each page.
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # Calculate the number of items to show in the first page.
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # Retrieve the override path if used.
        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # Retrieve the queryset and create the paginator object.
        objects = self.objects.resolve(context)
        paginator = self.paginator(objects,
                                   per_page,
                                   first_page=first_page,
                                   orphans=settings.ORPHANS)

        # Normalize the default page number if a negative one is provided.
        if default_number < 0:
            default_number = utils.normalize_page_number(
                default_number, paginator.page_range)

        # The current request is used to get the requested page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        # Get the page.
        try:
            page = paginator.page(page_number)
        except EmptyPage:
            page = paginator.page(1)
            if settings.PAGE_OUT_OF_RANGE_404:
                raise Http404('Page out of range')

        # CUSTOMIZATION: Add last object on previous page
        if page_number > 1:
            try:
                paginator_prev = self.paginator(objects,
                                                per_page,
                                                first_page=first_page,
                                                orphans=settings.ORPHANS)
                previous_page = paginator_prev.page(page_number - 1)
                last_object = previous_page.object_list[-1]
            except EmptyPage:
                last_object = None
        else:
            last_object = None

        # Populate the context with required data.
        data = {
            'default_number': default_number,
            'override_path': override_path,
            'page': page,
            'querystring_key': querystring_key,
            'last_object': last_object
        }
        context.update({'endless': data, self.var_name: page.object_list})
        return ''
Example #4
0
def post_list(request, template='blog/post_list.html', extra_context=None):

    start = time.time()
    time_array = []

    time_array.append(strftime("%Y-%m-%d %H:%M:%S", gmtime()))

    time_array.append(round(time.time() - start, 2))

    # Remove session key on 1 page after reload
    if not request.is_ajax() and request.session.get("post_list"):
        # If current user has loaded the main page at least once
        if request.session.get("page_num"):
            page = request.session['page_num'] - 1
            last_shown_posts = request.session['post_list'][0:page * 12 + 12]
            decrease_shown_posts_rec(request, last_shown_posts)

        del request.session['post_list']

    time_array.append(round(time.time() - start, 2))

    # Add session key for pagination without reloading new content
    if not request.session.get("post_list"):
        # Recommender system 1: content-based
        if not logged_with_vk(request) or not open_vk_profile(request):
            # print("not logged with vk: form_feed_content_recs")
            # request.session['post_list'] = form_feed_content_recs(request)
            request.session['post_list'] = form_content_recs_analog(request)
        # Recommender system 2: topic-profile-based
        else:
            # print("logged with vk: topic_profile_recommendations")

            user_vector = user_topic_profile(request)

            # Forming rating of best recommended post for current user
            request.session['post_list'] = topic_profile_recommendations(
                request, user_vector)

        time_array.append(round(time.time() - start, 2))
        # Подгрузка сведений об опросах поста
        # Connecting to database
        con = connect_to_database_ro()
        cursor = con.cursor()

        # Check if current user voted in current poll
        user_key = get_user_key(request)
        user_polls = pd.read_sql_query(
            "SELECT * FROM blog_poll_values "
            "where user_id=\"" + str(user_key) + "\"", con)

        cursor.close()
        con.close()

        time_array.append(round(time.time() - start, 2))

        # for post in request.session['post_list']:
        #     poll_id_array = []

        #     for quote in post.quotes.all():
        #         for poll in quote.polls.all():
        #             poll_id_array.append(poll.id)

        #     user_poll_num = user_polls.loc[user_polls.post_id == post.pk]['blog_poll_id'].tolist()

        #     setattr(post, 'total_polls', len(poll_id_array))
        #     setattr(post, 'user_polls', len(set(user_poll_num) & set(poll_id_array)))

        time_array.append(round(time.time() - start, 2))

    # Get objects of posts from session
    posts = request.session.get('post_list')

    # Form a list of recommended posts
    context = {
        'entry_list': posts,
    }

    if extra_context is not None:
        context.update(extra_context)

    # Remove session on last page
    page = utils.get_page_number_from_request(request)
    request.session['page_num'] = page

    # Writing to database shown posts for user
    if request.session.get("page_num"):
        page = request.session['page_num'] - 1
        # write_shown_posts_analytics(request, request.session['post_list'])

    time_array.append(round(time.time() - start, 2))

    with open("out.csv", "a", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(time_array)

    return render(request, template, context)
    def render(self, context):
        # Handle page number when it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # Calculate the number of items to show on each page.
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # Calculate the number of items to show in the first page.
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # Retrieve the override path if used.
        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # Retrieve the queryset and create the paginator object.
        objects = self.objects.resolve(context)
        paginator = self.paginator(
            objects, per_page, first_page=first_page, orphans=settings.ORPHANS)

        # Normalize the default page number if a negative one is provided.
        if default_number < 0:
            default_number = utils.normalize_page_number(
                default_number, paginator.page_range)

        # The current request is used to get the requested page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        # Get the page.
        try:
            page = paginator.page(page_number)
        except EmptyPage:
            page = paginator.page(1)
            if settings.PAGE_OUT_OF_RANGE_404:
                raise Http404('Page out of range')

        # Populate the context with required data.
        data = {
            'default_number': default_number,
            'override_path': override_path,
            'page': page,
            'querystring_key': querystring_key,
        }
        context.update({'endless': data, self.var_name: page.object_list})
        return ''
Example #6
0
 def test_custom_querystring_key(self):
     # Ensure the page returned correctly reflects the ``querystring_key``.
     request = self.factory.get('?mypage=4'.format(PAGE_LABEL))
     page_number = utils.get_page_number_from_request(
         request, querystring_key='mypage')
     self.assertEqual(4, page_number)
Example #7
0
 def test_post_data(self):
     # The page number can also be present in POST data.
     request = self.factory.post('/', {PAGE_LABEL: 5})
     self.assertEqual(5, utils.get_page_number_from_request(request))
Example #8
0
 def test_default(self):
     # Ensure the default page number is returned if page info cannot be
     # retrieved from the querystring.
     request = self.factory.get('/')
     page_number = utils.get_page_number_from_request(request, default=3)
     self.assertEqual(3, page_number)
Example #9
0
 def test_default_querystring_key(self):
     # Ensure the default page label is used if ``querystring_key``
     # is not provided.
     request = self.factory.get('?{0}=2'.format(PAGE_LABEL))
     self.assertEqual(2, utils.get_page_number_from_request(request))
Example #10
0
 def test_no_querystring_key(self):
     # Ensure the first page is returned if page info cannot be
     # retrieved from the querystring.
     request = self.factory.get('/')
     self.assertEqual(1, utils.get_page_number_from_request(request))
Example #11
0
def index(request):
    questions = Question.objects.filter(
        blockedOrNot=False).order_by('-created_at')
    user = request.user
    try:
        exp_question = Question.objects.get(
            pk=request.GET['responses_requested'])
        cur_page = request.GET['page']
        expanded_question_list = [exp_question]
        exp_answers = expanded_question_list[0].answers.order_by(
            'helpfulCount', '-created_at')[:5]
        top_answer = exp_answers[0]
    except (KeyError, Question.DoesNotExist):
        expanded_question_list = []
        exp_answers = []
        cur_page = utils.get_page_number_from_request(request)
        top_answer = ''

    try:
        res_question = Question.objects.get(pk=request.GET['respond_to_q'])
        cur_page = request.GET['page']
        response_question_list = [res_question]
    except (KeyError, Question.DoesNotExist):
        response_question_list = []

    try:
        close_q = Question.objects.get(pk=request.GET['close_requested'])
        expanded_question_list = []
        cur_page = request.GET['page']
        exp_answers = []
    except:
        pass

    # questions the user flagged
    try:
        flagged_q = Question.objects.get(pk=request.POST['flag_q'])
        user = request.user
        flagged_q.inappropriateCount += 1
        flagged_q.inappropriateId.add(user)
        flagged_q.save()
        user.flagged_questions.add(flagged_q)
        user.save()

        cur_page = request.GET['page']
    except:
        pass

    # unflag question
    try:
        unflagged_q = Question.objects.get(pk=request.POST['unflag_q'])
        user = request.user
        unflagged_q.inappropriateCount -= 1
        unflagged_q.inappropriateId.remove(user)
        unflagged_q.save()
        user.flagged_questions.remove(unflagged_q)
        user.save()

        cur_page = request.GET['page']
    except:
        pass

    # if user logged in, don't let them reflag question
    try:
        user = request.user
        flagged_question_list = user.flagged_questions.all()
    except:
        flagged_question_list = []

    # mark response as helpful
    try:
        helpful_answer = Answer.objects.get(pk=request.GET['helpful'])
        user = request.user
        helpful_answer.helpfulCount += 1
        helpful_answer.helpfulId.add(user)
        helpful_answer.save()

        user.helpful_responses.add(helpful_answer)
        user.save()

    except:
        pass

    #no double flagging
    try:
        user = request.user
        helpful_responses_list = user.helpful_responses.all()
    except:
        helpful_responses_list = []

    # un mark response as helpful

    try:
        unhelpful_answer = Answer.objects.get(pk=request.GET['unhelpful'])
        user = request.user
        unhelpful_answer.helpfulCount -= 1
        unhelpful_answer.helpfulId.remove(user)
        unhelpful_answer.save()

        user.helpful_responses.remove(unhelpful_answer)
        user.save()

    except:
        pass

    #response flagging
    try:
        inapp_answer = Answer.objects.get(pk=request.GET['inapp'])
        user = request.user
        inapp_answer.inappropriateCount += 1
        inapp_answer.inappropriateId.add(user)
        inapp_answer.save()

        inapp_answer.user.profile.inappropriateCount += 1
        inapp_answer.user.profile.save()
        inapp_answer.user.save()

        user.inappropriate_responses.add(inapp_answer)
        user.save()

    except:
        pass

    try:
        user = request.user
        inapp_responses_list = user.inappropriate_responses.all()
    except:
        inapp_responses_list = []

    # unflag as inappropriate

    try:
        un_inapp_answer = Answer.objects.get(pk=request.GET['uninapp'])
        user = request.user
        un_inapp_answer.inappropriateCount -= 1
        un_inapp_answer.inappropriateId.remove(user)
        un_inapp_answer.save()

        un_inapp_answer.user.profile.inappropriateCount -= 1
        un_inapp_answer.user.profile.save()
        un_inapp_answer.user.save()

        user.inappropriate_responses.remove(un_inapp_answer)
        user.save()

    except:
        pass

    template = loader.get_template('blog/index.html')
    context = {
        'questions': questions,
        'expanded_question_list': expanded_question_list,
        'response_question_list': response_question_list,
        'user': request.user,
        'flagged_question_list': flagged_question_list,
        'expanded_answers': exp_answers,
        'cur_page': cur_page,
        'helpful_responses_list': helpful_responses_list,
        'inapp_responses_list': inapp_responses_list,
    }

    return HttpResponse(template.render(context, request))
Example #12
0
    def render(self, context):
        # Handle page number when it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # Calculate the number of items to show on each page.
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # Calculate the number of items to show in the first page.
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # Retrieve the override path if used.
        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # Retrieve the queryset and create the paginator object.
        objects = self.objects.resolve(context)
        # objects = objects.order_by('-created_at')
        paginator = self.paginator(objects,
                                   per_page,
                                   first_page=first_page,
                                   orphans=settings.ORPHANS)

        # Normalize the default page number if a negative one is provided.
        if default_number < 0:
            default_number = utils.normalize_page_number(
                default_number, paginator.page_range)

        # The current request is used to get the requested page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        # Get the page.
        try:
            page = paginator.page(page_number)
        except EmptyPage:
            page = paginator.page(1)

        # Populate the context with required data.
        data = {
            'default_number': default_number,
            'override_path': override_path,
            'page': page,
            'querystring_key': querystring_key,
        }
        context.update({'endless': data, self.var_name: page.object_list})
        return ''