Beispiel #1
0
def index(path='/'):
    if path=='favicon.ico':
        return redirect('https://www.baidu.com/favicon.ico')
    code=request.args.get('code')
    page=request.args.get('page',1,type=int)
    password=has_password(path)
    md5_p=md5(path)
    if request.method=="POST":
        password1=request.form.get('password')
        if password1==password:
            resp=make_response(redirect(url_for('.index',path=path)))
            resp.delete_cookie(md5_p)
            resp.set_cookie(md5_p,password)
            return resp
    if password!=False:
        if not request.cookies.get(md5_p) or request.cookies.get(md5_p)!=password:
            return render_template('password.html',path=path)
    if code is not None:
        Atoken=OAuth(code)
        if Atoken.get('access_token'):
            with open('data/Atoken.json','w') as f:
                json.dump(Atoken,f,ensure_ascii=False)
            app_url=GetAppUrl()
            refresh_token=Atoken.get('refresh_token')
            with open('data/AppUrl','w') as f:
                f.write(app_url)
            token=ReFreshToken(refresh_token)
            with open('data/token.json','w') as f:
                json.dump(token,f,ensure_ascii=False)
            return make_response('<h1>授权成功!<a href="/">点击进入首页</a></h1>')
        else:
            return jsonify(Atoken)
    else:
        if items.count()==0:
            if not os.path.exists('data/token.json'):
                return make_response('<h1><a href="{}">点击授权账号</a></h1>'.format(LoginUrl))
            else:
                subprocess.Popen('python function.py UpdateFile',shell=True)
                return make_response('<h1>正在更新数据!</h1>')
        if request.args.get('image_mode'):
            image_mode=request.args.get('image_mode',type=int)
            resp,total = FetchData(path,page)
            pagination=Pagination(query=None,page=page, per_page=50, total=total, items=None)
            resp=make_response(render_template('index.html',pagination=pagination,items=resp,path=path,image_mode=image_mode,endpoint='.index'))
            resp.set_cookie('image_mode',str(image_mode))
        else:
            image_mode=request.cookies.get('image_mode') if request.cookies.get('image_mode') is not None else 0
            image_mode=int(image_mode)
            resp,total = FetchData(path,page)
            pagination=Pagination(query=None,page=page, per_page=50, total=total, items=None)
            resp=make_response(render_template('index.html',pagination=pagination,items=resp,path=path,image_mode=image_mode,endpoint='.index'))
            resp.set_cookie('image_mode',str(image_mode))
        return resp
Beispiel #2
0
    def users_search_with_pagination(self,
                                     username_hint,
                                     fav_only,
                                     hidden,
                                     current_page=1,
                                     per_page=20,
                                     sort_type='alphabetical'):
        """
        Search users with defined parameters and return them as a SearchResults object which contains a Pagination object.
        :param current_user The user who made the research
        :param username_hint: A hint gave by the user to search similar usernames
        :param fav_only: containing "True" to show only bookmarked users else None
        :param hidden: containing "True" to show hidden users else None
        :param current_page: The current page number
        :param per_page: The number of users shown on a search results page
        :param sort_type: The sort type to use, using the ResultsSortType class constants
        :return: A SearchResults with a Pagination object.
        """
        results = self.users_search(username_hint, fav_only, hidden, sort_type)
        page_elements = results.items.slice(
            (current_page - 1) * per_page, current_page *
            per_page)  # the users that will be displayed on the page
        results.pagination = Pagination(None, current_page, per_page,
                                        results.items.count(), page_elements)
        results.items = None

        return results
def render_question_answer():
    Question = models.Question
    try:
        number = int(request.args.get('page') or 1)
    except ValueError:
        number = 1

    if number < 1:
        abort(404)

    try:
        page = models.Page.get_by_label('question-answer')
    except NoResultFound:
        abort(404)

    total = db.session.query(Question.id).count()
    questions = (
        db.session.query(Question)
                  .order_by(Question.id.desc())
                  .limit(QUESTIONS_PER_PAGE)
                  .offset(QUESTIONS_PER_PAGE * (number - 1)).all()
    )
    if not questions and number != 1:
        abort(404)
    pagination = Pagination(None, number, QUESTIONS_PER_PAGE, total, items=questions)
    modified = (
        db.session.query(Question.date_modified)
                  .order_by(Question.date_modified.desc()).limit(1).scalar()
    )
    if modified and modified > page.date_modified:
        page.date_modified = modified
    return _generate_response('company/question-answer.html', page=page,
                              pagination=pagination)
Beispiel #4
0
def paginate(query: Query,
             page: int,
             per_page: int,
             *,
             item_mapper: Mapper = None) -> Pagination:
    """Return `per_page` items from page `page`."""
    if page < 1:
        page = 1

    if per_page < 1:
        raise ValueError('The number of items per page must be positive.')

    offset = (page - 1) * per_page

    items = query \
        .limit(per_page) \
        .offset(offset) \
        .all()

    item_count = len(items)
    if page == 1 and item_count < per_page:
        total = item_count
    else:
        total = query.order_by(None).count()

    if item_mapper is not None:
        items = [item_mapper(item) for item in items]

    # Intentionally pass no query object.
    return Pagination(None, page, per_page, total, items)
Beispiel #5
0
    def read_all_formats(self, identity):
        """Read available metadata formats."""
        self.require_permission(identity, 'read_format')
        formats = [{
            "id": k,
            "schema": v.get("schema", None),
            "namespace": v.get("namespace", None),
        } for k, v in current_app.config.get(
            'OAISERVER_METADATA_FORMATS').items()]

        results = Pagination(
            query=None,
            page=1,
            per_page=None,
            total=len(formats),
            items=formats,
        )

        return self.config.metadata_format_result_list_cls(
            self,
            identity,
            results,
            schema=ServiceSchemaWrapper(
                self, schema=self.config.metadata_format_schema),
        )
Beispiel #6
0
def manage():
    if request.method=='POST':
        pass
    path=urllib.unquote(request.args.get('path','A:/'))
    user,n_path=path.split(':')
    if n_path=='':
        path=':'.join([user,'/'])
    page=request.args.get('page',1,type=int)
    image_mode=request.args.get('image_mode')
    sortby=request.args.get('sortby')
    order=request.args.get('order')
    if sortby:
        sortby=request.args.get('sortby')
    else:
        sortby=request.cookies.get('admin_sortby') if request.cookies.get('admin_sortby') is not None else 'lastModtime'
        sortby=sortby
    if order:
        order=request.args.get('order')
    else:
        order=request.cookies.get('admin_order') if request.cookies.get('admin_order') is not None else 'desc'
        order=order
    resp,total = FetchData(path=path,page=page,per_page=50,sortby=sortby,order=order)
    pagination=Pagination(query=None,page=page, per_page=50, total=total, items=None)
    if path.split(':',1)[-1]=='/':
        path=':'.join([path.split(':',1)[0],''])
    resp=make_response(render_template('admin/manage.html',pagination=pagination,items=resp,path=path,sortby=sortby,order=order,cur_user=user,endpoint='admin.manage'))
    resp.set_cookie('admin_sortby',str(sortby))
    resp.set_cookie('admin_order',str(order))
    return resp
Beispiel #7
0
    def test_jsonify_paginate(self):
        """Testing the jsonify_paginate method"""

        with app.app_context():
            items = []

            for index in range(12):
                item = Category(name=str(index))

                items.append(item)

            page = Pagination(query=None,
                              page=1,
                              per_page=12,
                              total=30,
                              items=items)

            resp = jsonify_paginate(page)

            self.assertEqual(resp.status_code, 200)
            self.assertEqual(resp.is_json, True)

            data = resp.get_json()

            self.assertEqual(data["page"], 1)
            self.assertEqual(data["pages"], 3)
            self.assertEqual(data["per_page"], 12)
            self.assertEqual(data["total"], 30)
            self.assertEqual(len(data["items"]), 12)
Beispiel #8
0
def index(page=1, page_size=20):
    """评论列表"""
    g.page_title = _(u'商品评价')

    args = request.args
    goods_id = toint(args.get('goods_id', '0'))
    add_time_daterange = args.get('add_time_daterange', '').strip()

    q = db.session.query(Comment.comment_id, Comment.uid, Comment.nickname, Comment.avatar,
                            Comment.rating, Comment.content, Comment.img_data, Comment.add_time,
                            Goods.goods_id, Goods.goods_name, Goods.goods_img).\
                        filter(Comment.tid == Goods.goods_id).\
                        filter(Comment.ttype == 1).\
                        filter(Comment.is_show == 1)

    if goods_id > 0:
        q = q.filter(Comment.tid == goods_id)

    if add_time_daterange:
        start, end = date_range(add_time_daterange)
        q = q.filter(Comment.add_time >= start).filter(Comment.add_time < end)

    comments = q.order_by(Comment.comment_id.desc()).offset(
        (page - 1) * page_size).limit(page_size).all()
    pagination = Pagination(None, page, page_size, q.count(), None)

    return render_template('admin/comment/index.html.j2',
                           pagination=pagination,
                           comments=comments)
Beispiel #9
0
def admin_users(page):
    if request.method == 'POST':
        if 'submit' in request.form:
            command = request.form['submit'].split('-')[0]
            email = request.form['submit'].split('-')[1]
            if command == 'disable':
                User.query.filter_by(email=email).first().is_live = False
                db.session.commit()
            elif command == 'enable':
                User.query.filter_by(email=email).first().is_live = True
                db.session.commit()

    query = User.query.all
    count = len(query())
    users = utilities.get_items_for_page(query, page)
    table_header = [
        'ID', 'Name', 'Email Address', 'Role', 'Is Live?', 'Enable/Disable'
    ]
    table_data = [[
        str(user.id), user.name, user.email, user.role.name, user.is_live
    ] for user in users]
    if not users and page != 1:
        abort(404)
    pagination = Pagination(query(), page, app.config['PER_PAGE'], count,
                            users)
    return render_template('admin_users.html',
                           user=current_user.name,
                           user_role=current_user.role.name,
                           all_users_header=table_header,
                           all_users_list=table_data,
                           pagination=pagination)
Beispiel #10
0
 def get(self, time_range):
     if time_range not in ["week", "month"]:
         return error(ErrorCode.INVALID_PARAMS, 400)
     parser = reqparse.RequestParser()
     parser.add_argument("page",
                         default=1,
                         type=inputs.positive,
                         location="args")
     parser.add_argument("per_page",
                         default=20,
                         type=inputs.positive,
                         location="args")
     args = parser.parse_args()
     if time_range == "week":
         days = 7
     else:
         days = 30
     movie_ids, total = get_rank_movie_ids_with_range(
         days, args.page, args.per_page)
     movies = MovieModel.query.filter(MovieModel.id.in_(movie_ids)).all()
     pagination = Pagination("", args.page, args.per_page, total, movies)
     p = get_item_pagination(pagination,
                             "api.LeaderBoard",
                             time_range=time_range)
     return ok(
         "ok",
         data=marshal(
             p,
             get_pagination_resource_fields(movie_summary_resource_fields)),
     )
Beispiel #11
0
def index(page=1, page_size=20):
    """优惠券列表"""
    g.page_title = _(u'优惠券')

    args = request.args
    tab_status = toint(args.get('tab_status', '0'))
    cb_name = args.get('cb_name', '').strip()
    current_time = current_timestamp()

    q = CouponBatch.query

    if tab_status == 1:
        q = q.filter(CouponBatch.is_valid == 1).\
                filter(or_(CouponBatch.begin_time == 0, CouponBatch.begin_time <= current_time)).\
                filter(or_(CouponBatch.end_time == 0, CouponBatch.end_time >= current_time))
    elif tab_status == 2:
        q = q.filter(
            and_(CouponBatch.end_time > 0,
                 CouponBatch.end_time < current_time))

    if cb_name:
        q = q.filter(CouponBatch.cb_name.like('%%%s%%' % cb_name))

    batches = q.order_by(CouponBatch.cb_id.desc()).offset(
        (page - 1) * page_size).limit(page_size).all()
    pagination = Pagination(None, page, page_size, q.count(), None)

    return render_template('admin/coupon/index.html.j2',
                           pagination=pagination,
                           batches=batches)
Beispiel #12
0
def statistics_event():
    position = request.args.get('position')
    page = int(request.args.get('page', 1))
    size = int(request.args.get('size', 20))
    unique = int(request.args.get('unique', 0))

    start_time, end_time = _parse_start_end_time()

    query = Event.query.filter(Event.company_id == g.user.company_id,
                               Event.timestamp > start_time,
                               Event.timestamp <= end_time)
    if position:
        screen = Screen.query.filter_by(camera_position=position).first()
        if screen is None:
            return error_result(ErrorCode.ERROR_SCREEN_NOT_EXIST)
        query = query.filter(Event.screen_id == screen.id)

    events = query.order_by(Event.timestamp.desc()).all()

    result = [
        event.get_json()
        for event in _filter_events(events, unique=bool(unique))
    ]
    page_info = page_format(Pagination(None, page, size, len(result), None))
    result = result[(page - 1) * size:page * size]

    return success_result(result, page_info)
Beispiel #13
0
    def new_search(cls, query, page, order_by=None, per_page=PER_PAGE):
        """用于在搜索栏搜搜, query是输入的搜索内容, 字符串"""
        s = cls.search()
        # multi_match: 多个字段匹配, SEARCH_FIELDS设置了字段权重
        s = s.query('multi_match', query=query, fields=SEARCH_FIELDS)

        if page < 1:
            page = 1
        start = (page - 1) * PER_PAGE
        s = s.extra(**{'from': start, 'size': per_page})
        if order_by is not None:
            s = s.sort(order_by)
        rs = s.execute()
        dct = defaultdict(list)
        # 这里考虑了多种kind的情况, 不过我们目前只会用到Post
        for i in rs:
            dct[i.kind].append(i.id)

        items = []

        for kind, ids in dct.items():
            target_cls = TARGET_MAPPER.get(kind)
            # 最终还是依靠orm来获取数据
            if target_cls:
                items_ = target_cls.get_multi(ids)
                items.extend(items_)

        return Pagination(query, page, per_page, rs.hits.total, items)
Beispiel #14
0
    def paginate_faste(self,
                       page=1,
                       per_page=50,
                       max_page=None,
                       step=5,
                       count_query=None):
        if page < 1:
            abort(404)

        if max_page and page > max_page:
            abort(404)

        # Count all items
        if count_query is not None:
            total_query_count = count_query.scalar()
        else:
            total_query_count = self.count()

        # Grab items on current page
        items = self.limit(per_page).offset((page - 1) * per_page).all()

        if not items and page != 1:
            abort(404)

        return Pagination(self, page, per_page, total_query_count, items)
Beispiel #15
0
    def sessions_search_with_pagination(self,
                                        sessions_hint,
                                        typ,
                                        search_parameter,
                                        page=1,
                                        per_page=20,
                                        sort_type='mostRecent'):
        """
        Search sessions with defined parameters and return them as a SearchResults object which contains a Pagination object.
        :param current_user The user who made the research
        :param sessions_hint: A hint gave by the user to search various sessions
        :param typ: str containing the type of sessions_hint (search filter)
        :param search_parameter: str containing the name of the search container
        :param current_page: The current page number
        :param per_page: The number of users shown on a search results page
        :return: A SearchResults with a Pagination object.
        """
        results = self.sessions_search(sessions_hint, typ, search_parameter,
                                       sort_type)

        page_elements = results.items.slice(
            (page - 1) * per_page,
            page * per_page)  # the sessions that will be displayed on the page
        results.pagination = Pagination(None, page, per_page,
                                        results.items.count(), page_elements)
        results.items = None

        return results
Beispiel #16
0
def find(key_word):
    page = request.args.get('page', 1, type=int)
    image_mode = request.args.get('image_mode')
    sortby = request.args.get('sortby')
    order = request.args.get('order')
    action = request.args.get('action', 'download')
    resp, total = FetchData(path=key_word,
                            page=page,
                            per_page=50,
                            sortby=sortby,
                            order=order,
                            dismiss=True,
                            search_mode=True)
    pagination = Pagination(query=None,
                            page=page,
                            per_page=50,
                            total=total,
                            items=None)
    resp = make_response(
        render_template('theme/{}/find.html'.format(GetConfig('theme')),
                        pagination=pagination,
                        items=resp,
                        path='/',
                        sortby=sortby,
                        order=order,
                        key_word=key_word,
                        cur_user='******'.format(key_word),
                        endpoint='.find'))
    resp.set_cookie('image_mode', str(image_mode))
    resp.set_cookie('sortby', str(sortby))
    resp.set_cookie('order', str(order))
    return resp
Beispiel #17
0
def optimised_pagination(query, per_page, page):
    """ A more efficient pagination for SQLAlchemy
    Fetch one item before offset (to know if there's a previous page)
    Fetch one item after limit (to know if there's a next page)
    The trade-off is that the total items are not available, but if you don't need them
    there's no need for an extra COUNT query
    """
    offset_start = (page - 1) * per_page

    query_offset = max(offset_start - 1, 0)
    optimistic_items = query.limit(per_page + 1).offset(query_offset).all()
    if page == 1:
        if len(optimistic_items) == per_page + 1:
            # On first page, there's no optimistic item for previous page
            items = optimistic_items[:-1]
        else:
            # The number of items on the first page is fewer than per_page
            items = optimistic_items
    elif len(optimistic_items) == per_page + 2:
        # We fetched an extra item on both ends
        items = optimistic_items[1:-1]
    else:
        # An extra item only on the head
        # This is the last page
        items = optimistic_items[1:]
    # This total is at least the number of items for the query, could be more
    total = offset_start + len(optimistic_items)
    return Pagination(query, page, per_page, total, items)
Beispiel #18
0
def UploadRPCserver():
    action = request.form.get('action')
    page = request.form.get('page', 1, type=int)
    if action == 'pagination':
        data = {'code': 1}
        total = get_upload_tasks_no()
        pagination = Pagination(query=None,
                                page=page,
                                per_page=50,
                                total=total,
                                items=None)
        data['page'] = page
        data['pages'] = pagination.pages
        page_lists = []
        for p in pagination.iter_pages():
            page_lists.append(p)
        data['page_lists'] = page_lists[::-1]
        data['has_prev'] = pagination.has_prev
        data['has_next'] = pagination.has_next
        return jsonify(data)
    elif action == 'ClearHist':
        mon_db.upload_queue.delete_many({})
        ret = {'msg': '清除成功!'}
        return jsonify(ret)
    elif action == 'Restart':
        cmd = 'python {}/function.py StartUploadQueue'.format(config_dir)
        subprocess.Popen(cmd, shell=True)
        ret = {'msg': '重启成功!'}
        return jsonify(ret)
    ret = get_upload_tasks(page)
    data = {'code': 1, 'result': ret}
    return jsonify(data)
def search_movie(search_text, page, per_page):
    sql = text('''
        WITH similar_words AS (
            SELECT string_agg(word, ' | ') AS words
            FROM (
                SELECT word
                FROM unique_lexeme
                WHERE word % '':keywords''
                ORDER BY word <-> '':keywords''
                LIMIT 2
            ) AS tab
        )
        SELECT id, count(*) OVER() AS full_count
        FROM search_view
        WHERE document @@ to_tsquery('english', (SELECT words FROM similar_words))
        ORDER BY ts_rank(document, to_tsquery('english', (SELECT words FROM similar_words))) DESC
        LIMIT :per_page
        OFFSET :offset_page
    ''')  # TODO consider in conditionally recounting because should get few items every time
    # TODO if there are only stop words, search them only in title (disable warnings)
    # TODO for each element of tsvector, we could get the similar word
    #      (e.g. "the prestige" query cannot find "Prestige, the")
    sql = sql.bindparams(keywords=search_text, per_page=per_page, offset_page=((page-1) * per_page))
    result = db.engine.execute(sql).fetchall()
    total_count = result[0][1] if len(result) > 0 else 0
    movies = [Movie.query.get(row[0]) for row in result]
    return Pagination(None, page, per_page, total_count, movies)
Beispiel #20
0
def qualifications(page):
    if request.method == 'POST':
        if 'submit' in request.form:
            command = request.form['submit'].split('-')[0]
            id = request.form['submit'].split('-')[1]
            if command == 'edit':
                redirect(url_for('qualifications'))
            elif command == 'delete':
                item = Qualification.query.filter_by(id=id).first()
                db.session.delete(item)
                db.session.commit()
    query = Qualification.query.order_by(Qualification.name,
                                         Qualification.year).all
    count = len(query())
    qualifications = utilities.get_items_for_page(query, page)
    table_header = [
        'ID', 'Name', 'Locale', 'Year', 'Number of Students', 'Actions'
    ]
    table_data = [[str(q.id), q.name, q.locale, q.year, q.num_students]
                  for q in qualifications]
    if not qualifications and page != 1:
        abort(404)
    pagination = Pagination(query(), page, app.config['PER_PAGE'], count,
                            qualifications)
    return render_template('data_display.html',
                           user=current_user.name,
                           user_role=current_user.role.name,
                           table_header=table_header,
                           table_data=table_data,
                           pagination=pagination)
Beispiel #21
0
def show_categories(page=1):
    per_page = request.args.get('per_page', 10, type=int)
    # 获取当前官网
    current_site = Site.current_site(master_uid=Master.master_uid())

    builder = Category.query.filter_by(site_id=current_site.id)

    total_count = builder.count()
    categories = Category.always_category(
        site_id=current_site.id,
        language_id=current_site.default_language,
        path=0,
        page=1,
        per_page=per_page)

    paginated_categories = []
    for cate in categories:
        category = {
            'id': cate.id,
            'name': cate.name,
            'icon': Asset.query.get(cate.icon_id) if cate.icon_id else None,
            'sort_order': cate.sort_order,
            'status': cate.status
        }
        paginated_categories.append(category)

    pagination = Pagination(query=None,
                            page=1,
                            per_page=per_page,
                            total=total_count,
                            items=None)

    return render_template('admin/categories/show_list.html',
                           paginated_categories=paginated_categories,
                           pagination=pagination)
Beispiel #22
0
    def new_search(cls, query, page, order_by=None, per_page=PER_PAGE):
        """
        创建一个查询实例,查询结果并分页返回,这里的query就是查询参数
        """
        s = cls.search()
        s = s.query('multi_match', query=query,
                    fields=SEARCH_FIELDS) # 设置搜索规则,SEARCH_FIELDS为匹配的权重

        if page < 1:
            page = 1
        start = (page - 1) * PER_PAGE
        s = s.extra(**{'from': start, 'size': per_page})
        if order_by is not None:
            s = s.sort(order_by)
        # 这里是rs是搜索的Response对象,结果存在hits中,可以迭代对象
        rs = s.execute()
        dct = defaultdict(list) # 使用标准库来创建字典,可以实现get不存在的key的时候,返回空list
        for i in rs:
            dct[i.kind].append(i.id) # 分类数据,(由于当前只有一种类型数据,即post,不是很明显)

        items = []

        for kind, ids in dct.items():
            target_cls = TARGET_MAPPER.get(kind) # 通过TARGET_MAPPER决定要操作的模型对象,上面已经通过kind进行分类了
            if target_cls:
                items_ = target_cls.get_multi(ids)
                items.extend(items_)

        return Pagination(query, page, per_page, rs.hits.total, items)
Beispiel #23
0
    def new_search(cls, query, page, order_by=None, per_page=PER_PAGE):
        """ 根据关键字搜索结果,title权重最大, tag次之, content最小 """
        s = cls.search()
        s = s.query('multi_match', query=query, fields=SEARCH_FIELDS)  # 多行匹配

        if page < 1:
            page = 1
        start = (page - 1) * PER_PAGE
        s = s.extra(**{'from': start, 'size': per_page})
        if order_by is not None:
            s = s.sort(order_by)
        rs = s.execute()
        dct = defaultdict(list)
        for i in rs:
            dct[i.kind].append(i.id)

        items = []

        for kind, ids in dct.items():
            target_cls = TARGET_MAPPER.get(kind)
            if target_cls:
                items_ = target_cls.get_multi(ids)
                items.extend(items_)
        # Fix elasticsearch-dsl for 7.x
        total = rs.hits.total.value if __version__[0] >= 7 else rs.hits.total
        return Pagination(query, page, per_page, total, items)
Beispiel #24
0
    def new_search(cls, query, page, order_by=None, per_page=PER_PAGE):
        s = cls.search()
        s = s.query('multi_match', query=query, fields=SEARCH_FIELDS)

        if page < 1:
            page = 1
        start = (page - 1) * per_page
        s = s.extra(**{'from': start, 'size': per_page})
        if order_by is not None:
            s = s.sort(order_by)

        rs = s.execute()

        dct = defaultdict(list)
        for i in rs:
            dct[i.kind].append(
                i.id
            )  # `Response` object allows you access to any key from the response dict via attribute access.

        items = []
        for kind, ids in dct.items():
            target_cls = TARGET_MAPPER.get(kind)
            if target_cls:
                items_ = target_cls.get_multi(ids)
                items.extend(items_)

        return Pagination(query, page, per_page, rs.hits.total, items)
Beispiel #25
0
    def paginate_limit(self,
                       page=None,
                       per_page=None,
                       limit=None) -> Pagination:
        """Return paginate object

        Args:
            page: number of page
            per_page: item per page
            limit: limit item per page

        Returns:
            Pagination object
        """
        page = page or 1
        per_page = per_page or 12
        limit = limit if limit else per_page

        items = self.limit(limit).offset((page - 1) * per_page).all()

        # No need to count if we're on the first page and there are fewer
        # items than we expected
        if page == 1 and len(items) < per_page:
            total = len(items)
        else:
            total = self.order_by(None).count()

        return Pagination(self, page, per_page, total, items)
Beispiel #26
0
 def paginate(self, *args, **kwargs):
     pagination = super(QueryBooster, self).paginate(*args, **kwargs)
     distinct_total = self.order_by(None).distinct().count()
     items = self.distinct().limit(pagination.per_page).offset(
         (pagination.page - 1) * pagination.per_page).all()
     return Pagination(self, pagination.page, pagination.per_page,
                       distinct_total, items)
Beispiel #27
0
def manage():
    if request.method=='POST':
        pass
    path=urllib.unquote(request.args.get('path','/'))
    if path=='':
        path='/'
    if path!='/' and path.startswith('/'):
        path=re.sub('^/+','',path)
    page=request.args.get('page',1,type=int)
    image_mode=request.args.get('image_mode')
    sortby=request.args.get('sortby')
    order=request.args.get('order')
    if sortby:
        sortby=request.args.get('sortby')
    else:
        sortby=request.cookies.get('admin_sortby') if request.cookies.get('admin_sortby') is not None else 'lastModtime'
        sortby=sortby
    if order:
        order=request.args.get('order')
    else:
        order=request.cookies.get('admin_order') if request.cookies.get('admin_order') is not None else 'desc'
        order=order
    resp,total = FetchData(path=path,page=page,per_page=50,sortby=sortby,order=order)
    pagination=Pagination(query=None,page=page, per_page=50, total=total, items=None)
    resp=make_response(render_template('admin/manage.html',pagination=pagination,items=resp,path=path,sortby=sortby,order=order,endpoint='admin.manage'))
    resp.set_cookie('admin_sortby',str(sortby))
    resp.set_cookie('admin_order',str(order))
    return resp
Beispiel #28
0
    def get_course_learners_with_results(self,
                                         course_id,
                                         instrument_ids=None,
                                         page=1,
                                         max_per_page=20):
        results = []
        try:
            related_courses_ids = self._get_contained_course_ids(course_id)

            query = self.db.session.query(Request.tesla_id).filter(
                CourseActivity.course_id.in_(related_courses_ids),
                Request.activity_id == CourseActivity.activity_id,
                RequestResult.request_id == Request.id).group_by(
                    Request.tesla_id)

            if instrument_ids is not None:
                query.filter(RequestResult.instrument_id.in_(instrument_ids))

            results = query.group_by(Request.tesla_id).order_by(
                Request.tesla_id).paginate(page=page,
                                           max_per_page=max_per_page)

        except Exception:
            self.logger.exception(
                "Error getting list of learners with requests for a certain course"
            )
            results = Pagination(None, page, max_per_page, 0, [])

        return results
Beispiel #29
0
    def paginate(self, page=1, per_page=25, show_all=False):
        """Paginate a query object.

        This behaves almost like the default `paginate` method from
        Flask-SQLAlchemy but allows showing all results on a single page.

        :param page: Number of the page to return.
        :param per_page: Number of items per page.
        :param show_all: Whether to show all the elements on one page.
        :return: a :class:`Pagination` object
        """
        if page < 1 or show_all:
            page = 1

        if show_all:
            items = self.all()
            per_page = total = len(items)
        else:
            items = self.limit(per_page).offset((page - 1) * per_page).all()
            if page == 1 and len(items) < per_page:
                total = len(items)
            else:
                total = self.order_by(None).count()

        return Pagination(self, page, per_page, total, items)
Beispiel #30
0
    def games_search_with_pagination(self,
                                     games_hint,
                                     typ,
                                     search_parameter,
                                     page=1,
                                     per_page=20,
                                     sort_type='alphabetical'):
        """
        Search games with defined parameters and return them as a SearchResults object which contains a Pagination object.
        :param current_user The user who made the research
        :param games_hint: A hint gave by the user to search various games
        :param typ: str containing the type of games_hint (search filter)
        :param search_parameter: str containing the name of the search container
        :param current_page: The current page number
        :param per_page: The number of users shown on a search results page
        :return: A SearchResults with a Pagination object.
        """
        results = self.games_search(games_hint, typ, search_parameter,
                                    sort_type)

        # We want to remove already owned and wished games from the page
        if search_parameter is None or search_parameter == "None":
            results.items = results.items.filter(
                Game.id.notin_(self.get_wished_games(True)))
            results.items = results.items.filter(
                Game.id.notin_(self.get_owned_games(True)))

        page_elements = results.items.slice(
            (page - 1) * per_page,
            page * per_page)  # the games that will be displayed on the page
        results.pagination = Pagination(None, page, per_page,
                                        results.items.count(), page_elements)
        results.items = None

        return results