first commit
This commit is contained in:
219
lib/framework/__init__.py
Normal file
219
lib/framework/__init__.py
Normal file
@@ -0,0 +1,219 @@
|
||||
# -*- 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 *
|
||||
Reference in New Issue
Block a user