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]
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]
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
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
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)
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
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
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'}))
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'}))
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'})
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'})