Esempio n. 1
0
 def apply_pagination(self, query: Query, page: Optional[int],
                      page_size: Optional[int]) -> Query:
     if page and page_size:
         query = query.offset(page * page_size)
     if page_size:
         query = query.limit(page_size)
     return query
Esempio n. 2
0
    def _filter_multi_query(
            self, query: Query,
            filtration: schemas.FilterData) -> tuple[int, list[ModelType]]:
        for col_name, (filter_type, filter_value) in filtration.data.items():
            column = getattr(self.model, col_name)
            if filter_type == schemas.FilterType.VALUE:
                query = query.filter(column == filter_value)
            elif filter_type == schemas.FilterType.DATETIME:
                start_date, end_date = filter_value
                if start_date is not None:
                    query = query.filter(column >= filter_value)
                if end_date is not None:
                    query = query.filter(column <= filter_value)
            elif filter_type == schemas.FilterType.ENUM:
                query = query.filter(column in filter_value)

        query = query.order_by(
            self.model.created if filtration.sort is None else
            getattr(self.model, filtration.sort.column
                    ) if filtration.sort.direction != schemas.SortType.
            ASC else getattr(self.model, filtration.sort.column).desc())

        return (
            query.count(),
            query.offset(filtration.offset).limit(filtration.limit).all(),
        )
Esempio n. 3
0
 def offset(self, offset):
     return Query.offset(self.private(), offset)
Esempio n. 4
0
 def offset(self, offset):
     return Query.offset(self.private(), offset)