# -*- coding: utf-8 -*- version = "0.0.1.0" # =================================================== import os import sys import json import platform path_app_root = os.path.dirname( os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ) path_data = os.path.join(path_app_root, "data") flag_system_loading = False import traceback # third - party from flask import ( Flask, redirect, render_template, Response, request, jsonify, send_file, send_from_directory, abort, Markup, ) from flask_socketio import SocketIO, emit from flask_sqlalchemy import SQLAlchemy from flask_login import ( LoginManager, login_user, logout_user, current_user, login_required, ) # gommi 공용 from .init_args import args from .py_version_func import * from framework.logger import get_logger from framework.class_scheduler import Scheduler from .menu import init_menu, get_menu_map from .user import User from .init_etc import make_default_dir, config_initialize, check_api from .init_web import jinja_initialize # ================================================= # App Start # ================================================= # 기본디렉토리 생성 make_default_dir(path_data) package_name = __name__.split(".")[0] print(package_name) logger = get_logger(package_name) print(logger) try: # pass # Global logger.debug("Path app root : %s", path_app_root) logger.debug("Path app data : %s", path_data) logger.debug("Platform : %s", platform.system()) app = Flask("gommi") app.secret_key = os.urandom(24) # ------------------------------ # sqlAlchemy # ------------------------------ app.config[ "SQLALCHEMY_DATABASE_URI" ] = "sqlite:///data/db/gommi.db?check_same_thread=False" app.config["SQLALCHEMY_BINDS"] = {"gommi": "sqlite:///data/db/gommi.db"} app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False app.config["TEMPLATES_AUTO_RELOAD"] = True app.config["config"] = {} app.config["JSON_AS_ASCII"] = False config_initialize("start") db = SQLAlchemy(app, session_options={"autoflush": False}) scheduler = Scheduler(args) if args is not None and args.use_gevent is False: socketio = SocketIO( app, cors_allowed_origins="*", async_mode="threading" ) else: socketio = SocketIO( app, cors_allowed_origins="*" ) # , async_mode='gevent') from flask_cors import CORS CORS(app) # markdown extension from flaskext.markdown import Markdown Markdown(app) # login manager login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = "login" exit_code = -1 # 추후 삭제 # USERS = { # "sjva" + version: User("sjva" + version, passwd_hash="sjva" + version), # } # app route가 되어 있는데 import 해야지만 routing이 됨 from .log_viewer import * # from .manual import * USERS = { "gommi": User("sjva", passwd_hash="sjva"), "sjva": User("sjva", passwd_hash="sjva"), } from .init_celery import celery import framework.common.celery # ======================================================================== # system plugin # ======================================================================== import system from system.model import ModelSetting as SystemModelSetting # epg 없이 klive 만 있고 db 파일이 없을 때 아예 다른 모듈이 로딩안되는 문제 발생 # klive에서 epg 칼럼을 참조해서 그러는것 같음. 방어코드이나 확인못함 try: db.create_all() except Exception as exception: logger.error("CRITICAL db.create_all()!!!") logger.error("Exception:%s", exception) logger.error(traceback.format_exc()) # 인증처리 config_initialize("auth") system.plugin_load() flag_system_loading = True # 로그레벨에서 사용. 필요한가?? # app blueprint 등록 app.register_blueprint(system.blueprint) config_initialize("system_loading_after") plugin_menu = [] plugin_menu.append(system.menu) plugin_instance_list = {} jinja_initialize(app) # ------------------------------------------ # plugins # ------------------------------------------ system.LogicPlugin.custom_plugin_update() from .init_plugin import plugin_init plugin_init() logger.debug("#------------ plugin loading completed ------------") # ------------------------------------------ # menu # ------------------------------------------ init_menu(plugin_menu) system.SystemLogic.apply_menu_link() logger.debug("#-------- menu loading completed ------") logger.debug("### init app.config['config]") app.config["config"]["port"] = 0 if sys.argv[0] == "gommi.py" or sys.argv[0] == "gommi3.py": try: app.config["config"]["port"] = SystemModelSetting.get_int("port") if ( app.config["config"]["port"] == 19999 and app.config["config"]["running_type"] == "docker" and not os.path.exists("/usr/sbin/nginx") ): SystemModelSetting.set("port", "7771") app.config["config"]["port"] = 7771 except Exception: app.config["config"]["port"] = 7771 if args is not None: if args.port is not None: app.config["config"]["port"] = args.port app.config["config"]["repeat"] = args.repeat app.config["config"]["use_celery"] = args.use_celery if platform.system() == "Windows": app.config["config"]["use_celery"] = False app.config["config"]["use_gevent"] = args.use_gevent logger.debug("### config ###") logger.debug(json.dumps(app.config["config"], indent=4)) logger.debug("### LAST") logger.debug("### PORT:%s", app.config["config"]["port"]) logger.debug("### Now you can access GOMMI by webbrowser!!") except Exception as exception: logger.error("Exception:%s", exception) logger.error(traceback.format_exc()) # 반드시 마지막에 # import init_route from .init_route import *