import os import logging from flask import Flask from ownchatbot.db import get_db from ownchatbot.owncast_com import live_now, award_points from apscheduler.schedulers.background import BackgroundScheduler def create_app(test_config=None): app = Flask(__name__, instance_relative_config=True) try: os.makedirs(app.instance_path) except OSError: pass app.config.from_mapping( DATABASE=os.path.join(app.instance_path, 'ownchatbot.sqlite') ) app.config.from_object('ownchatbot.defaults.config') # Read from config files app.config.from_pyfile('config.py', silent=True) app.config.from_object('ownchatbot.defaults.rewards') app.config.from_pyfile('rewards.py', silent=True) app.config.from_object('ownchatbot.defaults.categories') app.config.from_pyfile('categories.py', silent=True) if app.config['GUNICORN']: # Gunicorn logging integration gunicorn_logger = logging.getLogger('gunicorn.error') app.logger.handlers = gunicorn_logger.handlers app.logger.setLevel(gunicorn_logger.level) from . import webhooks # Set up blueprints from . import web_panels app.register_blueprint(webhooks.ocb) app.register_blueprint(web_panels.ocb) from . import db # Set up db init cli command db.init_app(app) def award_job(): with app.app_context(): if live_now(): award_points(get_db()) banker = BackgroundScheduler() seconds = app.config['POINTS_INTERVAL'] * 60 banker.add_job(award_job, 'interval', seconds=seconds) banker.start() return app if __name__ == '__main__': create_app()