def searchitem(): pd = PageData() if request.method == 'POST': if 'query' in request.form: pd.query = request.form['query'] else: pd.query = request.args.get('query') if pd.query == '': return redirect_back('/') if pd.query is not None: pd.results = core.item_search(pd.query) if len(pd.results) == 0: pd.results = [None] return render_template('search.html', pd=pd)
def search(): """ :URL: /item/search?page=<page>&type=<query type>&limit=<max results>&query=<search query>&sort=<sort type> :Method: GET :Query Types: * item - Item Search * user - User Search :Sort Types: * name - Alphabetical by name * added - By added date, latest first * modified - Last modified :Sample Response: Setting the accept:application/json header will return JSON. .. code-block:: javascript { "limit": 2, "num_pages": 4, "num_results": 8, "query": "Cascadia", "results": [ { "added": "2016-05-22 17:52:36", "body": "Blue/White (Cascadia Fringe, Gisele Currier Memorial Fundraiser)", "description": 460, "images": [ 388, 389 ], "modified": "2016-05-24 22:45:33", "name": "No Pity MLS Blue White Fringe (Cascadia Fringe) 2012", "uid": 362 }, { "added": "2016-05-22 17:02:15", "body": "", "description": 317, "images": [ 364, 365 ], "modified": "2016-05-22 17:02:15", "name": "Cascadia", "uid": 350 } ] } """ pd = PageData() pd.search_type = request.args.get('type') pd.query = request.args.get('query') pd.limit = request.args.get('limit') pd.page = request.args.get('page') pd.sort = request.args.get('sort') try: if not pd.limit: pd.limit = 20 else: pd.limit = int(pd.limit) if not pd.page: pd.page = 1 else: pd.page = int(pd.page) except ValueError: return page_not_found() if pd.search_type == "items": return item_search(pd) elif pd.search_type == "users": return user_search(pd) elif pd.search_type == "tags": return tag_search(pd) else: pd.search_type = "items" return item_search(pd)
def searchitem(): """ :URL: /item/search?page=<page>&limit=<max results>&query=<search query>&sort=<sort type> :Method: GET :Sort Types: * name - Alphabetical by name * added - By added date, latest first * modified - Last modified :Sample Response: Setting the accept:application/json header will return JSON. .. code-block:: javascript { "limit": 2, "num_pages": 4, "num_results": 8, "query": "Cascadia", "results": [ { "added": "2016-05-22 17:52:36", "body": "Blue/White (Cascadia Fringe, Gisele Currier Memorial Fundraiser)", "description": 460, "images": [ 388, 389 ], "modified": "2016-05-24 22:45:33", "name": "No Pity MLS Blue White Fringe (Cascadia Fringe) 2012", "uid": 362 }, { "added": "2016-05-22 17:02:15", "body": "", "description": 317, "images": [ 364, 365 ], "modified": "2016-05-22 17:02:15", "name": "Cascadia", "uid": 350 } ] } """ pd = PageData() pd.query = request.args.get('query') pd.limit = request.args.get('limit') pd.page = request.args.get('page') pd.sort = request.args.get('sort') if not pd.limit: pd.limit = 20 else: pd.limit = int(pd.limit) if not pd.page: pd.page = 1 else: pd.page = int(pd.page) offset = (pd.page - 1) * pd.limit results = core.item_search(pd.query, pd.limit, offset, pd.sort) pd.results = results['items'] pd.num_results = results['maxresults'] pd.num_pages = -(-pd.num_results // pd.limit) # round up if pd.num_results == 0: pd.results = [None] if request_wants_json(): resp = dict() resp['results'] = list() for item in pd.results: resp['results'].append(item.values()) resp['query'] = pd.query resp['num_results'] = pd.num_results resp['num_pages'] = pd.num_pages resp['limit'] = pd.limit return json.dumps(resp) return render_template('search.html', pd=pd)