Пример #1
0
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
Пример #2
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')
Пример #3
0
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))