from webargs import fields from webargs.flaskparser import use_kwargs from mailgun import MailgunApi from models.recipe import Recipe from models.user import User from schemas.user import UserSchema from schemas.recipe import RecipeSchema from utils import generate_token, verify_token user_schema = UserSchema() user_public_schema = UserSchema(exclude=('email', )) recipe_list_schema = RecipeSchema(many=True) mailgun = MailgunApi(domain=os.environ['MAILGUN_DOMAIN'], api_key=os.environ['MAILGUN_API_KEY']) class UserListResource(Resource): def post(self): json_data = request.get_json() data, errors = user_schema.load(data=json_data) if errors: return { 'message': 'Validation errors',
from flask import request from flask_restful import Resource from flask_jwt_extended import get_jwt_identity, jwt_required, jwt_optional from http import HTTPStatus from webargs import fields from webargs.flaskparser import use_kwargs from models.recipe import Recipe from schemas.recipe import RecipeSchema, RecipePaginationSchema from extensions import image_set from utils import save_image recipe_schema = RecipeSchema() recipe_cover_schema = RecipeSchema(only=('cover_url', )) recipe_list_schema = RecipeSchema(many=True) recipe_pagination_schema = RecipePaginationSchema() class RecipeListResource(Resource): @use_kwargs({ 'q': fields.Str(missing=''), 'page': fields.Int(missing=1), 'per_page': fields.Int(missing=20) }) def get(self, q, page, per_page): paginated_recipes = Recipe.get_all_published(q, page, per_page)
from auth import AuthError, requires_auth from flask_restful import Resource from flask import jsonify, request, redirect from models.recipe import RecipeModel from schemas.recipe import RecipeSchema from marshmallow import ValidationError from schemas.image import ImageSchema from flask_uploads import IMAGES, UploadSet import json from flask_jwt_extended import jwt_required recipe_schemas = RecipeSchema() image_schemas = ImageSchema() recipe_list_schemas = RecipeSchema(many=True) images = UploadSet("images", IMAGES) class Recipe(Resource): def get(self, id): recipe = RecipeModel.query.filter_by(id=id).first() if recipe is None: return { "message": "recipe was not found", "success": False, "code": 404 }, 404 recipe = recipe_schemas.dump(recipe) recipe["ingredients"] = [{ 'name': r['name'],
from flask import request from flask_restful import Resource from http import HTTPStatus from models.recipe import Recipe from flask_jwt_extended import get_jwt_identity, jwt_required, jwt_optional import os from utils import save_image, allowed_file, clear_cache from schemas.recipe import RecipeSchema, RecipePaginationSchema from extensions import cache, limiter recipe_schema = RecipeSchema() recipe_list_schema = RecipeSchema(many=True) recipe_cover_schema = RecipeSchema(only=("cover_url", )) recipe_pagination_schema = RecipePaginationSchema() class RecipeListResource(Resource): decorators = [ limiter.limit("3 per minute", methods=["GET"], error_message="Too many requests") ] @cache.cached(timeout=60, query_string=True) def get(self): sort = request.args.get("sort", "created_at") order = request.args.get("order", "desc") q = request.args.get("q", "") per_page = int(request.args.get("per_page", 10)) page = int(request.args.get("page", 1))
from http import HTTPStatus from os import path, remove from flask import request from flask_restful import Resource from flask_jwt_extended import jwt_required, get_jwt_identity from marshmallow import ValidationError from webargs import fields from webargs.flaskparser import use_kwargs from models.recipe import Recipe from schemas.recipe import RecipeSchema, RecipePaginationSchema from extensions import image_set, cache, limiter from utils import save_image, clear_cache recipe_schema = RecipeSchema() recipe_cover_schema = RecipeSchema(only=('cover_url', )) recipe_pagination_schema = RecipePaginationSchema() class RecipeListResource(Resource): decorators = [ limiter.limit('2 per minute', methods=['GET'], error_message='Too Many Requests') ] @use_kwargs( { 'q': fields.Str(missing=''),