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
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)
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
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