예제 #1
0
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):
예제 #2
0
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')
예제 #3
0
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'],
예제 #4
0
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=''),