def filter_fulltext(self, query, kwargs): if any(kwargs[key] for key, column in self.filter_fulltext_fields): query = self.join_fulltext(query) for key, column in self.filter_fulltext_fields: if kwargs[key]: query = utils.search_text(query, column, kwargs[key], order=False) return query
def get_candidates(self, kwargs): candidates = self.query if kwargs.get('q'): candidates = utils.search_text( candidates.join( models.CandidateSearch, models.Candidate.candidate_id == models.CandidateSearch.id, ), models.CandidateSearch.fulltxt, kwargs['q'], ).distinct() candidates = filter_query(models.Candidate, candidates, filter_fields, kwargs) if kwargs.get('name'): candidates = candidates.filter( models.Candidate.name.ilike('%{}%'.format(kwargs['name']))) # TODO(jmcarp) Reintroduce year filter pending accurate `load_date` and `expire_date` values if kwargs.get('cycle'): candidates = candidates.filter( models.Candidate.cycles.overlap(kwargs['cycle'])) return candidates
def build_query(self, **kwargs): query = super().build_query(**kwargs) if {'receipts', '-receipts'}.intersection(kwargs.get('sort', [])) and 'q' not in kwargs: raise exceptions.ApiError( 'Cannot sort on receipts when parameter "q" is not set', status_code=422, ) if kwargs.get('q'): query = utils.search_text( query.join( models.CandidateSearch, models.Candidate.candidate_id == models.CandidateSearch.id, ), models.CandidateSearch.fulltxt, kwargs['q'], ).distinct() if kwargs.get('name'): query = query.filter(models.Candidate.name.ilike('%{}%'.format(kwargs['name']))) # TODO(jmcarp) Reintroduce year filter pending accurate `load_date` and `expire_date` values if kwargs.get('cycle'): query = query.filter(models.Candidate.cycles.overlap(kwargs['cycle'])) return query
def get_committees(self, kwargs): committees = models.Committee.query if kwargs['candidate_id']: committees = committees.filter( models.Committee.candidate_ids.overlap(kwargs['candidate_id']) ) if kwargs.get('q'): committees = utils.search_text( committees.join( models.CommitteeSearch, models.Committee.committee_id == models.CommitteeSearch.id, ), models.CommitteeSearch.fulltxt, kwargs['q'], ) if kwargs.get('name'): committees = committees.filter(models.Committee.name.ilike('%{}%'.format(kwargs['name']))) committees = filter_query(models.Committee, committees, list_filter_fields, kwargs) if kwargs['year']: committees = filter_year(models.Committee, committees, kwargs['year']) if kwargs['cycle']: committees = committees.filter(models.Committee.cycles.overlap(kwargs['cycle'])) return committees
def build_query(self, **kwargs): query = super().build_query(**kwargs) if {'receipts', '-receipts'}.intersection(kwargs.get( 'sort', [])) and 'q' not in kwargs: raise exceptions.ApiError( 'Cannot sort on receipts when parameter "q" is not set', status_code=422, ) if kwargs.get('q'): query = utils.search_text( query.join( models.CandidateSearch, models.Candidate.candidate_id == models.CandidateSearch.id, ), models.CandidateSearch.fulltxt, kwargs['q'], ).distinct() if kwargs.get('name'): query = query.filter( models.Candidate.name.ilike('%{}%'.format(kwargs['name']))) # TODO(jmcarp) Reintroduce year filter pending accurate `load_date` and `expire_date` values if kwargs.get('cycle'): query = query.filter( models.Candidate.cycles.overlap(kwargs['cycle'])) return query
def filter_fulltext(self, query, kwargs): for key, column in self.filter_fulltext_fields: if kwargs.get(key): query = utils.search_text(query, column, kwargs[key], order=False) return query
def build_query(self, **kwargs): query = super().build_query(**kwargs) if {'receipts', '-receipts'}.intersection(kwargs.get('sort', [])) and 'q' not in kwargs: raise exceptions.ApiError( 'Cannot sort on receipts when parameter "q" is not set', status_code=422, ) if kwargs.get('candidate_id'): query = query.filter( models.Committee.candidate_ids.overlap(kwargs['candidate_id']) ) if kwargs.get('q'): query = utils.search_text( query.join( models.CommitteeSearch, models.Committee.committee_id == models.CommitteeSearch.id, ), models.CommitteeSearch.fulltxt, kwargs['q'], ).distinct() if kwargs.get('treasurer_name'): query = utils.search_text( query, models.Committee.treasurer_text, kwargs['treasurer_name'], ) if kwargs.get('name'): query = query.filter(models.Committee.name.ilike('%{}%'.format(kwargs['name']))) if kwargs.get('year'): query = filter_year(models.Committee, query, kwargs['year']) if kwargs.get('cycle'): query = query.filter(models.Committee.cycles.overlap(kwargs['cycle'])) return query
def get_candidates(self, kwargs): candidates = self.query if kwargs.get("q"): candidates = utils.search_text( candidates.join(models.CandidateSearch, models.Candidate.candidate_id == models.CandidateSearch.id), models.CandidateSearch.fulltxt, kwargs["q"], ).distinct() candidates = filter_query(models.Candidate, candidates, filter_fields, kwargs) if kwargs.get("name"): candidates = candidates.filter(models.Candidate.name.ilike("%{}%".format(kwargs["name"]))) # TODO(jmcarp) Reintroduce year filter pending accurate `load_date` and `expire_date` values if kwargs.get("cycle"): candidates = candidates.filter(models.Candidate.cycles.overlap(kwargs["cycle"])) return candidates
def get_candidates(self, kwargs): candidates = self.query if kwargs.get('q'): candidates = utils.search_text( candidates.join( models.CandidateSearch, models.Candidate.candidate_id == models.CandidateSearch.id, ), models.CandidateSearch.fulltxt, kwargs['q'], ) candidates = filter_query(models.Candidate, candidates, filter_fields, kwargs) if kwargs.get('name'): candidates = candidates.filter(models.Candidate.name.ilike('%{}%'.format(kwargs['name']))) # TODO(jmcarp) Reintroduce year filter pending accurate `load_date` and `expire_date` values if kwargs['cycle']: candidates = candidates.filter(models.Candidate.cycles.overlap(kwargs['cycle'])) return candidates
def search_typeahead_text(model, text): query = utils.search_text(model.query, model.fulltxt, text) query = query.limit(20) return {'results': query.all()}
def search_typeahead_text(model, text): query = utils.search_text(model.query, model.fulltxt, text) query = query.limit(20) return {"results": query.all()}
def search_typeahead_text(model, text, order_by): query = utils.search_text(model.query, model.fulltxt, text) query = query.order_by(order_by) query = query.limit(20) return {'results': query.all()}