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
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)
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)
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)
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
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
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)
def get(self,request): try: api_task.slow_task.delay() return response(200, 'ok') except Exception as err: return get_error(err)