示例#1
0
def list_votings(request):
    """List votings view."""
    user = request.user
    polls = Poll.objects.all()
    if not user.groups.filter(name='Admin').exists():
        polls = Poll.objects.filter(valid_groups__in=user.groups.all())

    past_polls_query = polls.filter(end__lt=now_utc())
    current_polls = polls.filter(start__lt=now_utc(), end__gt=now_utc())
    future_polls = polls.filter(start__gt=now_utc())

    past_polls_paginator = Paginator(past_polls_query, settings.ITEMS_PER_PAGE)
    past_polls_page = request.GET.get('page', 1)

    try:
        past_polls = past_polls_paginator.page(past_polls_page)
    except PageNotAnInteger:
        past_polls = past_polls_paginator.page(1)
    except EmptyPage:
        past_polls = past_polls_paginator.page(past_polls_paginator.num_pages)

    return render(
        request, 'list_votings.html', {
            'user': user,
            'past_polls': past_polls,
            'current_polls': current_polls,
            'future_polls': future_polls
        })
示例#2
0
文件: views.py 项目: craigcook/remo
def list_votings(request):
    """List votings view."""
    user = request.user
    polls = Poll.objects.all()
    if not user.groups.filter(name='Admin').exists():
        polls = Poll.objects.filter(valid_groups__in=user.groups.all())

    past_polls_query = polls.filter(end__lt=now_utc())
    current_polls = polls.filter(start__lt=now_utc(), end__gt=now_utc())
    future_polls = polls.filter(start__gt=now_utc())

    past_polls_paginator = Paginator(past_polls_query, settings.ITEMS_PER_PAGE)
    past_polls_page = request.GET.get('page', 1)

    try:
        past_polls = past_polls_paginator.page(past_polls_page)
    except PageNotAnInteger:
        past_polls = past_polls_paginator.page(1)
    except EmptyPage:
        past_polls = past_polls_paginator.page(past_polls_paginator.num_pages)

    return render(request, 'list_votings.html',
                  {'user': user,
                   'past_polls': past_polls,
                   'current_polls': current_polls,
                   'future_polls': future_polls})
示例#3
0
class NGReportFactory(factory.django.DjangoModelFactory):
    FACTORY_FOR = NGReport

    user = factory.SubFactory(UserFactory, userprofile__initial_council=True)
    mentor = factory.SelfAttribute('user.userprofile.mentor')
    activity = factory.SubFactory(ActivityFactory)
    latitude = fuzzy.FuzzyDecimal(low=-90.0, high=90.0, precision=5)
    longitude = fuzzy.FuzzyDecimal(low=-180.0, high=180.0, precision=5)
    location = 'Activity Location'
    is_passive = False
    link = 'www.example.com'
    report_date = fuzzy.FuzzyDate(datetime.date(2013, 01, 01),
                                  now_utc().date())

    @factory.post_generation
    def functional_areas(self, create, extracted, **kwargs):
        """Add functional areas list after object generation."""
        if not create:
            return
        if extracted:
            for area in extracted:
                self.functional_areas.add(area)
        else:
            # create random
            rand_int = randint(1, 6)
            for area in (FunctionalArea.active_objects.all().order_by('?')
                         [:rand_int]):
                self.functional_areas.add(area)
示例#4
0
def cleanup_email_message_body_data(*args, **kwargs):
    """
    Deletes ``EmailMessageBodyData`` objects created N {days|weeks} from now.

    >>> EmailMessage.objects.create()
    >>> EmailMessage.body = EmailMessageBodyData.objects.create(data="body")
    >>> EmailMessageBodyData.objects.count()
    1
    >>> cleanup_email_message_body_data(days=0)
    >>> EmailMessageBodyData.objects.count()
    1
    >>> cleanup_email_message_body_data(days=1)
    >>> EmailMessageBodyData.objects.count()
    0
    """
    if all(kwargs.values()):
        # datetime.timedelta will actually handle multiple keyword args just fine
        raise Exception("Ambiguous arguments given")

    start = now_utc()
    delta = datetime.timedelta(**kwargs)
    purgeDate = start - delta
    logger.debug("Start: {s}".format(s=start))
    logger.debug("Delta: {d}".format(d=delta))
    logger.debug("Purge date: {p}".format(p=purgeDate))

    emailMessages = EmailMessage.objects.filter(
        creation_time__lt=purgeDate,
        body__isnull=False,
    )

    if emailMessages.exists():
        result = delete_email_message_body_data(emailMessages)
    else:
        result = None

    logger.debug("Result: {r}".format(r=str(result)))

    return result
示例#5
0
def cleanup_email_message_body_data(*args, **kwargs):
    """
    Deletes ``EmailMessageBodyData`` objects created N {days|weeks} from now.

    >>> EmailMessage.objects.create()
    >>> EmailMessage.body = EmailMessageBodyData.objects.create(data="body")
    >>> EmailMessageBodyData.objects.count()
    1
    >>> cleanup_email_message_body_data(days=0)
    >>> EmailMessageBodyData.objects.count()
    1
    >>> cleanup_email_message_body_data(days=1)
    >>> EmailMessageBodyData.objects.count()
    0
    """
    if all(kwargs.values()):
        # datetime.timedelta will actually handle multiple keyword args just fine
        raise Exception("Ambiguous arguments given")

    start = now_utc()
    delta = datetime.timedelta(**kwargs)
    purgeDate = start - delta
    logger.debug("Start: {s}".format(s=start))
    logger.debug("Delta: {d}".format(d=delta))
    logger.debug("Purge date: {p}".format(p=purgeDate))

    emailMessages = EmailMessage.objects.filter(
        creation_time__lt=purgeDate,
        body__isnull=False,
    )

    if emailMessages.exists():
        result = delete_email_message_body_data(emailMessages)
    else:
        result = None

    logger.debug("Result: {r}".format(r=str(result)))

    return result
示例#6
0
 def clean_report_date(self):
     """Clean report_date field."""
     if self.cleaned_data['report_date'] > now_utc().date():
         raise ValidationError('Report date cannot be in the future.')
     return self.cleaned_data['report_date']
示例#7
0
文件: views.py 项目: craigcook/remo
def view_voting(request, slug):
    """View voting and cast a vote view."""
    user = request.user
    poll = get_object_or_404(Poll, slug=slug)
    # If the user does not belong to a valid poll group
    if not (user.groups.filter(Q(id=poll.valid_groups.id) |
                               Q(name='Admin')).exists()):
        messages.error(request, ('You do not have the permissions to '
                                 'vote on this voting.'))
        return redirect('voting_list_votings')

    range_poll_choice_forms = {}
    radio_poll_choice_forms = {}

    data = {'poll': poll}

    # if the voting period has ended, display the results
    if now_utc() > poll.end:
        return render(request, 'view_voting.html', data)
    if now_utc() < poll.start:
        # Admin can edit future votings
        if user.groups.filter(name='Admin').exists():
            return redirect('voting_edit_voting', slug=poll.slug)
        else:
            messages.warning(request, ('This vote has not yet begun. '
                                       'You can cast your vote on %s UTC.' %
                                       poll.start.strftime('%Y %B %d, %H:%M')))
            return redirect('voting_list_votings')

    # avoid multiple votes from the same user
    if Vote.objects.filter(poll=poll, user=user).exists():
        messages.warning(request, ('You have already cast your vote for this '
                                   'voting. Come back to see the results on '
                                   '%s UTC.'
                                   % poll.end.strftime('%Y %B %d, %H:%M')))
        return redirect('voting_list_votings')

    # pack the forms for rendering
    for item in poll.range_polls.all():
        range_poll_choice_forms[item] = forms.RangePollChoiceVoteForm(
            data=request.POST or None, choices=item.choices.all())

    for item in poll.radio_polls.all():
        radio_poll_choice_forms[item] = forms.RadioPollChoiceVoteForm(
            data=request.POST or None, radio_poll=item)

    poll_comment = PollComment(poll=poll, user=request.user)
    poll_comment_form = forms.PollCommentForm(data=request.POST or None,
                                              instance=poll_comment)

    if request.method == 'POST':
        forms_valid = True
        # validate all forms
        for item in (range_poll_choice_forms.values()
                     + radio_poll_choice_forms.values()):
            if not item.is_valid():
                forms_valid = False
                break
        if poll.automated_poll and not poll_comment_form.is_valid():
            forms_valid = False

        if forms_valid:
            for range_poll_form in range_poll_choice_forms.values():
                range_poll_form.save()
            for radio_poll_form in radio_poll_choice_forms.values():
                radio_poll_form.save()
            if poll.automated_poll:
                poll_comment_form.save()
            Vote.objects.create(user=user, poll=poll)
            messages.success(request, ('Your vote has been '
                                       'successfully registered.'))
            return redirect('voting_list_votings')

    data['range_poll_choice_forms'] = range_poll_choice_forms
    data['radio_poll_choice_forms'] = radio_poll_choice_forms
    data['poll_comment_form'] = poll_comment_form

    return render(request, 'vote_voting.html', data)
示例#8
0
 def is_current_voting(self):
     if self.start < now_utc() and self.end > now_utc():
         return True
     return False
示例#9
0
 def is_future_voting(self):
     if self.start > now_utc():
         return True
     return False
示例#10
0
def view_voting(request, slug):
    """View voting and cast a vote view."""
    user = request.user
    poll = get_object_or_404(Poll, slug=slug)
    # If the user does not belong to a valid poll group
    if not (user.groups.filter(Q(id=poll.valid_groups.id)
                               | Q(name='Admin')).exists()):
        messages.error(request, ('You do not have the permissions to '
                                 'vote on this voting.'))
        return redirect('voting_list_votings')

    range_poll_choice_forms = {}
    radio_poll_choice_forms = {}

    data = {'poll': poll}

    # if the voting period has ended, display the results
    if now_utc() > poll.end:
        return render(request, 'view_voting.html', data)
    if now_utc() < poll.start:
        # Admin can edit future votings
        if user.groups.filter(name='Admin').exists():
            return redirect('voting_edit_voting', slug=poll.slug)
        else:
            messages.warning(request, ('This vote has not yet begun. '
                                       'You can cast your vote on %s UTC.' %
                                       poll.start.strftime('%Y %B %d, %H:%M')))
            return redirect('voting_list_votings')

    # avoid multiple votes from the same user
    if Vote.objects.filter(poll=poll, user=user).exists():
        messages.warning(request,
                         ('You have already cast your vote for this '
                          'voting. Come back to see the results on '
                          '%s UTC.' % poll.end.strftime('%Y %B %d, %H:%M')))
        return redirect('voting_list_votings')

    # pack the forms for rendering
    for item in poll.range_polls.all():
        range_poll_choice_forms[item] = forms.RangePollChoiceVoteForm(
            data=request.POST or None, choices=item.choices.all())

    for item in poll.radio_polls.all():
        radio_poll_choice_forms[item] = forms.RadioPollChoiceVoteForm(
            data=request.POST or None, radio_poll=item)

    poll_comment = PollComment(poll=poll, user=request.user)
    poll_comment_form = forms.PollCommentForm(data=request.POST or None,
                                              instance=poll_comment)

    if request.method == 'POST':
        forms_valid = True
        # validate all forms
        for item in (range_poll_choice_forms.values() +
                     radio_poll_choice_forms.values()):
            if not item.is_valid():
                forms_valid = False
                break
        if poll.automated_poll and not poll_comment_form.is_valid():
            forms_valid = False

        if forms_valid:
            for range_poll_form in range_poll_choice_forms.values():
                range_poll_form.save()
            for radio_poll_form in radio_poll_choice_forms.values():
                radio_poll_form.save()
            if poll.automated_poll:
                poll_comment_form.save()
                statsd.incr('voting.create_automated_poll_comment')
            Vote.objects.create(user=user, poll=poll)
            messages.success(request, ('Your vote has been '
                                       'successfully registered.'))
            statsd.incr('voting.vote_voting')
            return redirect('voting_list_votings')

    data['range_poll_choice_forms'] = range_poll_choice_forms
    data['radio_poll_choice_forms'] = radio_poll_choice_forms
    data['poll_comment_form'] = poll_comment_form

    return render(request, 'vote_voting.html', data)
示例#11
0
 def clean_report_date(self):
     """Clean report_date field."""
     if self.cleaned_data['report_date'] > now_utc().date():
         raise ValidationError('Report date cannot be in the future.')
     return self.cleaned_data['report_date']
示例#12
0
from django.utils.timezone import now as now_utc

import factory
from factory import fuzzy

from remo.profiles.tests import UserFactory
from remo.voting.models import (Poll, RadioPoll, RadioPollChoice, RangePoll,
                                RangePollChoice, Vote)


VALID_GROUPS = [Group.objects.get(name='Admin'),
                Group.objects.get(name='Council'),
                Group.objects.get(name='Mentor'),
                Group.objects.get(name='Rep'),
                Group.objects.get(name='Mozillians')]
POLL_END_DT = now_utc()


class PollFactory(factory.django.DjangoModelFactory):
    """Factory_Boy model for the voting_poll db table."""
    FACTORY_FOR = Poll

    name = factory.Sequence(lambda n: 'Voting{0} example'.format(n))
    start = fuzzy.FuzzyDateTime(datetime(2011, 1, 1, tzinfo=pytz.UTC))
    end = fuzzy.FuzzyDateTime(POLL_END_DT + timedelta(days=2),
                              POLL_END_DT + timedelta(days=365*2))
    valid_groups = fuzzy.FuzzyChoice(VALID_GROUPS)
    description = factory.Sequence(lambda n: ('This is a description {0}'
                                              .format(n)))
    created_by = factory.SubFactory(UserFactory)
示例#13
0
import factory
from factory import fuzzy

from remo.profiles.tests import UserFactory
from remo.voting.models import (Poll, RadioPoll, RadioPollChoice, RangePoll,
                                RangePollChoice, Vote)

VALID_GROUPS = [
    Group.objects.get(name='Admin'),
    Group.objects.get(name='Council'),
    Group.objects.get(name='Mentor'),
    Group.objects.get(name='Rep'),
    Group.objects.get(name='Mozillians')
]
POLL_END_DT = now_utc()


class PollFactory(factory.django.DjangoModelFactory):
    """Factory_Boy model for the voting_poll db table."""
    FACTORY_FOR = Poll

    name = factory.Sequence(lambda n: 'Voting{0} example'.format(n))
    start = fuzzy.FuzzyDateTime(datetime(2011, 1, 1, tzinfo=pytz.UTC))
    end = fuzzy.FuzzyDateTime(POLL_END_DT + timedelta(days=2),
                              POLL_END_DT + timedelta(days=365 * 2))
    valid_groups = fuzzy.FuzzyChoice(VALID_GROUPS)
    description = factory.Sequence(lambda n:
                                   ('This is a description {0}'.format(n)))
    created_by = factory.SubFactory(UserFactory)
示例#14
0
 def is_current_voting(self):
     if self.start < now_utc() and self.end > now_utc():
         return True
     return False
示例#15
0
 def is_future_voting(self):
     if self.start > now_utc():
         return True
     return False