def patch(self, recipe_id): json_data = request.get_json() data, errors = recipe_schema.load(data=json_data, partial=('name',)) if errors: return {'message': 'Validation errors', 'errors': errors}, HTTPStatus.BAD_REQUEST recipe = Recipe.get_by_id(recipe_id=recipe_id) if recipe is None: return {'message': 'Recipe not found'}, HTTPStatus.NOT_FOUND current_user = get_jwt_identity() if current_user != recipe.user_id: return {'message': 'Access is not allowed'}, HTTPStatus.FORBIDDEN recipe.name = data.get('name') or recipe.name recipe.description = data.get('description') or recipe.description recipe.num_of_servings = data.get('num_of_servings') or recipe.num_of_servings recipe.cook_time = data.get('cook_time') or recipe.cook_time recipe.directions = data.get('directions') or recipe.directions recipe.save() return recipe_schema.dump(recipe).data, HTTPStatus.OK
def post(self): json_data = request.get_json() current_user = get_jwt_identity() data, errors = recipe_schema.load(data=json_data) if errors: return {'message': 'Validation errors', 'errors': errors}, HTTPStatus.BAD_REQUEST recipe = Recipe(**data) recipe.user_id = current_user recipe.save() return recipe_schema.dump(recipe).data, HTTPStatus.CREATED
def put(self, recipe_id): file = request.files.get('cover') if not file: return {'message': 'Not a valid image'}, HTTPStatus.BAD_REQUEST if not image_set.file_allowed(file, file.filename): return {'message': 'File type not allowed'}, HTTPStatus.BAD_REQUEST recipe = Recipe.get_by_id(recipe_id=recipe_id) if recipe is None: return {'message': 'Recipe not found'}, HTTPStatus.NOT_FOUND current_user = get_jwt_identity() if current_user != recipe.user_id: return {'message': 'Access is not allowed'}, HTTPStatus.FORBIDDEN if recipe.cover_image: cover_path = image_set.path(folder='recipes', filename=recipe.cover_image) if os.path.exists(cover_path): os.remove(cover_path) filename = save_image(image=file, folder='recipes') recipe.cover_image = filename recipe.save() return recipe_cover_schema.dump(recipe).data, HTTPStatus.OK
def get(self, recipe_id): recipe = Recipe.get_by_id(recipe_id=recipe_id) if recipe is None: return {'message': 'Recipe not found'}, HTTPStatus.NOT_FOUND current_user = get_jwt_identity() if recipe.is_publish == False and recipe.user_id != current_user: return {'message': 'Access is not allowed'}, HTTPStatus.FORBIDDEN return recipe_schema.dump(recipe).data, HTTPStatus.OK
def delete(self, recipe_id): recipe = Recipe.get_by_id(recipe_id=recipe_id) if recipe is None: return {'message': 'Recipe not found'}, HTTPStatus.NOT_FOUND current_user = get_jwt_identity() if current_user != recipe.user_id: return {'message': 'Access is not allowed'}, HTTPStatus.FORBIDDEN recipe.delete() return {}, HTTPStatus.NO_CONTENT
def get(self, username, visibility): user = User.get_by_username(username=username) if user is None: return {'message': 'User not found'}, HTTPStatus.NOT_FOUND current_user = get_jwt_identity() if current_user == user.id and visibility in ['all', 'private']: pass else: visibility = 'public' recipes = Recipe.get_all_by_user(user_id=user.id, visibility=visibility) return recipe_list_schema.dump(recipes).data, HTTPStatus.OK
def get(self): recipes = Recipe.get_all_published() return recipe_list_schema.dump(recipes).data, HTTPStatus.OK