import logging | |
from flask import Flask | |
from flask_apscheduler import APScheduler | |
from asgiref.wsgi import WsgiToAsgi | |
from routes.main import bp | |
from main import main as data_collection_main | |
class Config: | |
SCHEDULER_API_ENABLED = True # Enables the scheduler's API | |
def create_app(): | |
# Create the Flask application | |
flask_app = Flask(__name__) | |
# Load config for APScheduler | |
flask_app.config.from_object(Config()) | |
# Register our Blueprint | |
flask_app.register_blueprint(bp) | |
logging.basicConfig( | |
format='%(asctime)s - %(levelname)s - %(funcName)s - %(message)s') | |
logging.getLogger().setLevel(logging.ERROR) | |
# Initialize the APScheduler | |
scheduler = APScheduler() | |
scheduler.init_app(flask_app) | |
# Schedule a cron job to run main() every day at 16:00 | |
def scheduled_data_collection(): | |
""" | |
This function runs automatically every day at 16:00 server time. | |
It calls the Prefect flow defined in 'main.py' to collect data. | |
""" | |
data_collection_main() | |
# Start the scheduler | |
scheduler.start() | |
return flask_app | |
app = create_app() | |
asgi_app = WsgiToAsgi(app) | |
if __name__ == '__main__': | |
# Create the Flask app and run it | |
app.run() | |