Как я могу предоставить Flask контекст приложения для задания Flask -APScheduler? - PullRequest
0 голосов
/ 19 апреля 2020

У меня проблемы с Flask контекстом приложения и Python импортом / экспортом.

У меня есть следующее задание, настроенное с помощью Flask -APScheduler, это работает как положено:

from flask import Flask
from flask_cors import CORS
from flask_apscheduler import APScheduler
import time

from src.server import api_bp
from src.database import db, ma
from src.models.subject import Subject


def send_notifications():
    with app.app_context():
        print(time.strftime("%A, %d.%B %Y %I:%M:%S %p"))

        subjects = Subject.query.all()
        print(subjects)


def create_app():
    app = Flask(__name__)
    app.config.from_object("config")
    CORS(app)
    db.init_app(app)
    ma.init_app(app)

    app.register_blueprint(api_bp, url_prefix='/api')

    scheduler = APScheduler()
    scheduler.init_app(app)
    scheduler.add_job(id='1', func=send_notifications, trigger="interval", seconds=3)
    scheduler.start()

    return app


# If we're running in stand alone mode, run the application
if __name__ == '__main__':
    app = create_app()
    app.run(debug=True, host='0.0.0.0')

Однако, если я хочу разбить функцию send_notification на ее собственную файл, я не уверен, как это сделать.

Я пробовал следующее:

import time
from ..models.subject import Subject


def send_notifications():
    with app.app_context():
        print(time.strftime("%A, %d.%B %Y %I:%M:%S %p"))

        subjects = Subject.query.all()
        print(subjects)

но я получаю эту ошибку:

    'No application found. Either work inside a view function or push'
RuntimeError: No application found. Either work inside a view function or push an application context. 

В идеале, моя структура папок должна выглядеть следующим образом:

  • application.py (выше)
  • / ср c
    • / запланировано
    • -notify.py (с вышеуказанной функцией)

Однако я не могу получить контекст приложения Flask для распознавания, если только У меня есть функция в том же файле, что и инициализация приложения. Любая помощь?

...