«flask экземпляр» не имеет атрибута «запись» ошибка - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть проект, в котором я пытаюсь построить API с использованием flask и python со следующей структурой:

graph:
    -app.py
    -server.py
    -apis:
        -__init__.py
        -users.py
        -transaction_functions.py
        -neo4j_ops.py

В файле server.py я пытаюсь добавить аутентификацию в конечные точки моего API, которые закодированы в файле users.py. Мой файл server.py выглядит следующим образом:

import json
from six.moves.urllib.request import urlopen
from functools import wraps

from flask import Flask, request, jsonify, _request_ctx_stack
from flask_cors import cross_origin
from jose import jwt



AUTH0_DOMAIN = 'mydomain.eu'
API_AUDIENCE = 'https://my_audience.com'
ALGORITHMS = ["RS256"]


APP = Flask(__name__)

# Error handler
class AuthError(Exception):
    def __init__(self, error, status_code):
        self.error = error
        self.status_code = status_code

@APP.errorhandler(AuthError)
def handle_auth_error(ex):
    #some code


# Format error response and append status code
def get_token_auth_header():
    """Obtains the Access Token from the Authorization Header
    """
    # some code
    return token

def requires_auth(f):
    """Determines if the Access Token is valid
    """
    @wraps(f)
    def decorated(*args, **kwargs):
        #some code
    return decorated


def requires_scope(required_scope):
    """Determines if the required scope is present in the Access Token
    Args:
        required_scope (str): The scope required to access the resource
    """
    #some code

И я продолжаю получать эту ошибку:

Traceback (most recent call last):
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 183, in init_app
    app.record(self._deferred_blueprint_init)
AttributeError: 'Flask' object has no attribute 'record'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "app.py", line 16, in <module>
    api.init_app(app)
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 186, in init_app
    self._init_app(app)
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 204, in _init_app
    self._register_view(app, resource, *urls, **kwargs)
  File "C:\Python37\lib\site-packages\flask_restplus\api.py", line 282, in _register_view
    resource_func = self.output(resource.as_view(endpoint, self, *resource_class_args,
AttributeError: 'function' object has no attribute 'as_view'

Как вы можете видеть, результат этого стека печати не очень полезен, поскольку ни один из этих вызовов не поступил ни из одного из моих файлов. Единственный задействованный файл - это app.py, и он выглядит так:

from flask import Flask
from flask_restplus import Api
from apis import api
import config
import os

app = Flask(__name__)

api.init_app(app)#traceback comes from here.
app.run(host='0.0.0.0', port=8080)

Файл apis/__init__.py выглядит так:

from flask_restplus import Api, fields
from .users import api as users
from flask import Flask



api = Api(
    title='Graph Api',
    version='0.2',
)

api.add_namespace(users)

Любое представление о проблеме ? Если я импортирую приложение (экземпляр flask) из app.py в server.py и использую этот экземпляр flask, созданный в приложении, вместо создания нового целого экземпляра flask в server.py, то ошибка исчезнет, ​​но проблема заключается в том, что я бы затем создал циклический вызов зависимостей, поэтому я не могу этого сделать.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Проблема перестала существовать, как только я вернулся к версии кода до добавления файла server.py, а затем добавил его снова. Я не имею ни малейшего представления о том, что проблема была, хотя код на самом деле тот же.

0 голосов
/ 18 февраля 2020

У вас уже есть приложение

APP = Flask(__name__)

И ваш обработчик ошибок по крайней мере использует это

Тем не менее, вы определили второе

app = Flask(__name__)

И __name__ здесь app (имя файла), что, вероятно, является причиной взлома и почему файл сервера не поврежден

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...