def places(): if request.method == 'GET': list_places = Place.select() return ListStyle.list(list_places, request), 200 elif request.method == 'POST': if "name" not in request.form or "owner_id" not in request.form or "city" not in request.form: return json_response(status_=400, code=40000, msg="missing parameters") test = Place.select().where(Place.name == request.form["name"]) if test.wrapped_count() > 0: return json_response(status_=409, code=10002, msg="place already exists with this name") try: entry = Place(owner=request.form["owner_id"], name=request.form["name"], city=request.form["city"]) if request.form['description']: entry.description = str(request.form['description']) if request.form['number_rooms']: entry.number_rooms = int(request.form['number_rooms']) if request.form['number_bathrooms']: entry.number_bathrooms = int(request.form['number_bathrooms']) if request.form['max_guest']: entry.max_guest = int(request.form['max_guest']) if request.form['price_by_night']: entry.price_by_night = int(request.form['price_by_night']) if request.form['latitude']: entry.latitude = float(request.form['latitude']) if request.form['longitude']: entry.longitude = float(request.form['longitude']) entry.save() return jsonify(entry.to_dict()), 201 except IntegrityError: return json_response(status_=400, msg="you are missing a field in your post request")
def create_places(): """ Create a place Creates a place based on post parameters. --- tags: - place parameters: - name: name in: query type: string description: name of the amenity to create - name: city in: query type: number description: id of the city the place is in - name: owner in: query type: number description: id of the owner of the place - name: description in: query type: string description: details about the place - name: number_rooms in: query type: number description: number of bedrooms in place - name: number_bathrooms in: query type: number description: number of bathrooms in place - name: max_guest in: query type: number description: max number of guests that can stay at a time - name: price_by_night in: query type: number description: price (in USD) to stay a night - name: latitude in: query type: float description: location of the place in latitude - name: longitude in: query type: float description: location of the place in longitude responses: 200: description: Success message schema: id: success_message properties: status: type: number description: status code default: 200 msg: type: string description: Status message default: 'Success' 400: description: Error message schema: id: error_message properties: status: type: number description: status code default: 40000 msg: type: string description: Status message default: 'Missing parameters' """ content = request.get_json(force=True) if not all(param in content.keys() for param in ["name", "city", "owner", "description", "number_rooms", "number_bathrooms", "max_guest", "price_by_night", "latitude", "longitude"]): #ERROR return error_msg(400, 40000, "Missing parameters") try: place = Place() place.name = content["name"] place.city = content["city"] place.owner = content["owner"] place.description = content["description"] place.number_rooms = content["number_rooms"] place.number_bathrooms = content["number_bathrooms"] place.max_guest = content["max_guest"] place.price_by_night = content["price_by_night"] place.latitude = content["latitude"] place.longitude = content["longitude"] place.save() except Exception as e: return error_msg(400, 400, "Error") return error_msg(200, 200, "Success")
def state_city_place(state_id, city_id): if request.method == "GET": try: state_test = State.select().where(State.id == state_id) if state_test.wrapped_count() < 1: return json_response(status_=404, code=10002, msg="state not found") city_test = City.select().where(City.id == city_id) if city_test.wrapped_count() < 1: return json_response(status_=404, code=10002, msg="state not found") query = Place.select().where(Place.city == city_id) return ListStyle.list(query, request), 200 except Place.DoesNotExist: return json_response(status_=404, code=404, msg="not found") elif request.method == "POST": if "name" not in request.form or "owner_id" not in request.form: return json_response(status_=400, code=40000, msg="missing parameters") try: city = City.get(City.id == city_id, City.state_id == state_id) except City.DoesNotExist: return json_response(status_=404, msg="City does not exist") try: place = Place(owner=request.form['owner_id'], city=city_id, name=request.form['name']) if request.form['description']: place.description = str(request.form['description']) if request.form['number_rooms']: place.number_rooms = int(request.form['number_rooms']) if request.form['number_bathrooms']: place.number_bathrooms = int(request.form['number_bathrooms']) if request.form['max_guest']: place.max_guest = int(request.form['max_guest']) if request.form['price_by_night']: place.price_by_night = int(request.form['price_by_night']) if request.form['latitude']: place.latitude = float(request.form['latitude']) if request.form['longitude']: place.longitude = float(request.form['longitude']) place.save() except IntegrityError: return json_response(status_=409, msg="Name already exists") return jsonify(place.to_dict()), 201
def create_place_by_city(state_id, city_id): """ Create a new place Create a new place in the given city --- tags: - Place parameters: - name: state_id in: path type: integer required: True description: id of the state - name: city_id in: path type: integer required: True description: id of the city - name: owner_id in: form type: integer required: True description: user id of the owner - name: name in: form type: string required: True description: name of the place - name: description in: form type: string description: description of the place - name: number_rooms in: form type: integer description: number of rooms - name: number_bathrooms in: form type: integer description: number of bathrooms - name: max_guest in: form type: integer description: the max number of guests - name: price_by_night in: form type: integer description: the price per night of the location - name: latitude in: form type: float description: the latitude of the place location - name: longitude in: form type: float description: the longitude of the place location responses: 201: description: Place was created schema: $ref: '#/definitions/create_amenity_post_post_success' 400: description: Issue with place request 404: description: Owner or city was not found 500: description: The request was not able to be processed """ try: data = {} for key in request.form.keys(): for value in request.form.getlist(key): data[key] = value ''' Check for required keys ''' if not 'owner_id' in data: raise KeyError('owner_id') if not 'name' in data: raise KeyError('name') ''' Check required key value data types ''' if not type_test(data['owner_id'], int): raise TypeError('owner_id is not an integer') if not type_test(data['name'], 'string'): raise TypeError('name is not a string') ''' Check optional key value data types ''' if 'description' in data and not type_test(data['description'], 'string'): raise TypeError('description is not a string') if 'number_rooms' in data and not type_test(data['number_rooms'], int): raise TypeError('number_rooms is not an integer') if 'number_bathrooms' in data and not type_test(data['number_bathrooms'], int): raise TypeError('number_bathrooms is not an integer') if 'max_guest' in data and not type_test(data['max_guest'], int): raise TypeError('max_guest is not an integer') if 'price_by_night' in data and not type_test(data['price_by_night'], int): raise TypeError('price_by_night is not an integer') if 'latitude' in data and not type_test(data['latitude'], float): raise TypeError('latitude is not a float') if 'longitude' in data and not type_test(data['longitude'], float): raise TypeError('longitude is not a float') ''' Check if the state_id exists ''' query = State.select().where(State.id == state_id) if not query.exists(): raise LookupError('state_id') ''' Check if the city_id exists ''' query = City.select().where(City.id == city_id) if not query.exists(): raise LookupError('city_id') ''' Check if the city_id is associated to the state_id ''' city = City.get(City.id == city_id) query = State.select().where(State.id == city.state, State.id == state_id) if not query.exists(): raise LookupError('city_id, state_id') ''' Check if the owner_id exists ''' query = User.select().where(User.id == data['owner_id']) if not query.exists(): raise LookupError('owner_id') new = Place( owner = data['owner_id'], name = data['name'], city = city.id ) if data['description']: new.description = data['description'] if data['number_rooms']: new.number_rooms = data['number_rooms'] if data['number_bathrooms']: new.number_bathrooms = data['number_bathrooms'] if data['max_guest']: new.max_guest = data['max_guest'] if data['price_by_night']: new.price_by_night = data['price_by_night'] if data['latitude']: new.latitude = data['latitude'] if data['longitude']: new.longitude = data['longitude'] new.save() res = {} res['code'] = 201 res['id'] = new.id res['msg'] = "Place was created successfully" return res, 201 except KeyError as e: res = {} res['code'] = 40000 res['msg'] = 'Missing parameters' return res, 400 except LookupError as e: abort(404) except TypeError as e: res = {} res['code'] = 400 res['msg'] = e.message return res, 400 except Exception as e: print e.message abort(500)