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')
class SpeechesView(ModelListView): def document_filter(qs, view, filter_name, filter_extra, val): u = val.rstrip('/').split('/') if u[-4] == 'debates': # /debates/2013/2/15/ try: date = datetime.date(int(u[-3]), int(u[-2]), int(u[-1])) except ValueError: raise BadRequest("Invalid document URL") return qs.filter(document__document_type='D', document__date=date).order_by('sequence') elif u[-4] == 'committees': # /commmittees/national-defence/41-1/63/ try: meeting = CommitteeMeeting.objects.get(committee__slug=u[-3], session=u[-2], number=u[-1]) except (ValueError, CommitteeMeeting.DoesNotExist): raise BadRequest("Invalid debate/meeting URL") return qs.filter(document=meeting.evidence_id).order_by('sequence') document_filter.help = "the URL of the debate or committee meeting" filters = { 'procedural': APIFilters.dbfield( help="is this a short, routine procedural speech? True or False"), 'document': document_filter, 'politician': APIFilters.politician(), 'politician_membership': APIFilters.fkey(lambda u: {'member': u[-1]}), 'time': APIFilters.dbfield( filter_types=APIFilters.numeric_filters, help="e.g. time__range=2012-10-19 10:00,2012-10-19 11:00"), 'mentioned_politician': APIFilters.politician('mentioned_politicians'), 'mentioned_bill': APIFilters.fkey(lambda u: { 'bills__billinsession__session': u[-2], 'bills__number': u[-1] }, help="e.g. /bills/41-1/C-14/") } resource_name = 'Speeches' def get_qs(self, request): qs = Statement.objects.all().prefetch_related('politician') if 'document' not in request.GET: qs = qs.order_by('-time') return qs
class BillListView(ModelListView): resource_name = 'Bills' filters = { 'session': APIFilters.dbfield(help="e.g. 41-1"), 'introduced': APIFilters.dbfield( filter_types=APIFilters.numeric_filters, help="date bill was introduced, e.g. introduced__gt=2010-01-01"), 'legisinfo_id': APIFilters.dbfield( help="integer ID assigned by parl.gc.ca's LEGISinfo"), 'number': APIFilters.dbfield('bill__number', help="a string, not an integer: e.g. C-10"), 'law': APIFilters.dbfield('bill__law', help="did it become law? True, False"), 'private_member_bill': APIFilters.dbfield('bill__privatemember', help="is it a private member's bill? True, False"), 'status_code': APIFilters.dbfield('bill__status_code'), 'sponsor_politician': APIFilters.politician('sponsor_politician'), 'sponsor_politician_membership': APIFilters.fkey(lambda u: {'sponsor_member': u[-1]}), } def get_qs(self, request): return BillInSession.objects.all().select_related( 'bill', 'sponsor_politician') def get_html(self, request): sessions = Session.objects.with_bills() len(sessions) # evaluate it bills = Bill.objects.filter(sessions=sessions[0]) votes = VoteQuestion.objects.select_related('bill').filter( session=sessions[0])[:6] t = loader.get_template('bills/index.html') c = { 'object_list': bills, 'session_list': sessions, 'votes': votes, 'session': sessions[0], 'title': 'Bills & Votes', 'recently_active': Bill.objects.recently_active() } return HttpResponse(t.render(c, request))
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))
class CommitteeMeetingListView(ModelListView): resource_name = 'Committee meetings' filters = { 'number': APIFilters.dbfield( filter_types=APIFilters.numeric_filters, help="each meeting in a session is given a sequential #"), 'session': APIFilters.dbfield(help="e.g. 41-1"), 'date': APIFilters.dbfield(filter_types=APIFilters.numeric_filters, help="e.g. date__gt=2010-01-01"), 'in_camera': APIFilters.dbfield(help="closed to the public? True, False"), 'committee': APIFilters.fkey(lambda u: {'committee__slug': u[-1]}, help="e.g. /committees/aboriginal-affairs") } def get_qs(self, request): return CommitteeMeeting.objects.all().order_by('-date')