import os 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 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), 'sort': fields.Str(missing='created_at'), 'order': fields.Str(missing='desc') }) def get(self, q, page, per_page, sort, order):
from mailgun import MailgunApi from models.user import User from models.recipe import Recipe from schemas.recipe import RecipeSchema, RecipePaginationSchema from schemas.user import UserSchema from utils import generate_token, verify_token, save_image, clear_cache from webargs import fields from webargs.flaskparser import use_kwargs user_schema = UserSchema() user_avatar_schema = UserSchema(only=('avatar_url',)) user_public_schema = UserSchema(exclude=('email',)) recipe_list_schema = RecipeSchema(many=True) recipe_pagination_schema = RecipePaginationSchema() # This data is stored in the environment variable. First, you should ensure of # creating an account with Mailgun, then generate the API_KEY and API_URL, # and add both to the environment variable. mailgun = MailgunApi( domain=os.environ.get('MAILGUN_DOMAIN'), api_key=os.environ.get('MAILGUN_API_KEY')) # Create a dictionary for API pagination. The key-value pairs are passed to the # @use_kwargs decorator pages = { 'page': fields.Int(missing=1), 'per_page': fields.Int(missing=10), 'visibility': fields.Str(missing='public')
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=''),