class ReportsView(utils.Resource): @use_kwargs(args.paging) @use_kwargs(args.reports) @use_kwargs(args.make_multi_sort_args(default=['-coverage_end_date'])) @marshal_with(schemas.CommitteeReportsPageSchema(), apply=False) def get(self, committee_type=None, **kwargs): committee_id = kwargs.get('committee_id') query, reports_class, reports_schema = self.build_query( committee_type=committee_type, **kwargs) if kwargs['sort']: validator = args.IndicesValidator(reports_class) validator(kwargs['sort']) page = utils.fetch_page(query, kwargs, model=reports_class, multi=True) return reports_schema().dump(page).data def build_query(self, committee_type=None, **kwargs): #For this endpoint we now enforce the enpoint specified to map the right model. reports_class, reports_schema = reports_schema_map.get( reports_type_map.get(committee_type), default_schemas, ) query = reports_class.query filter_multi_fields = [ ('amendment_indicator', models.CommitteeReports.amendment_indicator), ('report_type', reports_class.report_type), ] if hasattr(reports_class, 'committee'): query = reports_class.query.outerjoin( reports_class.committee).options( sa.orm.contains_eager(reports_class.committee)) if kwargs.get('committee_id'): query = query.filter( reports_class.committee_id.in_(kwargs['committee_id'])) if kwargs.get('candidate_id'): query = query.filter( models.CommitteeHistory.candidate_ids.overlap( [kwargs.get('candidate_id')])) if kwargs.get('type'): query = query.filter( models.CommitteeHistory.committee_type.in_(kwargs.get('type'))) if kwargs.get('year'): query = query.filter(reports_class.report_year.in_(kwargs['year'])) if kwargs.get('cycle'): query = query.filter(reports_class.cycle.in_(kwargs['cycle'])) if kwargs.get('beginning_image_number'): query = query.filter( reports_class.beginning_image_number.in_( kwargs['beginning_image_number'])) if kwargs.get('is_amended') is not None: query = query.filter( reports_class.is_amended == kwargs['is_amended']) query = filters.filter_range(query, kwargs, get_range_filters()) query = filters.filter_match(query, kwargs, get_match_filters()) query = filters.filter_multi(query, kwargs, filter_multi_fields) return query, reports_class, reports_schema
def args(self): default_sort = ['-report_year'] return utils.extend( args.paging, args.operations_log, args.make_multi_sort_args(default=default_sort, ), )
class CommitteeReportsView(views.ApiResource): @use_kwargs(args.paging) @use_kwargs(args.committee_reports) @use_kwargs(args.make_multi_sort_args(default=['-coverage_end_date'])) @marshal_with(schemas.CommitteeReportsPageSchema(), apply=False) def get(self, committee_id=None, committee_type=None, **kwargs): query, reports_class, reports_schema = self.build_query( committee_id=committee_id.upper(), committee_type=committee_type, **kwargs ) if kwargs['sort']: validator = args.IndicesValidator(reports_class) validator(kwargs['sort']) page = utils.fetch_page(query, kwargs, model=reports_class, multi=True) return reports_schema().dump(page).data def build_query(self, committee_id=None, committee_type=None, **kwargs): reports_class, reports_schema = reports_schema_map.get( self._resolve_committee_type( committee_id=committee_id.upper(), committee_type=committee_type, **kwargs ), default_schemas, ) query = reports_class.query filter_multi_fields = [ ('amendment_indicator', models.CommitteeReports.amendment_indicator), ('report_type', reports_class.report_type), ('year', reports_class.report_year), ('cycle', reports_class.cycle), ('beginning_image_number', reports_class.beginning_image_number), ] # Eagerly load committees if applicable if hasattr(reports_class, 'committee'): query = reports_class.query.options( sa.orm.joinedload(reports_class.committee) ) if committee_id is not None: query = query.filter_by(committee_id=committee_id.upper()) query = filters.filter_range(query, kwargs, get_range_filters()) query = filters.filter_match(query, kwargs, get_match_filters()) query = filters.filter_multi(query, kwargs, filter_multi_fields) return query, reports_class, reports_schema def _resolve_committee_type(self, committee_id=None, committee_type=None, **kwargs): if committee_id is not None: query = models.CommitteeHistory.query.filter_by(committee_id=committee_id.upper()) if kwargs.get('cycle'): query = query.filter(models.CommitteeHistory.cycle.in_(kwargs['cycle'])) if kwargs.get('year'): cycle_list = [(year + year % 2) for year in kwargs['year']] query = query.filter(models.CommitteeHistory.cycle.in_(cycle_list)) query = query.order_by(sa.desc(models.CommitteeHistory.cycle)) committee = query.first_or_404() return committee.committee_type elif committee_type is not None: return reports_type_map.get(committee_type)
def args(self): return utils.extend( args.paging, args.AuditCase, args.make_multi_sort_args( default=['-cycle', 'committee_name', ] ), )
def args(self): return utils.extend( args.paging, args.auditCase, args.make_multi_sort_args(default=[ '-cycle', 'committee_name', ]), )
def args(self): #Place the sort argument in a list, as the api will return a 422 status code if it's not in a list #list is needed because multisort is used default_sort = ['-receipt_date'] return utils.extend( args.paging, args.filings, args.make_multi_sort_args(default=default_sort, validator=args.IndicesValidator( self.model)), )
def args(self): #Place the sort argument in a list, as the api will return a 422 status code if it's not in a list #list is needed because multisort is used default_sort = ['-receipt_date'] return utils.extend( args.paging, args.filings, args.make_multi_sort_args( default=default_sort, validator=args.IndicesValidator(self.model) ), )
class ElectionsListView(utils.Resource): model = ElectionsList schema = schemas.ElectionsListSchema page_schema = schemas.ElectionsListPageSchema filter_multi_fields = [ ('cycle', ElectionsList.cycle), ] @use_kwargs(args.paging) @use_kwargs(args.elections_list) @use_kwargs(args.make_multi_sort_args(default=[ 'sort_order', 'district', ])) @marshal_with(schemas.ElectionsListPageSchema()) def get(self, **kwargs): query = self._get_elections(kwargs) return utils.fetch_page(query, kwargs, model=ElectionsList, multi=True) def _get_elections(self, kwargs): """Get elections from ElectionsList model.""" query = db.session.query(ElectionsList) if kwargs.get('office'): values = [each[0].upper() for each in kwargs['office']] query = query.filter(ElectionsList.office.in_(values)) if kwargs.get('state'): query = query.filter( sa.or_( ElectionsList.state.in_(kwargs['state']), ElectionsList.office == 'P', )) if kwargs.get('district'): query = query.filter( sa.or_( ElectionsList.district.in_(kwargs['district']), ElectionsList.office.in_(['P', 'S']), ), ) if kwargs.get('zip'): query = self._filter_zip(query, kwargs) return filters.filter_multi(query, kwargs, self.filter_multi_fields) def _filter_zip(self, query, kwargs): """Filter query by zip codes.""" districts = db.session.query(ZipsDistricts).filter( cast(ZipsDistricts.zip_code, Integer).in_(kwargs['zip']), ZipsDistricts.active == 'Y').subquery() return query.join( districts, sa.or_( # House races from matching states and districts sa.and_( ElectionsList.district == districts.c['district'], ElectionsList.state == districts.c['state_abbrevation'], ), # Senate and presidential races from matching states sa.and_( sa.or_(ElectionsList.district == '00'), ElectionsList.state.in_( [districts.c['state_abbrevation'], 'US'])), ))
class CommitteeReportsView(utils.Resource): @use_kwargs(args.paging) @use_kwargs(args.committee_reports) @use_kwargs(args.make_multi_sort_args(default=['-coverage_end_date'])) @marshal_with(schemas.CommitteeReportsPageSchema(), apply=False) def get(self, committee_id=None, committee_type=None, **kwargs): query, reports_class, reports_schema = self.build_query( committee_id=committee_id, committee_type=committee_type, **kwargs) if kwargs['sort']: validator = args.IndicesValidator(reports_class) validator(kwargs['sort']) page = utils.fetch_page(query, kwargs, model=reports_class, multi=True) return reports_schema().dump(page).data def build_query(self, committee_id=None, committee_type=None, **kwargs): reports_class, reports_schema = reports_schema_map.get( self._resolve_committee_type(committee_id=committee_id, committee_type=committee_type, **kwargs), default_schemas, ) query = reports_class.query # Eagerly load committees if applicable if hasattr(reports_class, 'committee'): query = reports_class.query.options( sa.orm.joinedload(reports_class.committee)) if committee_id is not None: query = query.filter_by(committee_id=committee_id) if kwargs.get('year'): query = query.filter(reports_class.report_year.in_(kwargs['year'])) if kwargs.get('cycle'): query = query.filter(reports_class.cycle.in_(kwargs['cycle'])) if kwargs.get('beginning_image_number'): query = query.filter( reports_class.beginning_image_number.in_( kwargs['beginning_image_number'])) if kwargs.get('report_type'): include, exclude = parse_types(kwargs['report_type']) if include: query = query.filter(reports_class.report_type.in_(include)) elif exclude: query = query.filter( sa.not_(reports_class.report_type.in_(exclude))) if kwargs.get('is_amended') is not None: query = query.filter( reports_class.is_amended == kwargs['is_amended']) query = filters.filter_range(query, kwargs, get_range_filters()) query = filters.filter_match(query, kwargs, get_match_filters()) query = filters.filter_multi(query, kwargs, get_multi_filters()) return query, reports_class, reports_schema def _resolve_committee_type(self, committee_id=None, committee_type=None, **kwargs): if committee_id is not None: query = models.CommitteeHistory.query.filter_by( committee_id=committee_id) if kwargs.get('cycle'): query = query.filter( models.CommitteeHistory.cycle.in_(kwargs['cycle'])) query = query.order_by(sa.desc(models.CommitteeHistory.cycle)) committee = query.first_or_404() return committee.committee_type elif committee_type is not None: return reports_type_map.get(committee_type)