Exemple #1
0
def test_search_pagination(db):
    owner = db_utils.create_user()
    submissions = [db_utils.create_submission(owner, rating=ratings.GENERAL.code) for i in range(30)]
    tag = db_utils.create_tag('penguin')
    search_query = search.Query.parse(u'penguin', 'submit')

    for submission in submissions:
        db_utils.create_submission_tag(tag, submission)

    result, next_count, back_count = search.select(
        search=search_query,
        userid=owner, rating=ratings.EXPLICIT.code, limit=_page_limit,
        cat=None, subcat=None, within='', backid=None, nextid=None)

    assert back_count == 0
    assert next_count == search.COUNT_LIMIT
    assert [item['submitid'] for item in result] == submissions[:-_page_limit - 1:-1]

    result, next_count, back_count = search.select(
        search=search_query,
        userid=owner, rating=ratings.EXPLICIT.code, limit=_page_limit,
        cat=None, subcat=None, within='', backid=None, nextid=submissions[-_page_limit])

    assert back_count == _page_limit
    assert next_count == search.COUNT_LIMIT
    assert [item['submitid'] for item in result] == submissions[-_page_limit - 1:-2 * _page_limit - 1:-1]

    result, next_count, back_count = search.select(
        search=search_query,
        userid=owner, rating=ratings.EXPLICIT.code, limit=_page_limit,
        cat=None, subcat=None, within='', backid=submissions[_page_limit - 1], nextid=None)

    assert back_count == search.COUNT_LIMIT
    assert next_count == _page_limit
    assert [item['submitid'] for item in result] == submissions[2 * _page_limit - 1:_page_limit - 1:-1]
Exemple #2
0
def test_search_pagination(db):
    owner = db_utils.create_user()
    submissions = [
        db_utils.create_submission(owner, rating=ratings.GENERAL.code)
        for i in range(30)
    ]
    tag = db_utils.create_tag('penguin')
    search_query = search.Query.parse(u'penguin', 'submit')

    for submission in submissions:
        db_utils.create_submission_tag(tag, submission)

    result, next_count, back_count = search.select(
        search=search_query,
        userid=owner,
        rating=ratings.EXPLICIT.code,
        limit=_page_limit,
        cat=None,
        subcat=None,
        within='',
        backid=None,
        nextid=None)

    assert back_count == 0
    assert next_count == search.COUNT_LIMIT
    assert [item['submitid']
            for item in result] == submissions[:-_page_limit - 1:-1]

    result, next_count, back_count = search.select(
        search=search_query,
        userid=owner,
        rating=ratings.EXPLICIT.code,
        limit=_page_limit,
        cat=None,
        subcat=None,
        within='',
        backid=None,
        nextid=submissions[-_page_limit])

    assert back_count == _page_limit
    assert next_count == search.COUNT_LIMIT
    assert [item['submitid'] for item in result
            ] == submissions[-_page_limit - 1:-2 * _page_limit - 1:-1]

    result, next_count, back_count = search.select(
        search=search_query,
        userid=owner,
        rating=ratings.EXPLICIT.code,
        limit=_page_limit,
        cat=None,
        subcat=None,
        within='',
        backid=submissions[_page_limit - 1],
        nextid=None)

    assert back_count == search.COUNT_LIMIT
    assert next_count == _page_limit
    assert [item['submitid'] for item in result
            ] == submissions[2 * _page_limit - 1:_page_limit - 1:-1]
Exemple #3
0
def test_submission_search(db, term, n_results):
    user = db_utils.create_user()
    tag1 = db_utils.create_tag('walrus')
    tag2 = db_utils.create_tag('penguin')

    s1 = db_utils.create_submission(user, rating=ratings.GENERAL.code)
    db_utils.create_submission_tag(tag1, s1)
    db_utils.create_submission_tag(tag2, s1)

    s2 = db_utils.create_submission(user, rating=ratings.EXPLICIT.code)
    db_utils.create_submission_tag(tag1, s2)

    s3 = db_utils.create_submission(user, rating=ratings.GENERAL.code)
    db_utils.create_submission_tag(tag2, s3)

    s4 = db_utils.create_submission(user, rating=ratings.GENERAL.code)
    db_utils.create_submission_tag(tag2, s4)

    results, _, _ = search.select(search=search.Query.parse(term, 'submit'),
                                  userid=user,
                                  rating=ratings.EXPLICIT.code,
                                  limit=100,
                                  cat=None,
                                  subcat=None,
                                  within='',
                                  backid=None,
                                  nextid=None)

    assert len(results) == n_results
Exemple #4
0
    def check(term, n_results):
        results, _, _ = search.select(
            search=search.Query.parse(term, 'submit'),
            userid=viewer, rating=ratings.EXPLICIT.code, limit=100,
            cat=None, subcat=None, within='', backid=None, nextid=None)

        assert len(results) == n_results
Exemple #5
0
def do_search(query, find):
    terms = {
        'cat': None,
        'subcat': None,
        'within': '',
        'rated': [],
        'q': query,
        'find': find,
        'backid': None,
        'nextid': None
    }
    return search.select(None, ratings.GENERAL.code, 100, **terms)
Exemple #6
0
    def check(term, n_results):
        results, _, _ = search.select(search=search.Query.parse(
            term, 'submit'),
                                      userid=viewer,
                                      rating=ratings.EXPLICIT.code,
                                      limit=100,
                                      cat=None,
                                      subcat=None,
                                      within='',
                                      backid=None,
                                      nextid=None)

        assert len(results) == n_results
Exemple #7
0
def test_submission_search(db, term, n_results):
    user = db_utils.create_user()
    tag1 = db_utils.create_tag('walrus')
    tag2 = db_utils.create_tag('penguin')

    s1 = db_utils.create_submission(user, rating=ratings.GENERAL.code)
    db_utils.create_submission_tag(tag1, s1)
    db_utils.create_submission_tag(tag2, s1)

    s2 = db_utils.create_submission(user, rating=ratings.EXPLICIT.code)
    db_utils.create_submission_tag(tag1, s2)

    s3 = db_utils.create_submission(user, rating=ratings.GENERAL.code)
    db_utils.create_submission_tag(tag2, s3)

    s4 = db_utils.create_submission(user, rating=ratings.GENERAL.code)
    db_utils.create_submission_tag(tag2, s4)

    results, _, _ = search.select(
        search=search.Query.parse(term, 'submit'),
        userid=user, rating=ratings.EXPLICIT.code, limit=100,
        cat=None, subcat=None, within='', backid=None, nextid=None)

    assert len(results) == n_results
Exemple #8
0
def search_(request):
    rating = define.get_rating(request.userid)

    form = request.web_input(q="", find="", within="", rated=[], cat="", subcat="", backid="", nextid="")

    page = define.common_page_start(request.userid, title="Browse and search")

    if form.q:
        find = form.find

        if find not in ("submit", "char", "journal", "user"):
            find = "submit"

        q = form.q.strip()
        search_query = search.Query.parse(q, find)

        meta = {
            "q": q,
            "find": search_query.find,
            "within": form.within,
            "rated": set('gap') & set(form.rated),
            "cat": int(form.cat) if form.cat else None,
            "subcat": int(form.subcat) if form.subcat else None,
            "backid": int(form.backid) if form.backid else None,
            "nextid": int(form.nextid) if form.nextid else None,
        }

        if search_query.find == "user":
            query = search.select_users(q)
            next_count = back_count = 0
        else:
            search_query.ratings.update(ratings.CHARACTER_MAP[rating_code].code for rating_code in meta["rated"])

            query, next_count, back_count = search.select(
                userid=request.userid,
                rating=rating,
                limit=63,
                search=search_query,
                within=meta["within"],
                cat=meta["cat"],
                subcat=meta["subcat"],
                backid=meta["backid"],
                nextid=meta["nextid"])

        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "search"},
            # Search metadata
            meta,
            # Search results
            query,
            next_count,
            back_count,
            # Submission subcategories
            macro.MACRO_SUBCAT_LIST,
            search.COUNT_LIMIT,
        ]))
    elif form.find:
        query = search.browse(request.userid, rating, 66, form)

        meta = {
            "find": form.find,
            "cat": int(form.cat) if form.cat else None,
        }

        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "browse"},
            # Search metadata
            meta,
            # Search results
            query,
            0,
            0,
        ]))
    else:
        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "summary"},
            # Search metadata
            None,
            # Search results
            {
                "submit": search.browse(request.userid, rating, 22, form, find="submit"),
                "char": search.browse(request.userid, rating, 22, form, find="char"),
                "journal": search.browse(request.userid, rating, 22, form, find="journal"),
            },
        ]))

    return Response(define.common_page_end(request.userid, page, options={'search'}))
Exemple #9
0
def do_search(query, find):
    terms = {
        'cat': None, 'subcat': None, 'within': '', 'rated': [],
        'q': query, 'find': find, 'backid': None, 'nextid': None
    }
    return search.select(None, ratings.GENERAL.code, 100, **terms)
Exemple #10
0
def search_(request):
    rating = define.get_rating(request.userid)

    form = request.web_input(q="", find="", within="", rated=[], cat="", subcat="", backid="", nextid="")

    page = define.common_page_start(request.userid, title="Browse and search")

    if form.q:
        find = form.find

        if find not in ("submit", "char", "journal", "user"):
            find = "submit"

        q = form.q.strip()
        search_query = search.Query.parse(q, find)

        meta = {
            "q": q,
            "find": search_query.find,
            "within": form.within,
            "rated": set('gap') & set(form.rated),
            "cat": int(form.cat) if form.cat else None,
            "subcat": int(form.subcat) if form.subcat else None,
            "backid": int(form.backid) if form.backid else None,
            "nextid": int(form.nextid) if form.nextid else None,
        }

        if search_query.find == "user":
            query = search.select_users(q)
            next_count = back_count = 0
        else:
            search_query.ratings.update(ratings.CHARACTER_MAP[rating_code].code for rating_code in meta["rated"])

            query, next_count, back_count = search.select(
                userid=request.userid,
                rating=rating,
                limit=63,
                search=search_query,
                within=meta["within"],
                cat=meta["cat"],
                subcat=meta["subcat"],
                backid=meta["backid"],
                nextid=meta["nextid"])

        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "search"},
            # Search metadata
            meta,
            # Search results
            query,
            next_count,
            back_count,
            # Submission subcategories
            macro.MACRO_SUBCAT_LIST,
            search.COUNT_LIMIT,
        ]))
    elif form.find:
        query = search.browse(request.userid, rating, 66, form)

        meta = {
            "find": form.find,
            "cat": int(form.cat) if form.cat else None,
        }

        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "browse"},
            # Search metadata
            meta,
            # Search results
            query,
            0,
            0,
        ]))
    else:
        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "summary"},
            # Search metadata
            None,
            # Search results
            {
                "submit": search.browse(request.userid, rating, 22, form, find="submit"),
                "char": search.browse(request.userid, rating, 22, form, find="char"),
                "journal": search.browse(request.userid, rating, 22, form, find="journal"),
            },
        ]))

    return Response(define.common_page_end(request.userid, page, options={'search'}))
Exemple #11
0
def search_(request):
    rating = define.get_rating(request.userid)

    q = request.params.get('q')
    find = request.params.get('find')
    within = request.params.get('within', '')
    rated = request.params.getall('rated')
    cat = request.params.get('cat')
    subcat = request.params.get('subcat')
    backid = request.params.get('backid')
    nextid = request.params.get('nextid')

    page = define.common_page_start(request.userid, title="Browse and search")

    if q:
        if find not in ("submit", "char", "journal", "user"):
            find = "submit"

        q = q.strip()
        search_query = search.Query.parse(q, find)

        meta = {
            "q": q,
            "find": search_query.find,
            "within": within,
            "rated": set('gap') & set(rated),
            "cat": int(cat) if cat else None,
            "subcat": int(subcat) if subcat else None,
            "backid": int(backid) if backid else None,
            "nextid": int(nextid) if nextid else None,
        }

        if search_query.find == "user":
            query = search.select_users(q)
            next_count = back_count = 0
        else:
            search_query.ratings.update(ratings.CHARACTER_MAP[rating_code].code for rating_code in meta["rated"])

            query, next_count, back_count = search.select(
                userid=request.userid,
                rating=rating,
                limit=63,
                search=search_query,
                within=meta["within"],
                cat=meta["cat"],
                subcat=meta["subcat"],
                backid=meta["backid"],
                nextid=meta["nextid"])

        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "search"},
            # Search metadata
            meta,
            # Search results
            query,
            next_count,
            back_count,
            # Submission subcategories
            macro.MACRO_SUBCAT_LIST,
            search.COUNT_LIMIT,
        ]))
    elif find:
        query = search.browse(
            userid=request.userid,
            rating=rating,
            limit=66,
            find=find,
            cat=cat,
            backid=backid,
            nextid=nextid,
        )

        meta = {
            "find": find,
            "cat": int(cat) if cat else None,
        }

        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "browse"},
            # Search metadata
            meta,
            # Search results
            query,
            0,
            0,
        ]))
    else:
        backid = define.get_int(backid)
        nextid = define.get_int(nextid)
        page.append(define.render("etc/search.html", [
            # Search method
            {"method": "summary"},
            # Search metadata
            None,
            # Search results
            {
                "submit": search.browse(
                    userid=request.userid,
                    rating=rating,
                    limit=22,
                    find="submit",
                    cat=cat,
                    backid=backid,
                    nextid=nextid
                ),
                "char": search.browse(
                    userid=request.userid,
                    rating=rating,
                    limit=22,
                    find="char",
                    cat=cat,
                    backid=backid,
                    nextid=nextid
                ),
                "journal": search.browse(
                    userid=request.userid,
                    rating=rating,
                    limit=22,
                    find="journal",
                    cat=cat,
                    backid=backid,
                    nextid=nextid
                ),
            },
        ]))

    return Response(define.common_page_end(request.userid, page, options={'search'}))
Exemple #12
0
    def GET(self):
        rating = define.get_rating(self.user_id)

        form = web.input(q="",
                         find="",
                         within="",
                         rated=[],
                         cat="",
                         subcat="",
                         backid="",
                         nextid="")

        page = define.common_page_start(self.user_id,
                                        title="Browse and search")

        if form.q:
            find = form.find

            if find not in ("submit", "char", "journal", "user"):
                find = "submit"

            meta = {
                "q": form.q.strip(),
                "find": find,
                "within": form.within,
                "rated": set('gmap') & set(form.rated),
                "cat": int(form.cat) if form.cat else None,
                "subcat": int(form.subcat) if form.subcat else None,
                "backid": int(form.backid) if form.backid else None,
                "nextid": int(form.nextid) if form.nextid else None,
            }

            query, next_count, back_count = search.select(self.user_id,
                                                          rating,
                                                          limit=63,
                                                          **meta)

            page.append(
                define.render(
                    "etc/search.html",
                    [
                        # Search method
                        {
                            "method": "search"
                        },
                        # Search metadata
                        meta,
                        # Search results
                        query,
                        next_count,
                        back_count,
                        # Submission subcategories
                        macro.MACRO_SUBCAT_LIST,
                    ]))
        elif form.find:
            query = search.browse(self.user_id, rating, 66, form)

            meta = {
                "find": form.find,
                "cat": int(form.cat) if form.cat else None,
            }

            page.append(
                define.render(
                    "etc/search.html",
                    [
                        # Search method
                        {
                            "method": "browse"
                        },
                        # Search metadata
                        meta,
                        # Search results
                        query,
                        0,
                        0,
                    ]))
        else:
            page.append(
                define.render(
                    "etc/search.html",
                    [
                        # Search method
                        {
                            "method": "summary"
                        },
                        # Search metadata
                        None,
                        # Search results
                        {
                            "submit":
                            search.browse(
                                self.user_id, rating, 22, form, find="submit"),
                            "char":
                            search.browse(
                                self.user_id, rating, 22, form, find="char"),
                            "journal":
                            search.browse(
                                self.user_id, rating, 22, form,
                                find="journal"),
                        },
                    ]))

        return define.common_page_end(self.user_id,
                                      page,
                                      rating,
                                      options={'search'})
Exemple #13
0
    def GET(self):
        rating = define.get_rating(self.user_id)

        form = web.input(q="", find="", within="", rated=[], cat="", subcat="", backid="", nextid="")

        page = define.common_page_start(self.user_id, title="Browse and search")

        if form.q:
            find = form.find

            if find not in ("submit", "char", "journal", "user"):
                find = "submit"

            meta = {
                "q": form.q.strip(),
                "find": find,
                "within": form.within,
                "rated": set('gmap') & set(form.rated),
                "cat": int(form.cat) if form.cat else None,
                "subcat": int(form.subcat) if form.subcat else None,
                "backid": int(form.backid) if form.backid else None,
                "nextid": int(form.nextid) if form.nextid else None,
            }

            query, next_count, back_count = search.select(self.user_id, rating, limit=63, **meta)

            page.append(define.render("etc/search.html", [
                # Search method
                {"method": "search"},
                # Search metadata
                meta,
                # Search results
                query,
                next_count,
                back_count,
                # Submission subcategories
                macro.MACRO_SUBCAT_LIST,
            ]))
        elif form.find:
            query = search.browse(self.user_id, rating, 66, form)

            meta = {
                "find": form.find,
                "cat": int(form.cat) if form.cat else None,
            }

            page.append(define.render("etc/search.html", [
                # Search method
                {"method": "browse"},
                # Search metadata
                meta,
                # Search results
                query,
                0,
                0,
            ]))
        else:
            page.append(define.render("etc/search.html", [
                # Search method
                {"method": "summary"},
                # Search metadata
                None,
                # Search results
                {
                    "submit": search.browse(self.user_id, rating, 22, form, find="submit"),
                    "char": search.browse(self.user_id, rating, 22, form, find="char"),
                    "journal": search.browse(self.user_id, rating, 22, form, find="journal"),
                },
            ]))

        return define.common_page_end(self.user_id, page, rating, options={'search'})