def put(cls, meal, handle): try: if request.json is None: return error_415() except BadRequest: return error_415() try: validate(request.json, schema=mealportion_schema()) except (SchemaError, ValidationError): return error_400() meal_id, portion_id = decode_handle(meal, handle) mealportion = MealPortion.query.filter( MealPortion.meal_id == meal_id, MealPortion.portion_id == portion_id).first() if mealportion is None: return error_404() # Only weight per serving can be edited mealportion.weight_per_serving = request.json['weight_per_serving'] db.session.add(mealportion) try: db.session.commit() except IntegrityError: db.session.rollback() return error_409() return Response(response="", status=204, headers=add_mason_response_header())
def delete(cls, handle=None): person = Person.query.filter(Person.id == handle).first() if person is None: return error_404() db.session.delete(person) db.session.commit() return Response("DELETED", 204, mimetype=MASON)
def get(cls, handle=None): if handle is None: # Meal collection resp = CalorieBuilder(items=[]) for meal in Meal.query.all(): m = meal_to_api_meal(meal) m.add_control_self(api.url_for(MealItem, handle=meal.id)) m.add_control_collection(api.url_for(MealItem, handle=None)) add_control_edit_meal(m, handle=meal.id) resp['items'].append(m) add_control_add_meal(resp) else: # Meal item meal = Meal.query.filter(Meal.id == handle).first() if meal is None: return error_404() resp = meal_to_api_meal(meal) resp.add_control_collection(api.url_for(MealItem, handle=None)) resp.add_control_delete(api.url_for(MealItem, handle=handle)) resp.add_control_profile() add_control_edit_meal(resp, handle) # Common fields for person item and person collection resp.add_control_self(api.url_for(MealItem, handle=handle)) resp.add_control(NS + ':meals-all', api.url_for(MealItem, handle=None)) add_calorie_namespace(resp) return Response(json.dumps(resp), 200, headers=add_mason_response_header())
def delete(cls, handle=None): meal = Meal.query.filter(Meal.id == handle).first() if meal is None: return error_404() db.session.delete(meal) db.session.commit() return Response("DELETED", 204, mimetype=MASON)
def put(cls, handle): try: if request.json is None: return error_415() except BadRequest: return error_415() try: validate(request.json, schema=meal_schema()) except (SchemaError, ValidationError): return error_400() meal = Meal.query.filter(Meal.id == handle).first() if meal is None: return error_404() # We don't support a change of ID, so ID field from the request is ignored meal.name = request.json['name'] meal.servings = request.json['servings'] if 'description' in request.json.keys(): meal.description = request.json['description'] db.session.add(meal) try: db.session.commit() except IntegrityError: db.session.rollback() return error_409() return Response(response="", status=204, headers=add_mason_response_header())
def get(cls, handle=None): if handle is None: # Portion collection resp = CalorieBuilder(items=[]) for portion in Portion.query.all(): m = portion_to_api_portion(portion) m.add_control_collection(api.url_for(PortionItem, handle=None)) m.add_control_delete(api.url_for(PortionItem, handle=portion.id)) resp['items'].append(m) add_control_add_portion(resp) else: # Portion item portion = Portion.query.filter(Portion.id == handle).first() if portion is None: return error_404() resp = portion_to_api_portion(portion) resp.add_control_collection(api.url_for(PortionItem, handle=None)) resp.add_control_delete(api.url_for(PortionItem, handle=handle)) resp.add_control_profile() add_control_edit_portion(resp, handle) # Common fields for portion item and portion collection resp.add_control_self(api.url_for(PortionItem, handle=handle)) resp.add_control(NS+':portions-all', api.url_for(PortionItem, handle=None)) add_calorie_namespace(resp) return Response(json.dumps(resp), 200, headers=add_mason_response_header())
def delete(cls, meal, handle): meal_id, portion_id = decode_handle(meal, handle) mealportion = MealPortion.query.filter( MealPortion.meal_id == meal_id, MealPortion.portion_id == portion_id).first() if mealportion is None: return error_404() db.session.delete(mealportion) db.session.commit() return Response("DELETED", 204, mimetype=MASON)
def delete(cls, meal, handle=None): person, meal_id, timestamp = split_mealrecord_handle(meal, handle) mealrecord = MealRecord.query.filter( MealRecord.person_id == person, MealRecord.meal_id == meal_id, MealRecord.timestamp == timestamp).first() if mealrecord is None: return error_404() db.session.delete(mealrecord) db.session.commit() return Response("DELETED", 204, mimetype=MASON)
def get(cls, meal=None, handle=None, person_id=None): if handle is None and person_id is not None: resp = CalorieBuilder(items=[]) for mealrecord in MealRecord.query.filter( MealRecord.person_id == person_id): m = mealrecord_to_api_mealrecord(mealrecord) m.add_control_collection( api.url_for(MealRecordItem, meal=None, handle=None)) resp['items'].append(m) add_control_add_mealrecord(resp) elif handle is None: # MealRecord collection resp = CalorieBuilder(items=[]) for mealrecord in MealRecord.query.all(): m = mealrecord_to_api_mealrecord(mealrecord) m.add_control_collection( api.url_for(MealRecordItem, meal=None, handle=None)) resp['items'].append(m) add_control_add_mealrecord(resp) else: # MealRecord item person, meal_id, timestamp = split_mealrecord_handle(meal, handle) mealrecord = MealRecord.query.filter( MealRecord.person_id == person, MealRecord.meal_id == meal_id, MealRecord.timestamp == timestamp).first() if mealrecord is None: return error_404() resp = mealrecord_to_api_mealrecord(mealrecord) resp.add_control_collection( api.url_for(MealRecordItem, meal=None, handle=None)) resp.add_control_delete( api.url_for(MealRecordItem, meal=meal, handle=handle)) resp.add_control_profile() add_control_edit_mealrecord(resp, meal, handle) # Common fields for mealrecord item and mealrecord collection resp.add_control_self( api.url_for(MealRecordItem, meal=meal, handle=handle)) resp.add_control(NS + ':mealrecords-all', api.url_for(MealRecordItem, meal=None, handle=None)) add_calorie_namespace(resp) return Response(json.dumps(resp, default=myconverter), 200, headers=add_mason_response_header())
def put(cls, meal, handle): try: if request.json is None: return error_415() except BadRequest: return error_415() try: validate(request.json, schema=mealrecord_schema()) except (SchemaError, ValidationError): return error_400() person, meal_id, timestamp = split_mealrecord_handle(meal, handle) mealrecord = MealRecord.query.filter( MealRecord.person_id == person, MealRecord.meal_id == meal_id, MealRecord.timestamp == timestamp).first() if mealrecord is None: return error_404() mealrecord.person_id = request.json['person_id'] mealrecord.meal_id = request.json['meal_id'] mealrecord.amount = request.json['amount'] mealrecord.timestamp = datetime.datetime.strptime( request.json['timestamp'], '%Y-%m-%d %H:%M:%S.%f') db.session.add(mealrecord) try: db.session.commit() except IntegrityError: db.session.rollback() return error_409() return Response(response="", status=204, headers=add_mason_response_header())
def get(cls, meal, handle): # MealPortion meal_id, portion_id = decode_handle(meal, handle) mealportion = MealPortion.query.filter( MealPortion.meal_id == meal_id, MealPortion.portion_id == portion_id).first() if mealportion is None: return error_404() resp = mealportion_to_api_mealportion(mealportion) resp.add_control_collection( api.url_for(MealItem, handle=meal_id) + "mealportions/") resp.add_control_delete( api.url_for(MealPortionItem, meal=meal, handle=handle)) resp.add_control_profile() add_control_edit_mealportion(resp, meal, handle) resp.add_control_self( api.url_for(MealPortionItem, meal=meal, handle=handle)) add_calorie_namespace(resp) return Response(json.dumps(resp), 200, headers=add_mason_response_header())
def put(cls, handle): try: if request.json is None: return error_415() except BadRequest: return error_415() try: validate(request.json, schema=portion_schema()) except (SchemaError, ValidationError): return error_400() portion = Portion.query.filter(Portion.id == handle).first() if portion is None: return error_404() # We don't support a change of ID, so ID field from the request is ignored portion.name = request.json['name'] portion.calories = request.json['calories'] optional_fields = extract_optional_fields(request.json) for k in optional_fields.keys(): setattr(portion, k, optional_fields[k]) db.session.add(portion) try: db.session.commit() except IntegrityError: db.session.rollback() return error_409() return Response( response="", status=204, headers=add_mason_response_header() )