Exemplo n.º 1
0
def paginate(query: BaseQuery, schema: Schema) -> dict:
    if not request.endpoint:
        raise Exception("Cannot paginate outside of request context.")

    page = request.args.get("page", DEFAULT_PAGE_NUMBER)
    per_page = request.args.get("page_size", DEFAULT_PAGE_SIZE)
    page_obj = query.paginate(page=page, per_page=per_page)
    next_ = url_for(
        request.endpoint,
        page=page_obj.next_num if page_obj.has_next else page_obj.page,
        per_page=per_page,
        **request.view_args)
    prev = url_for(
        request.endpoint,
        page=page_obj.prev_num if page_obj.has_prev else page_obj.page,
        per_page=per_page,
        **request.view_args)

    return {
        "total": page_obj.total,
        "pages": page_obj.pages,
        "next": next_,
        "prev": prev,
        "results": schema.dump(page_obj.items),
    }
Exemplo n.º 2
0
    def get_pagination(query: BaseQuery) -> Tuple[list, dict]:
        page = request.args.get("page", 1, type=int)
        limit = request.args.get("limit",
                                 current_app.config.get("PER_PAGE", 5),
                                 type=int)
        params = {k: v for k, v in request.args.items() if k != "page"}
        paginate_object = query.paginate(page, limit, False)
        pagination = {
            "total_pages":
            paginate_object.pages,
            "total_records":
            paginate_object.total,
            "current_page":
            url_for("api.users_api.get_users_info", page=page, **params),
        }

        if paginate_object.has_next:
            pagination["next_page"] = url_for("api.users_api.get_users_info",
                                              page=page + 1,
                                              **params)

        if paginate_object.has_prev:
            pagination["previous_page"] = url_for(
                "api.users_api.get_users_info", page=page - 1, **params)

        return paginate_object.items, pagination
Exemplo n.º 3
0
def get_pagination(query: BaseQuery, func_name: str) -> Tuple[list, dict]:
    """
    Functionality of paginating response, returns modified query
    page - page number to return
    limit - number of items in one page to return
    """
    page = request.args.get("page", 1, type=int)
    limit = request.args.get("limit",
                             current_app.config.get("PER_PAGE", 5),
                             type=int)
    params = {
        key: value
        for key, value in request.args.items() if key != "page"
    }
    paginate_obj = query.paginate(page, limit, False)

    pagination = {
        "total_pages": paginate_obj.pages,
        "total_records": paginate_obj.total,
        "current_page": url_for(func_name, page=page, **params),
    }

    if paginate_obj.has_next:
        pagination["next_page"] = url_for(func_name, page=page + 1, **params)
    if paginate_obj.has_prev:
        pagination["previous_page"] = url_for(func_name,
                                              page=page - 1,
                                              **params)

    return paginate_obj.items, pagination
def get_pagination(query: BaseQuery, func_name: str) -> Tuple[list, dict]:
    page = request.args.get('page', 1, type=int)
    limit = request.args.get('limit',
                             current_app.config.get('PER_PAGE', 5),
                             type=int)
    params = {
        key: value
        for key, value in request.args.items() if key != 'page'
    }
    paginate_obj = query.paginate(page, limit, False)
    pagination = {
        'total_pages': paginate_obj.pages,
        'total_records': paginate_obj.total,
        'current_pages': url_for(func_name, page=page, **params)
    }

    if paginate_obj.has_next:
        pagination['next_page'] = url_for(func_name, page=page + 1, **params)

    if paginate_obj.has_prev:
        pagination['previous_page'] = url_for(func_name,
                                              page=page - 1,
                                              **params)

    return paginate_obj.items, pagination
Exemplo n.º 5
0
	def paginate(self, page=None, per_page=None, error_out=True, max_per_page=None):
		paginate = BaseQuery.paginate(self, page=page, per_page=per_page, error_out=error_out, max_per_page=max_per_page)
		return Pagination(self,
						  paginate.page,
						  paginate.per_page,
						  paginate.total,
						  paginate.items
						  )
Exemplo n.º 6
0
def paginate_query(query, page, per_page, **kwargs):
    ret_page = BaseQuery.paginate(query, page, per_page, **kwargs)
    if ret_page.has_prev:
        ret_page.prev_link = "{}?{}".format(
            request.base_url, urlencode({'page': ret_page.prev_num, 'per_page': ret_page.per_page}))
    if ret_page.has_next:
        ret_page.next_link = "{}?{}".format(
            request.base_url, urlencode({'page': ret_page.next_num, 'per_page': ret_page.per_page}))
    return ret_page
    def get_limited_query(self, query: BaseQuery, **kwargs) -> Union[Pagination, BaseQuery]:
        """Apply pagination limits on query"""
        per_page = int(kwargs.get('page_size', API_DEFAULT_PAGE_SIZE))
        page = int(kwargs.get('page', 1))

        if page < 0 or per_page < 1:
            raise ProblemException(
                title='Invalid paging parameters', detail='page and page_size should be greater than 0')

        return query.paginate(page=page or 1, per_page=per_page, error_out=False)
    def __init__(self, collection: BaseQuery, page_params: PaginationParameters):
        """Create a Page instance

        :param sequence collection: base_query
        :page PaginationParameters page_params: Pagination parameters
        """
        # 使用 flask_sqlalchemy 提供的 分页函数进行分页
        self.pagination = collection.paginate(page=page_params.page,
                                              per_page=page_params.page_size)

        super().__init__(collection, page_params)
Exemplo n.º 9
0
 def paginate(self,
              page=None,
              per_page=None,
              error_out=True,
              max_per_page=None):
     # 使用paginator记的加上filter_by,用于默认添加status=1
     paginator = BaseQuery.paginate(self,
                                    page=page,
                                    per_page=per_page,
                                    error_out=error_out,
                                    max_per_page=max_per_page)
     return Pagination(self, paginator.page, paginator.per_page,
                       paginator.total, paginator.items)
Exemplo n.º 10
0
 def __init__(
     self,
     member_class: Type[T],
     query: BaseQuery,
     per_page: int,
     page: int,
     joined_relations: List[str] = None,
     pagination: Pagination = None,
 ) -> None:
     self.type = member_class
     self.joined_relations = joined_relations
     if pagination:
         self.pagination = pagination
     else:
         self.pagination = query.paginate(per_page=per_page, page=page)
Exemplo n.º 11
0
def ql_so_luong_ton(page):
    if not current_user.is_authenticated or current_user.ma_loai_nguoi_dung != 2:
        return redirect(url_for('log_in', next=request.url))
    form = Form_tim_kiem()
    query = BaseQuery(San_pham, dbSession)
    page_filter = query.paginate(page,5,False)
    if form.validate_on_submit():
        tim_kiem = form.noi_dung.data
        if tim_kiem.isdigit():
            page_filter = query.filter(San_pham.ma_san_pham == int(tim_kiem)).paginate(page,5,False)
        else:
            chuoi_truy_van = '%'+tim_kiem.upper()+'%'
            page_filter = query.filter(San_pham.ten_san_pham.like(chuoi_truy_van)).paginate(page,5,False)
        if len(page_filter.items) == 0:
            thong_bao = 'Không tìm thấy sản phẩm!'
    
    return render_template('Quan_ly/QL_kho_hang/Ton_kho.html', form=form, page_filter = page_filter)
Exemplo n.º 12
0
def force_pagination(query: BaseQuery, order=None):
    query = query.order_by(order if order is not None else desc('id'))
    page = int(request.values.get('page', 1))
    per_page = int(request.values.get('per_page', FETCH_LIMIT))
    pagination = query.paginate(page, per_page,
                                error_out=False)  # type: Pagination
    return jsonify({
        'rows': [instance.to_json() for instance in pagination.items],
        'max_page':
        pagination.pages,
        'curr_page':
        pagination.page,
        'next_page':
        pagination.next_num,
        'prev_page':
        pagination.prev_num,
    })
Exemplo n.º 13
0
def paginate(
    query: flask_sqlalchemy.BaseQuery, schema: BaseSchema
) -> Dict[str, Union[int, Dict[str, Union[int, str]], str, None]]:
    """Return paginated BaseQuery result."""
    page = int(request.args.get("page", app.config["DEFAULT_PAGE_NUMBER"]))
    per_page = int(
        request.args.get("page_size", app.config["DEFAULT_PAGE_SIZE"]))

    page_obj = query.paginate(page=page, per_page=per_page)

    sort_args = {
        "sort_by": request.args.get("sort_by"),
        "order_by": request.args.get("order_by"),
    }

    if page_obj.has_next:
        next_page: Optional[str] = url_for(
            request.endpoint,  # type: ignore
            page=page_obj.next_num,
            per_page=per_page,
            **request.view_args,
            **sort_args)
    else:
        next_page = None

    if page_obj.has_prev:
        prev_page: Optional[str] = url_for(
            request.endpoint,  # type: ignore
            page=page_obj.prev_num,
            per_page=per_page,
            **request.view_args,
            **sort_args)
    else:
        prev_page = None

    return {
        "count": page_obj.total,
        "pages": page_obj.pages,
        "next": next_page,
        "prev": prev_page,
        "results": schema.dump(page_obj.items, many=True),
    }
Exemplo n.º 14
0
def ql_don_hang_tao_don_moi_detail(ma_hd,page=1):
    if not current_user.is_authenticated or current_user.ma_loai_nguoi_dung != 2:
        return redirect(url_for('log_in', next=request.url))
    form = Form_tim_kiem_nhap_hang()
    hoa_don = dbSession.query(Hoa_don).filter(Hoa_don.ma_hoa_don == ma_hd).first()
    don_hang = dbSession.query(Don_hang).filter(Don_hang.ma_hoa_don == ma_hd).all()
    query = BaseQuery(San_pham, dbSession)
    page_filter = query.paginate(page,10,False)
    thong_bao = ''
    if form.validate_on_submit() and form.noi_dung.data != '':
        ten_sp = form.noi_dung.data.strip().lower()
        if ten_sp.isdigit():
            page_filter = query.filter_by(ma_san_pham = int(ten_sp)).paginate(page,10,False)
        else:
            page_filter = query.filter_by(ten_san_pham = ten_sp).paginate(page,10,False)
        
        if len(page_filter.items) == 0:
            thong_bao = 'Không tìm thấy sản phẩm!'
    
    return render_template('Quan_ly/QL_don_hang/Chi_tiet_don_hang.html',don_hang = don_hang, thong_bao = thong_bao, page_filter = page_filter, form = form, hoa_don = hoa_don)
Exemplo n.º 15
0
def paginate(query: BaseQuery, page: int = 1, rows_per_page: int = 1):

    pagination = query.paginate(page=page,
                                per_page=rows_per_page,
                                error_out=False)

    data = pagination.items

    output = {
        "pagination": {
            "pages_count": pagination.pages,
            "itens_count": pagination.total,
            "itens_per_page": rows_per_page,
            "prev": pagination.prev_num,
            "next": pagination.next_num,
            "current": pagination.page,
        },
        "itens": [],
        "error": False,
    }

    return data, output
Exemplo n.º 16
0
    def __init__(self, query: BaseQuery, page_param: str = 'page') -> None:
        """
            Initialize the pagination object.

            The current page will be determined from the page parameter in the request arguments. If the page parameter
            is not included in the request arguments, the current page defaults to `1`.

            :param query: The base query that will be paginated.
            :param page_param: The name of the page parameter specifying the current page. Defaults to `page`.
        """

        # Get the current page from the request arguments.
        try:
            self.current_page = request.args.get(page_param, 1, type=int)
        except TypeError:
            # In tests, the above call fails because get does not take keyword arguments - it does however work outside
            # of requests. Thus, fall back to this manual conversion.
            self.current_page = int(request.args.get(page_param, 1))

        application = get_app()
        self.rows_per_page = application.config['ITEMS_PER_PAGE']

        self._rows = query.paginate(self.current_page, self.rows_per_page)
Exemplo n.º 17
0
    def __init__(self, query: BaseQuery, page_param: str = 'page') -> None:
        """
            The current page will be determined from the page parameter in the request arguments. If the page parameter
            is not included in the request arguments, the current page defaults to `1`.

            :param query: The base query that will be paginated.
            :param page_param: The name of the page parameter specifying the current page. Defaults to ``page``.
        """

        self.current_page: int
        self.rows_per_page: int

        # Get the current page from the request arguments.
        try:
            self.current_page = request.args.get(page_param, 1, type=int)
        except TypeError:
            # In tests, the above call fails because get does not take keyword arguments - it does however work outside
            # of requests. Thus, fall back to this manual conversion.
            self.current_page = int(request.args.get(page_param, 1))

        application = get_app()
        self.rows_per_page = application.config['ITEMS_PER_PAGE']

        self._rows = query.paginate(self.current_page, self.rows_per_page)
Exemplo n.º 18
0
def paginate(query: BaseQuery, page_num: int = 1, page_size: int = 10):
    query_slice = query.paginate(int(page_num), int(page_size))
    result = dict()
    result.update(data=query_slice.items, has_previous=query_slice.has_prev, has_next=query_slice.has_next)
    return result