コード例 #1
0
ファイル: views.py プロジェクト: sirex/manopozicija.lt
def curator_post_vote(request, post_id):
    if request.method == 'POST':
        post = get_object_or_404(models.Post, pk=post_id)
        form = forms.VoteForm(request.POST)
        if form.is_valid():
            if services.is_topic_curator(request.user, post.topic):
                curator_type = ContentType.objects.get(app_label='manopozicija', model='curator')
                voted_for_himself = (
                    post.content_type == curator_type and
                    request.user == post.content_object.user and
                    not request.user.is_superuser
                )
                if voted_for_himself:
                    logger.debug((
                        '%r user voted for his own curator application on %r topic for %r post with vote: %r'
                    ), request.user, post.topic, post, form.cleaned_data['vote'])
                else:
                    upvotes, downvotes = services.update_curator_position(request.user, post, form.cleaned_data['vote'])
                    return JsonResponse({'success': True, 'upvotes': upvotes, 'downvotes': downvotes})
            else:
                logger.debug((
                    '%r user who is not a %r topic curator attempted to vote for %r post with vote: %r'
                ), request.user, post.topic, post, form.cleaned_data['vote'])
        else:
            logger.debug('form error: %s', form.errors.as_text())
    else:
        logger.debug('only POST is allowed, got %s instead', request.method)
    return JsonResponse({'success': False})
コード例 #2
0
ファイル: views.py プロジェクト: mgedmin/manopozicija.lt
def curator_post_vote(request, post_id):
    if request.method == 'POST':
        post = get_object_or_404(models.Post, pk=post_id)
        form = forms.VoteForm(request.POST)
        if form.is_valid():
            if services.is_topic_curator(request.user, post.topic):
                curator_type = ContentType.objects.get(
                    app_label='manopozicija', model='curator')
                voted_for_himself = (post.content_type == curator_type and
                                     request.user == post.content_object.user
                                     and not request.user.is_superuser)
                if voted_for_himself:
                    logger.debug((
                        '%r user voted for his own curator application on %r topic for %r post with vote: %r'
                    ), request.user, post.topic, post,
                                 form.cleaned_data['vote'])
                else:
                    upvotes, downvotes = services.update_curator_position(
                        request.user, post, form.cleaned_data['vote'])
                    return JsonResponse({
                        'success': True,
                        'upvotes': upvotes,
                        'downvotes': downvotes
                    })
            else:
                logger.debug((
                    '%r user who is not a %r topic curator attempted to vote for %r post with vote: %r'
                ), request.user, post.topic, post, form.cleaned_data['vote'])
        else:
            logger.debug('form error: %s', form.errors.as_text())
    else:
        logger.debug('only POST is allowed, got %s instead', request.method)
    return JsonResponse({'success': False})
コード例 #3
0
ファイル: views.py プロジェクト: mgedmin/manopozicija.lt
def post_delete(request, object_id):
    post = get_object_or_404(models.Post, pk=object_id)
    is_topic_curator = services.is_topic_curator(request.user, post.topic)
    if not is_topic_curator:
        raise Http404('User is not a topic curator.')
    services.delete_post(post)
    return redirect(post.topic)
コード例 #4
0
def test_curator_votes(app):
    users = (factories.UserFactory(first_name='u%d' % i)
             for i in itertools.count())
    event = factories.EventFactory()
    post = factories.PostFactory(content_object=event)
    assert services.get_curator_votes(post) == (0, 0)
    assert services.update_curator_position(next(users), post, 1) == (1, 0)
    assert services.update_curator_position(next(users), post, 1) == (2, 0)
    assert services.update_curator_position(next(users), post, -1) == (2, 1)
    assert services.get_curator_votes(post) == (2, 1)

    # Try to vote several times with the same user
    user = factories.UserFactory()
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.get_curator_votes(post) == (3, 1)

    assert services.get_curator_topic_votes(user, post.topic) == {post.pk: 1}

    # Try to vote for new curator application
    curator = factories.CuratorFactory(user=user)
    post = factories.PostFactory(content_object=curator)
    user_1, user_2, user_3 = next(users), next(users), next(users)

    # Initially user should not be a curator
    assert services.is_topic_curator(user, post.topic) is False

    # After first positive vote user shuould become a curator
    assert services.update_curator_position(user_1, post, 1) == (1, 0)
    assert services.is_topic_curator(user, post.topic) is True

    # When number of curator upvotes and downvotes becomes equal, user should be removed from curators
    assert services.update_curator_position(user_1, post, -1) == (0, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # Same thing, but with two users voting differently
    assert services.update_curator_position(user_2, post, 1) == (1, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # If third users agrees to accept new curator it will be accepted
    assert services.update_curator_position(user_3, post, 1) == (2, 1)
    assert services.is_topic_curator(user, post.topic) is True
コード例 #5
0
def test_curator_votes(app):
    users = (factories.UserFactory(first_name='u%d' % i) for i in itertools.count())
    event = factories.EventFactory()
    post = factories.PostFactory(content_object=event)
    assert services.get_curator_votes(post) == (0, 0)
    assert services.update_curator_position(next(users), post, 1) == (1, 0)
    assert services.update_curator_position(next(users), post, 1) == (2, 0)
    assert services.update_curator_position(next(users), post, -1) == (2, 1)
    assert services.get_curator_votes(post) == (2, 1)

    # Try to vote several times with the same user
    user = factories.UserFactory()
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, -1) == (2, 2)
    assert services.update_curator_position(user, post, 1) == (3, 1)
    assert services.get_curator_votes(post) == (3, 1)

    assert services.get_curator_topic_votes(user, post.topic) == {post.pk: 1}

    # Try to vote for new curator application
    curator = factories.CuratorFactory(user=user)
    post = factories.PostFactory(content_object=curator)
    user_1, user_2, user_3 = next(users), next(users), next(users)

    # Initially user should not be a curator
    assert services.is_topic_curator(user, post.topic) is False

    # After first positive vote user shuould become a curator
    assert services.update_curator_position(user_1, post, 1) == (1, 0)
    assert services.is_topic_curator(user, post.topic) is True

    # When number of curator upvotes and downvotes becomes equal, user should be removed from curators
    assert services.update_curator_position(user_1, post, -1) == (0, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # Same thing, but with two users voting differently
    assert services.update_curator_position(user_2, post, 1) == (1, 1)
    assert services.is_topic_curator(user, post.topic) is False

    # If third users agrees to accept new curator it will be accepted
    assert services.update_curator_position(user_3, post, 1) == (2, 1)
    assert services.is_topic_curator(user, post.topic) is True
コード例 #6
0
ファイル: views.py プロジェクト: mgedmin/manopozicija.lt
def quote_update_form(request, object_id):
    post = get_object_or_404(models.Post, pk=object_id)
    quote = get_object_or_404(models.Quote, post=post)
    source = quote.source
    topic = post.topic
    is_topic_curator = services.is_topic_curator(request.user, topic)

    if not is_topic_curator:
        raise Http404('User is not a topic curator.')

    arguments = models.PostArgument.objects.filter(post=post)
    ArgumentFormSet = modelformset_factory(
        models.PostArgument,
        form=forms.ArgumentForm,
        min_num=0,
        max_num=3,
        extra=3,
        validate_min=True,
        validate_max=True,
    )

    if request.method == 'POST':
        source_form = forms.SourceForm(request.POST, instance=source)
        source_form.full_clean()
        source = source_form.cleaned_data
        form = forms.CombinedForms(
            source=source_form,
            quote=forms.QuoteForm(topic,
                                  source.get('actor'),
                                  source.get('source_link'),
                                  request.POST,
                                  instance=quote),
            arguments=ArgumentFormSet(request.POST, queryset=arguments),
        )
        if form.is_valid():
            services.update_quote(request.user, topic, post, quote, arguments,
                                  form.cleaned_data)
            return redirect(topic)
    else:
        form = forms.CombinedForms(
            source=forms.SourceForm(instance=source),
            quote=forms.QuoteForm(topic,
                                  actor=None,
                                  source_link=None,
                                  instance=quote),
            arguments=ArgumentFormSet(queryset=arguments),
        )

    return render(
        request, 'manopozicija/quote_form.html', {
            'topic': topic,
            'source_form': form['source'],
            'quote_form': form['quote'],
            'arguments_formset': form['arguments'],
        })
コード例 #7
0
ファイル: views.py プロジェクト: sirex/manopozicija.lt
def topic_details(request, object_id, slug):
    topic = get_object_or_404(models.Topic, pk=object_id)
    is_topic_curator = services.is_topic_curator(request.user, topic)
    return render(request, 'manopozicija/topic_details.html', {
        'topic': topic,
        'arguments': helpers.get_arguments(services.get_topic_arguments(topic)),
        'posts': helpers.get_posts(request.user, topic, services.get_topic_posts(topic)),
        'queue': (
            helpers.get_posts(request.user, topic, services.get_topic_posts(topic, queue=True))
            if is_topic_curator else []
        ),
        'has_indicators': topic.indicators.count() > 0,
        'indicators': helpers.get_indicators(topic),
        'is_topic_curator': is_topic_curator,
        'curators': helpers.get_topic_curators(topic) if is_topic_curator else []
    })
コード例 #8
0
ファイル: views.py プロジェクト: mgedmin/manopozicija.lt
def topic_details(request, object_id, slug):
    topic = get_object_or_404(models.Topic, pk=object_id)
    is_topic_curator = services.is_topic_curator(request.user, topic)
    return render(
        request, 'manopozicija/topic_details.html', {
            'topic':
            topic,
            'arguments':
            helpers.get_arguments(services.get_topic_arguments(topic)),
            'posts':
            helpers.get_posts(request.user, topic,
                              services.get_topic_posts(topic)),
            'queue': (helpers.get_posts(
                request.user, topic, services.get_topic_posts(
                    topic, queue=True)) if is_topic_curator else []),
            'has_indicators':
            topic.indicators.count() > 0,
            'indicators':
            helpers.get_indicators(topic),
            'is_topic_curator':
            is_topic_curator,
            'curators':
            helpers.get_topic_curators(topic) if is_topic_curator else []
        })