Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)