Beispiel #1
0
def questions(request, survey_id, question_id=None):
    survey = get_object_or_404(Survey, id=survey_id)
    if request.method == 'GET':
        qs = Question.objects.filter(survey__id=survey_id).order_by('order', 'id')
        return api_utils.response(request, qs, QuestionGrid)
    elif request.method == 'POST':
        form = api_utils.load_form(request, QuestionForm)
        if form.is_valid():
            question = form.save(commit=False)
            question.survey = survey
            if question.order is None:
                res = Question.objects.filter(survey__id=survey_id).aggregate(Max('order'))
                max_order = res['order__max']
                if max_order:
                    question.order = max_order + 1
                else:
                    question.order = 0
            question.save()
            qs = Question.objects.filter(id=question.id)
            return api_utils.response(request, qs, QuestionGrid)
        else:
            return api_utils.response_error(request, form)
    elif request.method == 'DELETE':
        question = get_object_or_404(Question, id=question_id)
        question.delete()
        return api_utils.success()
    raise Http404
Beispiel #2
0
    def get(self, request, election_pk):
        try:
            """
            this will order the ballots from most recent to oldest.
            and optionally take a after parameter.
            """
            election = getElection(election_pk)
            limit = after = None
            if request.GET.has_key('limit'):
                limit = int(request.GET['limit'])
            if request.GET.has_key('after'):
                after = datetime.datetime.strptime(request.GET['after'], '%Y-%m-%d %H:%M:%S')

            voters = Voter.get_by_election(election, cast=True, order_by='cast_at', limit=limit, after=after)

            # we explicitly cast this to a short cast vote
            # res = [v.last_cast_vote().ld_object.short.toDict(complete=True) for v in voters]

            res = []
            for v in voters:
                cast = v.last_cast_vote().ld_object.short.toDict(complete=True)
                cast["url"] = reverse('ballot-last', args=[election_pk,v.uuid], request=request) 
                res.append(cast)
                
            # res = serializer(voters,request)
            return response(200,res)
        except Exception as err:
            return get_error(err)
Beispiel #3
0
 def get(self,request,election_pk, voter_pk):
     try:
         election = getElection(election_pk)
         voter = Voter.get_by_election_and_uuid(election, voter_pk)
         res = voter.last_cast_vote().toJSONDict()
         return response(200,res)
     except Exception as err:
         return get_error(err)
Beispiel #4
0
 def get(self, request, election_pk, voter_pk):
     try:
         election = getElection(election_pk)
         voter = Voter.get_by_election_and_uuid(election, voter_pk)
         votes = CastVote.get_by_voter(voter)
         res = [v.toJSONDict()  for v in votes]
         return response(200,res)
     except Exception as err:
         return get_error(err)
Beispiel #5
0
def choices(request, survey_id, question_id, choice_id=None):
    question = get_object_or_404(Question, id=question_id)
    if request.method == 'GET':
        qs = Choice.objects.filter(question__id=question_id).order_by('order', 'id')
        return api_utils.response(request, qs, ChoiceGrid)
    elif request.method == 'POST':
        form = api_utils.load_form(request, ChoiceForm)
        if form.is_valid():
            choice = form.save(commit=False)
            choice.question = question
            if choice.order is None:
                res = Choice.objects.filter(question__id=question_id).aggregate(Max('order'))
                max_order = res['order__max']
                if max_order:
                    choice.order = max_order + 1
                else:
                    choice.order = 0
            choice.save()
            qs = Choice.objects.filter(id=choice.id)
            return api_utils.response(request, qs, ChoiceGrid)
        else:
            return api_utils.response_error(request, form)
    elif request.method == 'PUT':
        api_utils.coerce_put_post(request)

        choice = get_object_or_404(Choice, id=choice_id)
        json_data = request.REQUEST.get('data', [])
        decoded_data = json.loads(json_data)
        if 'text' in decoded_data:
            choice.text = decoded_data['text']
        if 'order' in decoded_data:
            choice.order = int(decoded_data['order'])
        choice.save()
        return api_utils.success()
    elif request.method == 'DELETE':
        choice = get_object_or_404(Choice, id=choice_id)
        choice.delete()
        return api_utils.success()
    raise Http404
Beispiel #6
0
def surveys(request, survey_id=None):
    if request.method == 'GET':
        qs = Survey.objects.all()
        return api_utils.response(request, qs, SurveyGrid)
    elif request.method == 'POST':
        form = api_utils.load_form(request, SurveyForm)
        if form.is_valid():
            survey = form.save(commit=False)
            survey.created_by = request.user
            survey.editable_by = request.user
            survey.visible = True
            survey.public = False
            survey.allows_multiple_interviews = False
            survey.save()
            qs = Survey.objects.filter(id=survey.id)
            return api_utils.response(request, qs, SurveyGrid)
        else:
            return api_utils.response_error(request, form)
    elif request.method == 'DELETE':
        survey = get_object_or_404(Survey, id=survey_id)
        #survey.delete()
        return api_utils.success()
    raise Http404
Beispiel #7
0
 def post(self, request, election_pk):
     try:
         session = auth_user(request)
         if (session["username"] == "admin"):
             raise_exception(401, 'Admin is not allowed to be a voter.')
         user = get_user_session(session["username"])
         election = getElection(election_pk)
         body = get_encrypted_vote(request)
         voter = election.voter_set.get(
             voter_login_id=user.user_id,
             voter_password=user.info["password"])
         res = serializer(voter, request)
         create_cast_vote(body, voter, request)
         return response(200, res.data)
     except Voter.DoesNotExist as err:
         if (not election.openreg):
             return get_error(err)
         voter = create_voter(user, election)
         return self.post(request, election_pk)
     except Exception as err:
         return get_error(err)
Beispiel #8
0
 def get(self,request):
     try:
         api_task.slow_task.delay()
         return response(200, 'ok')
     except Exception as err:
         return get_error(err)