示例#1
0
from dcapi.schema import Schema
from dcdata.contracts.models import Contract
from dcdata.utils.sql import parse_date

CONTRACTS_SCHEMA = Schema(
    InclusionField('agency_id', 'agencyid'),
    InclusionField('contracting_agency_id', 'contractingofficeagencyid'),
    InclusionField('fiscal_year'),
    InclusionField('place_district', 'congressionaldistrict'),
    InclusionField('place_state', 'statecode'),
    InclusionField('requesting_agency_id', 'fundingrequestingagencyid'),
    InclusionField('vendor_state', 'state'),
    InclusionField('vendor_zipcode', 'zipcode'),
    InclusionField('vendor_district', 'vendor_cd'),
    InclusionField('vendor_duns', 'dunsnumber'),
    InclusionField('vendor_parent_duns', 'eeparentduns'),

    # agency names have no data. see ticket #835
    #FulltextField('agency_name', ['agency_name', 'contracting_agency_name', 'requesting_agency_name']),
    FulltextField('vendor_name', ['vendorname']),
    FulltextField('vendor_city', ['city']),
    ComparisonField('obligated_amount', 'obligatedamount', cast=int),
    ComparisonField('current_amount', 'baseandexercisedoptionsvalue',
                    cast=int),
    ComparisonField('maximum_amount', 'baseandalloptionsvalue', cast=int),
    ComparisonField('signed_date', 'signeddate', cast=parse_date),
)


def filter_contracts(request):
    return CONTRACTS_SCHEMA.build_filter(Contract.objects, request).order_by()
示例#2
0
from dcapi.schema import Schema, FunctionField
from dcdata.faca.models import FACARecord


def _year_generator(q, *years):
    or_query = Q()
    for year in years:
        or_query.add(
            Q(start_date__lte="%s-12-31" % year,
              end_date__gte="%s-01-01" % year), Q.OR)

    return q.filter(or_query)


FACA_SCHEMA = Schema(
    FulltextField('agency_name', ['agency_abbr', 'agency_name']),
    FulltextField('committee_name'), FulltextField('member_name'),
    FulltextField('affiliation'), FunctionField('year', _year_generator))


def filter_faca(request):
    return FACA_SCHEMA.build_filter(FACARecord.objects, request)


class FACAFilterHandler(FilterHandler):

    ordering = ['committee_name']
    filename = 'faca'
    model = FACARecord

    def queryset(self, params):
        return filter_faca(self._unquote(params))
示例#3
0
from dcapi.common.handlers import DenormalizingFilterHandler
from dcapi.common.schema import InclusionField, ComparisonField, FulltextField
from dcapi.schema import Schema
from dcdata.earmarks.models import Earmark

EARMARKS_SCHEMA = Schema(
    InclusionField('year', 'fiscal_year'),
    InclusionField('state', 'locations__state'),
    InclusionField('member_party', 'members__party'),
    InclusionField('member_state', 'members__state'),
    FulltextField('bill', ['bill', 'bill_section', 'bill_subsection']),
    FulltextField('description', ['earmarks_earmark.description', 'notes']),
    FulltextField('city', ['earmarks_location.city']),
    FulltextField(
        'member',
        ['earmarks_member.standardized_name', 'earmarks_member.raw_name']),
    FulltextField('recipient', [
        'earmarks_recipient.standardized_recipient',
        'earmarks_recipient.raw_recipient'
    ]),
    ComparisonField('amount', 'final_amount'),
)


def filter_earmarks(request):
    qs = EARMARKS_SCHEMA.build_filter(Earmark.objects, request)

    # filters do nothing--just here to force the join that's needed for the fulltext search
    if 'city' in request:
        qs = qs.filter(locations__city__isnull=False)
    if 'member' in request:
示例#4
0
from dcapi.common.handlers import FilterHandler
from dcapi.common.schema import FulltextField
from dcapi.schema import Schema
from dcdata.contribution.models import LobbyistBundlingDenormalized

BUNDLING_SCHEMA = Schema(
    FulltextField('recipient_name',
                  ['committee_name', 'standardized_recipient_name']),
    FulltextField('lobbyist_name', [
        'standardized_lobbyist_name', 'standardized_firm_name', 'bundler_name',
        'bundler_employer'
    ]),
)


def filter_bundling(request):
    return BUNDLING_SCHEMA.build_filter(LobbyistBundlingDenormalized.objects,
                                        request)


class BundlingFilterHandler(FilterHandler):
    fields = [f.name for f in LobbyistBundlingDenormalized._meta.fields]
    model = LobbyistBundlingDenormalized
    ordering = ['committee_name', 'bundler_name', '-report_year']
    filename = 'lobbyist_bundled_contributions'

    def queryset(self, params):
        return filter_bundling(self._unquote(params))
示例#5
0
from dcapi.common.handlers import FilterHandler
from dcapi.common.schema import InclusionField, FulltextField, ComparisonField
from dcapi.schema import Schema
from dcdata.pogo.models import Misconduct

CONTRACTOR_MISCONDUCT_SCHEMA = Schema(
    InclusionField('date_year'),
    ComparisonField('penalty_amount', 'penalty_amount', cast=int),
    FulltextField('contractor', ['pogo_contractor.name']),
    FulltextField('enforcement_agency'),
    FulltextField('instance'),
    FulltextField('contracting_party'),
)


def filter_contractor_misconduct(request):
    q = CONTRACTOR_MISCONDUCT_SCHEMA.build_filter(Misconduct.objects,
                                                  request).order_by()

    # filter does nothing--it's here to force the join
    if 'contractor' in request:
        q = q.filter(contractor__name__isnull=False)

    return q.distinct().select_related()


class ContractorMisconductFilterHandler(FilterHandler):
    model = Misconduct
    ordering = ['-penalty_amount', '-date']
    filename = 'contractor_misconduct'
示例#6
0

def _recipient_state_in_generator(query, *states):
    return query.filter(
        recipient_state__in=[state.upper() for state in states])


CONTRIBUTION_SCHEMA = Schema(
    FulltextField('committee_ft', ['committee_name']),
    FulltextField('contributor_ft', ['contributor_name']),
    FulltextField('recipient_ft', ['recipient_name']),
    FulltextField('office_ft', ['seat']),
    FulltextField('payment_type_ft', ['payment_type']),
    FunctionField('contributor_state', _contributor_state_in_generator),
    InclusionField('contributor_type'),
    InclusionField('contributor_zipcode'),
    InclusionField('contributor_zipcode'),
    ComparisonField('amount', cast=int),
    ComparisonField('date', cast=parse_date),
    #FunctionField('cycle', _cycle_in_generator),
    #InclusionField('seat'),
    #InclusionField('transaction_namespace'),
    #InclusionField('committee_ext_id'),
)


def filter_contributions(request):
    query = CONTRIBUTION_SCHEMA.build_filter(ContributionDC.objects,
                                             request).order_by()
    return query
示例#7
0
def _lobbyist_is_rep_generator(query, value):
    return query.filter(lobbyists__member_of_congress=True)

    
LOBBYING_SCHEMA = Schema(
    FunctionField('lobbyist_is_rep', _lobbyist_is_rep_generator),
    
    IndustryField('industry', 'client_category'),

    InclusionField('transaction_id'),
    InclusionField('transaction_type'),
    InclusionField('filing_type'),
    InclusionField('year'),
    InclusionField('issue', 'issues__general_issue_code'),
    InclusionField('lobbyist_ext_id', 'lobbyists__lobbyist_ext_id'),
    InclusionField('candidate_ext_id', 'lobbyists__candidate_ext_id'),

    FulltextField('client_ft', ['client_name']),
    FulltextField('client_parent_ft', ['client_parent_name']),
    FulltextField('lobbyist_ft', ['lobbying_lobbyist.lobbyist_name']),
    FulltextField('registrant_ft', ['registrant_name']),
    FulltextField('issue_ft', ['lobbying_issue.specific_issue']),

    ComparisonField('amount', cast=int),
)

def filter_lobbying(request):
    q = LOBBYING_SCHEMA.build_filter(Lobbying.objects, request).order_by()

    # filter does nothing--it's here to force the join on lobbyists
示例#8
0
from dcapi.common.handlers import FilterHandler
from dcapi.common.schema import InclusionField, FulltextField, ComparisonField
from dcapi.schema import Schema
from dcdata.grants.models import Grant

GRANTS_SCHEMA = Schema(
    InclusionField('assistance_type'), InclusionField('fiscal_year'),
    InclusionField('recipient_state', 'recipient_state_code'),
    InclusionField('recipient_type'),
    FulltextField('agency_ft', ['agency_name']),
    FulltextField('recipient_ft', ['recipient_name']),
    ComparisonField('amount_total', 'total_funding_amount', cast=int))


def filter_grants(request):
    q = GRANTS_SCHEMA.build_filter(Grant.objects, request).order_by()
    return q.select_related()


class GrantsFilterHandler(FilterHandler):

    # imported_on is marked as an auto-generated field/non-editable,
    # so was getting dropped by Django's model_to_dict serialization,
    # but still required by the list of fields,
    # so we pass the list of fields we want directly instead

    fields = Grant._meta.get_all_field_names()
    fields.remove('imported_on')

    ordering = ['-fiscal_year', '-total_funding_amount']
    filename = 'grants'
示例#9
0
#


def _terminated_generator(query, terminated_active):
    return query.filter(terminated=terminated_active.title())


CLIENT_REGISTRANT_SCHEMA = Schema(
    FunctionField('terminated', _terminated_generator),
    InclusionField('registrant_id'),
    InclusionField('client_id'),
    InclusionField('location_id'),
    FulltextField('client_ft', [
        'client',
    ]),
    FulltextField('registrant_name_ft', [
        'registrant_name',
    ]),
    FulltextField('location_of_client_ft', [
        'location_of_client',
    ]),
    FulltextField('description_of_service_ft', [
        'description_of_service',
    ]),
)


def filter_client_registrant(request):
    return CLIENT_REGISTRANT_SCHEMA.build_filter(ClientRegistrant.objects,
                                                 request).order_by()

示例#10
0
from dcapi.common.handlers import FilterHandler
from dcapi.common.schema import InclusionField, FulltextField, ComparisonField
from dcapi.schema import Schema
from dcdata.epa import models
from dcdata.epa.models import DenormalizedAction

EPA_SCHEMA = Schema(
    InclusionField('case_num'),
    FulltextField('case_name'),
    FulltextField('defendants', ['defendants']),
    FulltextField('location_addresses', ['location_addresses']),
    ComparisonField('penalty'),
    ComparisonField('first_date'),
    ComparisonField('last_date'),
)


def filter_epa(request):
    qs = EPA_SCHEMA.build_filter(models.DenormalizedAction.objects, request)

    # filters do nothing--just here to force the join that's needed for the fulltext search
    #    if 'city' in request:
    #        qs = qs.filter(locations__city__isnull=False)

    return qs.order_by().distinct().select_related()


class EPAFilterHandler(FilterHandler):
    # todo: ordering should change
    ordering = ['-penalty']
    filename = 'epa'