Flask ошибка приложения: работа вне контекста приложения - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь выполнить вставку базы данных в запланированное задание для APScheduler, но при попытке получить

RuntimeError: Working outside of application context.

Вот моя файловая структура

master_content_checklist
                   |app.py
                    flask_mcc
                           |__init__.py
                            mcc.py
                            models.py

Внутри приложения .py

import flask_mcc

app = flask_mcc.create_app()

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)

Внутри моей init.py

import os
from flask import Flask, render_template
from . import mcc
from . import manage_users
from flask_mcc.models import db, User, Role
from flask_sqlalchemy import SQLAlchemy
from flask_user import UserManager


def create_app(test_config=None):
    configure_database(app)
    user_manager = UserManager(app, db, User)
    db.init_app(app)
    app.register_blueprint(mcc.bp)
    app.register_blueprint(manage_users.bp)
    app.app_context().push()
    return app

def configure_database(app):

    @app.before_first_request
    def initialize_database():
        db.create_all()

    @app.teardown_request
    def shutdown_session(exception=None):
        db.session.remove()

в м cc .py

from flask import Flask, render_template, current_app

from flask_mcc.models import Alert

def send_alert(alert):
    with current_app.app_context():
        new_alert = alert
        new_alert.date_live = datetime.datetime.now()
        new_alert.reoccuring = None
        db.session.add(new_alert)
        db.session.commit()
        print(alert.message)

scheduler = BackgroundScheduler(daemon=True)
scheduler.start()
atexit.register(lambda: scheduler.shutdown(wait=False))

def add_reoccuring_alert(alert):
    scheduler.add_job(send_alert, 'cron', month='2', day='3rd fri', hour=11, minute=24, args=[alert], id=str(alert.id))
    scheduler.print_jobs()

так как я понимаю, я не использую контекст приложения правильно внутри моего проекта. Я попытался импортировать его как

from . import app

, а затем сделать

with app.app_context():

, но это тоже не сработало. Моя файловая структура неверна? Должен ли я действительно инициализировать планировщик внутри init .py, но как мне получить к нему доступ в моем проекте? любая помощь будет принята с благодарностью.

...