flask python ошибка создания документа swagger - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь сгенерировать документацию для API, которую я строю в flask, однако, когда я выполняю код ниже, я получаю очень серьезную ошибку, Что мне здесь не хватает?

Это то, что у меня есть попробовал:

try:
    from flask import Flask, g, request
    from flask_restful import Resource, Api
    from flask_limiter.util import get_remote_address
    from flask_limiter import Limiter
    from flasgger import Swagger
    from flasgger.utils import swag_from
    from flask_restful_swagger import swagger
    from flask_httpauth import HTTPTokenAuth
    import os
    import json
except Exception as e:
    print("some modules are missing {}".format(e))  

app = Flask(__name__)
api = Api(app)
limiter = Limiter(app, key_func=get_remote_address)
limiter.init_app(app)
api = swagger.docs(Api(app), apiVersion='0.1', api_spec_url='/doc')

auth = HTTPTokenAuth(scheme='Token')

tokens = {
    'awserftggyjkk34)ghtyrjrhhye34nnmw': 'cadmin',
    'bwsosjhee(dhj345gtyuioplsertbsjkl': 'dadmin',
    'mnchthas(sjklertyusvfgmbshdls234h': 'eadmin'

}
@auth.verify_token
def verify_token(token):
   if token in tokens:
       g.current_user = tokens[token]
       return True
   return False

class defr(Resource):

    decorators = [limiter.limit("100/day")]
    @swagger.model
    @swagger.operation(notes='my notes ntes')
    @auth.login_required
    def currentuser(self):
        return "Hello, %s!" % g.current_user


api.add_resource(defr, '/user')

ошибка:

  File "C:\Users\codamd\AppData\Local\Continuum\anaconda3\lib\site-packages\flask_restful_swagger\swagger.py", line 294, in extract_operations
    for method in [m.lower() for m in resource.methods]:

TypeError: 'NoneType' object is not iterable

Любая помощь будет отличной

1 Ответ

0 голосов
/ 09 апреля 2020

Проблема здесь в том, что вы использовали пользовательский именованный метод в вашем классе defr. Flask -RESTful документация определяет определение HTTP-методов в вашем Resource классе, например

class defr(Resource):

    decorators = [limiter.limit("100/day")]
    @swagger.model
    @swagger.operation(notes='my notes ntes')
    @auth.login_required
    def get(self):
        return "Hello, %s!" % g.current_user

...