first commit

This commit is contained in:
2022-04-21 19:23:01 +09:00
commit cfd562fd13
152 changed files with 54937 additions and 0 deletions

219
lib/framework/__init__.py Normal file
View 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 *