Exemplo n.º 1
0
 def get(self, **kwargs):
     """Get itemized resources. If multiple values are passed for `committee_id`,
     create a subquery for each and combine with `UNION ALL`. This is necessary
     to avoid slow queries when one or more relevant committees has many
     records.
     """
     if kwargs.get("last_index"):
         if all(
             kwargs.get("last_{}".format(option)) is None
             for option in self.sort_options
         ) and not kwargs.get("sort_null_only"):
             raise exceptions.ApiError(
                 "When paginating through results, both values from the \
                 previous page's `last_indexes` object are needed. For more information, \
                 see https://api.open.fec.gov/developers/. Please add one of the following \
                 filters to your query: `sort_null_only`=True, {}".format(
                     ", ".join("`last_" + option + "`" for option in self.sort_options)
                 ),
                 status_code=422,
             )
     committee_ids = kwargs.get('committee_id', [])
     if len(committee_ids) > 10:
         raise exceptions.ApiError(
             'Can only specify up to ten values for "committee_id".',
             status_code=422,
         )
     if len(committee_ids) > 1:
         query, count = self.join_committee_queries(kwargs)
         return utils.fetch_seek_page(query, kwargs, self.index_column, count=count)
     query = self.build_query(**kwargs)
     count, _ = counts.get_count(query, models.db.session)
     return utils.fetch_seek_page(query, kwargs, self.index_column, count=count, cap=self.cap)
Exemplo n.º 2
0
 def get(self, **kwargs):
     """Get itemized resources. If multiple values are passed for `committee_id`,
     create a subquery for each and combine with `UNION ALL`. This is necessary
     to avoid slow queries when one or more relevant committees has many
     records.
     """
     committee_ids = kwargs.get('committee_id', [])
     if len(committee_ids) > 10:
         raise exceptions.ApiError(
             'Can only specify up to ten values for "committee_id".',
             status_code=422,
         )
     if len(committee_ids) > 1:
         query, count = self.join_committee_queries(kwargs)
         return utils.fetch_seek_page(query,
                                      kwargs,
                                      self.index_column,
                                      count=count)
     query = self.build_query(**kwargs)
     count, _ = counts.get_count(query, models.db.session)
     return utils.fetch_seek_page(query,
                                  kwargs,
                                  self.index_column,
                                  count=count,
                                  cap=self.cap)
Exemplo n.º 3
0
 def build_committee_query(self, kwargs, committee_id):
     query = self.build_query(utils.extend(kwargs, {'committee_id': [committee_id]}), join=False)
     sort, hide_null, nulls_large = kwargs['sort'], kwargs['sort_hide_null'], kwargs['sort_nulls_large']
     query, _ = sorting.sort(query, sort, model=models.ScheduleA, hide_null=hide_null, nulls_large=nulls_large)
     page_query = utils.fetch_seek_page(query, kwargs, self.index_column, count=-1, eager=False).results
     count = counts.count_estimate(query, models.db.session, threshold=5000)
     return page_query, count
Exemplo n.º 4
0
 def get(self, **kwargs):
     query = self.build_query(kwargs)
     count = counts.count_estimate(query, models.db.session, threshold=5000)
     return utils.fetch_seek_page(query,
                                  kwargs,
                                  self.index_column,
                                  count=count)
Exemplo n.º 5
0
 def build_committee_query(self, kwargs, committee_id):
     """Build a subquery by committee.
     """
     query = self.build_query(_apply_options=False, **utils.extend(kwargs, {'committee_id': [committee_id]}))
     sort, hide_null = kwargs['sort'], kwargs['sort_hide_null']
     query, _ = sorting.sort(query, sort, model=self.model, hide_null=hide_null)
     page_query = utils.fetch_seek_page(query, kwargs, self.index_column, count=-1, eager=False).results
     count = counts.count_estimate(query, models.db.session)
     return page_query, count
Exemplo n.º 6
0
 def build_committee_query(self, kwargs, committee_id):
     """Build a subquery by committee.
     """
     query = self.build_query(_apply_options=False, **utils.extend(kwargs, {'committee_id': [committee_id]}))
     sort, hide_null, nulls_large = kwargs['sort'], kwargs['sort_hide_null'], kwargs['sort_nulls_large']
     query, _ = sorting.sort(query, sort, model=self.model, hide_null=hide_null, nulls_large=nulls_large)
     page_query = utils.fetch_seek_page(query, kwargs, self.index_column, count=-1, eager=False).results
     count = counts.count_estimate(query, models.db.session, threshold=5000)
     return page_query, count
Exemplo n.º 7
0
 def get(self, **kwargs):
     """Get itemized resources. If multiple values are passed for `committee_id`,
     create a subquery for each and combine with `UNION ALL`. This is necessary
     to avoid slow queries when one or more relevant committees has many
     records.
     """
     committee_ids = kwargs.get('committee_id', [])
     if len(committee_ids) > 5:
         raise exceptions.ApiError(
             'Can only specify up to five values for "committee_id".',
             status_code=422,
         )
     if len(committee_ids) > 1:
         query, count = self.join_committee_queries(kwargs)
         return utils.fetch_seek_page(query, kwargs, self.index_column, count=count)
     query = self.build_query(**kwargs)
     count = counts.count_estimate(query, models.db.session, threshold=5000)
     return utils.fetch_seek_page(query, kwargs, self.index_column, count=count)
Exemplo n.º 8
0
 def get(self, **kwargs):
     if len(kwargs['committee_id']) > 5:
         raise exceptions.ApiError(
             'Can only specify up to five values for "committee_id".',
             status_code=422,
         )
     if len(kwargs['committee_id']) > 1:
         query, count = self.join_committee_queries(kwargs)
         return utils.fetch_seek_page(query, kwargs, self.index_column, count=count)
     return super(ScheduleAView, self).get(**kwargs)
Exemplo n.º 9
0
 def get(self, **kwargs):
     if len(kwargs['committee_id']) > 5:
         raise exceptions.ApiError(
             'Can only specify up to five values for "committee_id".',
             status_code=422,
         )
     if len(kwargs['committee_id']) > 1:
         query, count = self.join_committee_queries(kwargs)
         return utils.fetch_seek_page(query,
                                      kwargs,
                                      self.index_column,
                                      count=count)
     return super(ScheduleAView, self).get(**kwargs)
Exemplo n.º 10
0
 def build_committee_query(self, kwargs, committee_id):
     query = self.build_query(utils.extend(
         kwargs, {'committee_id': [committee_id]}),
                              join=False)
     sort, hide_null, nulls_large = kwargs['sort'], kwargs[
         'sort_hide_null'], kwargs['sort_nulls_large']
     query, _ = sorting.sort(query,
                             sort,
                             model=models.ScheduleA,
                             hide_null=hide_null,
                             nulls_large=nulls_large)
     page_query = utils.fetch_seek_page(query,
                                        kwargs,
                                        self.index_column,
                                        count=-1,
                                        eager=False).results
     count = counts.count_estimate(query, models.db.session, threshold=5000)
     return page_query, count
Exemplo n.º 11
0
 def get(self, **kwargs):
     query = self.build_query(**kwargs)
     count = counts.count_estimate(query, models.db.session, threshold=5000)
     return utils.fetch_seek_page(query, kwargs, self.index_column, count=count)