Esempio n. 1
0
class CurrentMPView(ModelListView):

    resource_name = 'Politicians'

    default_limit = 308

    filters = {
        'name':
        APIFilters.dbfield(help='e.g. Stephen Harper'),
        'family_name':
        APIFilters.dbfield('name_family', help='e.g. Harper'),
        'given_name':
        APIFilters.dbfield('name_given', help='e.g. Stephen'),
        'include':
        APIFilters.noop(
            help=
            "'former' to show former MPs (since 94), 'all' for current and former"
        )
    }

    def get_qs(self, request):
        if request.GET.get('include') == 'former':
            qs = Politician.objects.elected_but_not_current()
        elif request.GET.get('include') == 'all':
            qs = Politician.objects.elected()
        else:
            qs = Politician.objects.current()
        return qs.order_by('name_family')

    def get_html(self, request):
        t = loader.get_template('politicians/electedmember_list.html')
        c = RequestContext(
            request, {
                'object_list':
                ElectedMember.objects.current().order_by(
                    'riding__province',
                    'politician__name_family').select_related(
                        'politician', 'riding', 'party'),
                'title':
                'Current Members of Parliament'
            })
        return HttpResponse(t.render(c))
Esempio n. 2
0
class CurrentMPView(ModelListView):

    resource_name = 'Politicians'

    default_limit = 308

    # The API stuff here is a bit of a hack: because of the database schema, it makes sense
    # to internally use ElectedMembers in order to add more fields to the default response,
    # but for former politicians we use Politician objects, so... hacking.
    def _politician_prepend_filter(field_name, help):
        def inner(qs, *args, **kwargs):
            if qs.model == Politician:
                return APIFilters.dbfield(field_name)(qs, *args, **kwargs)
            else:
                return APIFilters.dbfield('politician__' + field_name)(
                    qs, *args, **kwargs)

        inner.help = help
        return inner

    filters = {
        'name':
        _politician_prepend_filter('name', help='e.g. Stephen Harper'),
        'family_name':
        _politician_prepend_filter('name_family', help='e.g. Harper'),
        'given_name':
        _politician_prepend_filter('name_given', help='e.g. Stephen'),
        'include':
        APIFilters.noop(
            help=
            "'former' to show former MPs (since 94), 'all' for current and former"
        )
    }

    def get_qs(self, request=None):
        if request and request.GET.get('include') == 'former':
            qs = Politician.objects.elected_but_not_current().order_by(
                'name_family')
        elif request and request.GET.get('include') == 'all':
            qs = Politician.objects.elected().order_by('name_family')
        else:
            qs = ElectedMember.objects.current().order_by(
                'riding__province', 'politician__name_family').select_related(
                    'politician', 'riding', 'party')
        return qs

    def object_to_dict(self, obj):
        if isinstance(obj, ElectedMember):
            return dict(
                name=obj.politician.name,
                url=obj.politician.get_absolute_url(),
                current_party={"short_name": {
                    "en": obj.party.short_name
                }},
                current_riding={
                    "province": obj.riding.province,
                    "name": {
                        "en": obj.riding.dashed_name
                    }
                },
                image=obj.politician.headshot.url
                if obj.politician.headshot else None,
            )
        else:
            return super(CurrentMPView, self).object_to_dict(obj)

    def get_html(self, request):
        t = loader.get_template('politicians/electedmember_list.html')
        c = {
            'object_list': self.get_qs(),
            'title': 'Current Members of Parliament'
        }
        return HttpResponse(t.render(c, request))