Exemple #1
0
def versions():
    if request.method == "POST":
        try:
            req = json.loads(request.data)  # for some reason request.get_json doesn't work
        except:
            abort(400)

        newid = None
        if "id" in req:
            # this is an update to an existing object
            try:
                LocalVoicesAPI.update_version(
                    req.get("id"), version_json=req.get("version"), singer=req.get("singer"), song=req.get("song")
                )
                newid = req.get("id")
            except NotFoundException:
                abort(400)  # bad request, not 404, as the url itself is fine
        else:
            # we are creating a new song
            if req.get("version") is not None:
                new_version = LocalVoicesAPI.create_version(req.get("version"), req.get("singer"), req.get("song"))
                newid = new_version.id
            else:
                abort(400)

        resp = make_response(json.dumps({"id": newid}))
        resp.mimetype = "application/json"
        return resp
Exemple #2
0
def version(version_id):
    if request.method == "GET":
        try:
            s = LocalVoicesAPI.get_version(version_id)
            resp = make_response(json.dumps(s))
            resp.mimetype = "application/json"
            return resp
        except NotFoundException:
            abort(404)

    elif request.method == "PUT":
        try:
            req = json.loads(request.data)  # for some reason request.get_json doesn't work
        except:
            abort(400)

        try:
            LocalVoicesAPI.update_version(
                version_id, version_json=req.get("version"), singer=req.get("singer"), song=req.get("song")
            )
            return "", 204
        except NotFoundException:
            abort(404)

    elif request.method == "DELETE":
        try:
            LocalVoicesAPI.delete_version(version_id)
            return "", 204
        except NotFoundException:
            abort(404)
Exemple #3
0
def songs():
    if request.method == "GET":
        from_param = request.values.get("from", 0)
        size = request.values.get("size", 50)
        letter = request.values.get("letter")

        result = LocalVoicesAPI.list_songs(fr=from_param, size=size, initial_letters=letter, order="asc")

        # return a json response
        resp = make_response(json.dumps(result.as_dict()))
        resp.mimetype = "application/json"
        return resp

    elif request.method == "POST":
        try:
            req = json.loads(request.data)  # for some reason request.get_json doesn't work
        except:
            abort(400)

        newid = None
        if "id" in req:
            # this is an update to an existing object
            try:
                LocalVoicesAPI.update_song(
                    req.get("id"), song_json=req.get("song"), versions=req.get("versions"), songs=req.get("songs")
                )
                newid = req.get("id")
            except NotFoundException:
                abort(400)  # bad request, not 404, as the url itself is fine
        else:
            # we are creating a new song
            if req.get("song") is not None:
                new_song = LocalVoicesAPI.create_song(req.get("song"), req.get("versions"), req.get("songs"))
                newid = new_song.id
            else:
                abort(400)

        resp = make_response(json.dumps({"id": newid}))
        resp.mimetype = "application/json"
        return resp
Exemple #4
0
def search():
    """
    from_lat - upper-most latitude for search results
    to_lat - lower-most latitude for search results
    from_lon - left-most longitude for search results
    to_lon - right-most longitude for search results
    place - placename to search for
    q - free-text query string
    type - one or more of "singer", "song", "version" as a comma-delimitted list
    from - result number to start from
    size - page size to return
    max - return max information or not (default to false)
    """
    # extract the parameters from the query string
    from_lat = request.values.get("from_lat")
    to_lat = request.values.get("to_lat")
    from_lon = request.values.get("from_lon")
    to_lon = request.values.get("to_lon")
    place = request.values.get("place")
    q = request.values.get("q")
    type = request.values.get("type")
    fr = request.values.get("from", 0)
    size = request.values.get("size", 25)
    all_info = request.values.get("max", False)

    # normalise all_info
    if all_info:
        all_info = all_info.lower().strip() == "true"

    # break down the comma-delimited string of query types
    types = [t.strip() for t in type.split(",")] if type is not None else None

    print types

    # ask the API to calculate the answer
    result = LocalVoicesAPI.search(
        from_lat=from_lat,
        to_lat=to_lat,
        from_lon=from_lon,
        to_lon=to_lon,
        place=place,
        query_string=q,
        types=types,
        from_number=fr,
        page_size=size,
        all_info=all_info,
    )

    # return a json response
    resp = make_response(json.dumps(result.as_dict()))
    resp.mimetype = "application/json"
    return resp