не импортировать приложение из приложения (колбу), когда я создаю приложение из функции - PullRequest
0 голосов
/ 11 декабря 2018

Я использую колбу, конфигурация по умолчанию:

from flask import Flask
app = Flask(name)

Хорошо, это работает, но я хочу сделать другой способ инициализации моего приложения Flask, я хочу создать пакет, чтобы сделать это.

Я пытаюсь получить флешку приложения из пакета, поэтому я создаю пакет, и внутри этого pkg у меня есть функция:

import json
from flask import Flask
from flask_cors import CORS, cross_origin

BASE_URL = '/api/'
cors_default = {
        "api/ping": {"origins": "*"}
}

app = None

def factory(fn, name, cors=None):
    global app
    app = Flask(name)
    CORS(app, resources={json.dumps(cors_default)})
    if cors:
        CORS(app, resources=json.dumps({**cors, **cors_default})) 

    from bigbang_flask.app.routes import ping
    app.add_url_rule(BASE_URL + "ping", "PING", ping.route, methods=["GET"])

    fn(app)
    return app
print('API is running...')

хорошо, она работает хорошо, она создаетсякласс Flask, он вызывает функцию fn(), которая получает экземпляр приложения, все в этом методе (который находится внутри моего pkg) работает.

Итак, в моем приложении, которое использует этот pkg, в моем app/__.init__.py каталог, который у меня есть:

import json
from bigbang_flask.app import factory as appFactory

def fn(applib):
    # Routes files
    from app.presentation.routes import blur as blur_detection

    # Routes rules
    applib.add_url_rule('/api/blur', 'BLUR', blur_detection.route, methods=['POST'])

# Config
config = json.load(open('./app/config.json'))
app =  appFactory(fn, __name__, config["cors"])

хорошо, он работает хорошо, он вызывает apFactory, он инициализирует мой сервер с моими маршрутами, все здесь нормально.

[Моя проблема]

Когда я пытался получить доступ к приложению в другую папку / скрипт, я получаю ошибку: cannot import name 'app' from 'app'

пример: я нахожусь в каталоге app/presentation/utils/response.py, presentation и utilsв папках есть пустой файл __init__.py, внутри моего response.py у меня есть только функция:

import json
from app import app

def factory(
    content, 
    status=200, 
    headers=None,
    mimetype='application/json', 
    content_type='application/json'):

    content = json.dumps(content)
    return app.response_class(
            response = content,
            status= status,
            headers = headers,
            direct_passthrough=False,
            mimetype='application/json',
            content_type='application/json'
        )

И вот моя проблема, в этомфайл, который я не могу импортировать в приложение.

Если я поставлю app = Flask(__name__) после импорта на app/__init__.py, это работает, но я не могу иметь колбу внутри app/__init__.py, потому что хочу получитьэто из моего pkg (bigbang_flask):

import json
from flask import Flask
from bigbang_flask.app import factory as appFactory

app = Flask(__name__)

def fn(applib):
    # Routes files
    from app.presentation.routes import blur as blur_detection
[...]

кто-нибудь может мне помочь?

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