def _date_time_filter(query: peewee.Query, attr, value: str): if '-' in value: start, end = value.split('-') # TODO: Add normalization for shorter value return query.where((attr >= start) & (attr <= end)) return query.where(attr == value)
def paginate(query: Query) -> Query: """分页查询""" page, per_page = map(request.args.get, ['page', 'per_page']) try: page = int(page) if page else 0 per_page = int(per_page) if per_page else 0 except ValueError: pass else: if page > 0: if per_page > 0: return query.paginate(page, per_page) else: return query.paginate(page) return query
def paginate(query: Query, page: Optional[int] = None, size: Optional[int] = None) -> Pagination: """Create pagination object using sane defaults. :param query: query to paginate results :type query: peewee.Query :param page: page number, will be fetched from request if omitted, defaults to None :type page: Optional[int], optional :param size: page size, defaults to None :type size: Optional[int], optional :return: pagination object for query :rtype: Pagination """ if page is None: page = get_page() if size is None: size = current_app.config.get('LIST_SIZE', 20) q = query.paginate(page, size) return Pagination(page, size, query.count(), q)
def _add_vote_exclusions(query: peewee.Query, exclusion: Optional[SkipVotedOn]) -> peewee.Query: if not exclusion: return query if exclusion.by == SkipVotedType.DEVICE_ID: criteria = AnnotationVote.device_id == exclusion.id elif exclusion.by == SkipVotedType.USERNAME: criteria = AnnotationVote.username == exclusion.id else: raise ValueError("Unknown SkipVoteType: {exclusion.by}") return query.join( AnnotationVote, join_type=peewee.JOIN.LEFT_OUTER, on=((AnnotationVote.insight_id == ProductInsight.id) & (criteria)), ).where(AnnotationVote.id.is_null())
def data_frame_from_peewee_query(query: peewee.Query) -> pandas.DataFrame: connection = query._database.connection() # noqa sql, params = query.sql() return pandas.read_sql_query(sql=sql, con=connection, params=params)
def _text_filter(query: peewee.Query, attr, value: str): if isinstance(value, list): return query.where(attr << value) value = value.replace('?', '_') value = value.replace('*', '%') return query.where(attr**value)
def query(self, query: pw.Query, column: pw.Field, *ops: t.Tuple, **_) -> pw.Query: """Apply the filters to Peewee QuerySet..""" _, value = ops[0] return query.where(column.contains(value)) # type: ignore