Esempio n. 1
0
class BallotListView(ModelListView):

    resource_name = 'Ballots'

    filters = {
        'vote':
        APIFilters.fkey(lambda u: {
            'votequestion__session': u[-2],
            'votequestion__number': u[-1]
        },
                        help="e.g. /votes/41-1/472/"),
        'politician':
        APIFilters.politician(),
        'politician_membership':
        APIFilters.fkey(lambda u: {'member': u[-1]},
                        help="e.g. /politicians/roles/326/"),
        'ballot':
        APIFilters.choices('vote', MemberVote),
        'dissent':
        APIFilters.dbfield(
            'dissent',
            help=
            "does this look like a vote against party line? not reliable for research. True, False"
        )
    }

    def get_qs(self, request):
        return MemberVote.objects.all().select_related(
            'votequestion').order_by('-votequestion__date',
                                     '-votequestion__number')

    def object_to_dict(self, obj):
        return obj.to_api_dict(representation='list')
Esempio n. 2
0
class VoteListView(ModelListView):

    resource_name = 'Votes'

    api_notes = mark_safe("""<p>What we call votes are <b>divisions</b> in official Parliamentary lingo.
        We refer to an individual person's vote as a <a href="/votes/ballots/">ballot</a>.</p>
    """)

    filters = {
        'session': APIFilters.dbfield(help="e.g. 41-1"),
        'yea_total': APIFilters.dbfield(filter_types=APIFilters.numeric_filters,
            help="# votes for"),
        'nay_total': APIFilters.dbfield(filter_types=APIFilters.numeric_filters,
            help="# votes against, e.g. nay_total__gt=10"),
        'paired_total': APIFilters.dbfield(filter_types=APIFilters.numeric_filters,
            help="paired votes are an odd convention that seem to have stopped in 2011"),
        'date': APIFilters.dbfield(filter_types=APIFilters.numeric_filters,
            help="date__gte=2011-01-01"),
        'number': APIFilters.dbfield(filter_types=APIFilters.numeric_filters,
            help="every vote in a session has a sequential number"),
        'bill': APIFilters.fkey(lambda u: {
            'bill__sessions': u[-2],
            'bill__number': u[-1]
        }, help="e.g. /bills/41-1/C-10/"),
        'result': APIFilters.choices('result', VoteQuestion)
    }

    def get_json(self, request, session_id=None):
        if session_id:
            return HttpResponseRedirect(urlresolvers.reverse('votes') + '?'
                                        + urlencode({'session': session_id}))
        return super(VoteListView, self).get_json(request)

    def get_qs(self, request):
        return VoteQuestion.objects.select_related(depth=1).order_by('-date', '-number')

    def get_html(self, request, session_id=None):
        if session_id:
            session = get_object_or_404(Session, pk=session_id)
        else:
            session = Session.objects.current()

        t = loader.get_template('bills/votequestion_list.html')
        c = RequestContext(request, {
            'object_list': self.get_qs(request).filter(session=session),
            'session': session,
            'title': 'Votes for the %s' % session
        })
        return HttpResponse(t.render(c))