views.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:quilt 作者: quiltdata 项目源码 文件源码
def search():
    query = request.args.get('q', '')
    keywords = query.split()

    if len(keywords) > 5:
        # Let's not overload the DB with crazy queries.
        raise ApiException(requests.codes.bad_request, "Too many search terms (max is 5)")

    filter_list = [
        sa.func.instr(
            sa.sql.collate(sa.func.concat(Package.owner, '/', Package.name), UTF8_GENERAL_CI),
            keyword
        ) > 0
        for keyword in keywords
    ]

    results = (
        db.session.query(Package, sa.func.max(Access.user == PUBLIC))
        .filter(sa.and_(*filter_list))
        .join(Package.access)
        .filter(Access.user.in_([g.auth.user, PUBLIC]))
        .group_by(Package.id)
        .order_by(
            sa.sql.collate(Package.owner, UTF8_GENERAL_CI),
            sa.sql.collate(Package.name, UTF8_GENERAL_CI)
        )
        .all()
    )

    return dict(
        packages=[
            dict(
                owner=package.owner,
                name=package.name,
                is_public=is_public,
            ) for package, is_public in results
        ]
    )
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号