linkkf 로직수정중
This commit is contained in:
@@ -8,14 +8,15 @@ import time
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
|
||||
import redis
|
||||
import yaml
|
||||
from flask import Flask
|
||||
from flask_cors import CORS
|
||||
from flask_login import LoginManager, login_required
|
||||
from flask_socketio import SocketIO
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flaskext.markdown import Markdown
|
||||
from pytz import timezone, utc
|
||||
from werkzeug.middleware.proxy_fix import ProxyFix
|
||||
|
||||
from .init_declare import CustomFormatter, check_api
|
||||
|
||||
@@ -37,12 +38,15 @@ class Framework:
|
||||
self.db = None
|
||||
self.scheduler = None
|
||||
self.socketio = None
|
||||
self.rd = None
|
||||
self.path_app_root = None
|
||||
self.path_data = None
|
||||
self.users = {}
|
||||
self.get_cache = None
|
||||
|
||||
self.__level_unset_logger_list = []
|
||||
self.__logger_list = []
|
||||
self.all_log_filehandler = None
|
||||
self.__exit_code = -1
|
||||
self.login_manager = None
|
||||
#self.plugin_instance_list = {}
|
||||
@@ -59,14 +63,17 @@ class Framework:
|
||||
def __initialize(self):
|
||||
os.environ["PYTHONUNBUFFERED"] = "1"
|
||||
os.environ['FF'] = "true"
|
||||
os.environ['FF_PYTHON'] = sys.executable
|
||||
self.__config_initialize("first")
|
||||
self.__make_default_dir()
|
||||
|
||||
self.logger = self.get_logger(__package__)
|
||||
self.get_logger('support')
|
||||
import support
|
||||
|
||||
self.__prepare_starting()
|
||||
self.app = Flask(__name__)
|
||||
self.app.wsgi_app = ProxyFix(self.app.wsgi_app, x_proto=1)
|
||||
self.__config_initialize('flask')
|
||||
|
||||
self.__init_db()
|
||||
@@ -82,7 +89,6 @@ class Framework:
|
||||
self.socketio = SocketIO(self.app, cors_allowed_origins="*", async_mode='threading')
|
||||
|
||||
CORS(self.app)
|
||||
Markdown(self.app)
|
||||
|
||||
self.login_manager = LoginManager()
|
||||
self.login_manager.init_app(self.app)
|
||||
@@ -94,10 +100,11 @@ class Framework:
|
||||
self.app.config.update(
|
||||
DROPZONE_MAX_FILE_SIZE = 102400,
|
||||
DROPZONE_TIMEOUT = 5*60*1000,
|
||||
#DROPZONE_ALLOWED_FILE_CUSTOM = True,
|
||||
#DROPZONE_ALLOWED_FILE_TYPE = 'default, image, audio, video, text, app, *.*',
|
||||
DROPZONE_ALLOWED_FILE_CUSTOM = True,
|
||||
DROPZONE_ALLOWED_FILE_TYPE = "image/*, audio/*, video/*, text/*, application/*, *.*",
|
||||
)
|
||||
self.dropzone = Dropzone(self.app)
|
||||
|
||||
|
||||
|
||||
def __init_db(self):
|
||||
@@ -131,19 +138,20 @@ class Framework:
|
||||
|
||||
|
||||
def __init_celery(self):
|
||||
redis_port = 6379
|
||||
try:
|
||||
from celery import Celery
|
||||
|
||||
#if frame.config['use_celery'] == False or platform.system() == 'Windows':
|
||||
if self.config['use_celery'] == False:
|
||||
raise Exception('no celery')
|
||||
|
||||
raise Exception('use_celery=False')
|
||||
from celery import Celery
|
||||
redis_port = os.environ.get('REDIS_PORT', None)
|
||||
if redis_port == None:
|
||||
redis_port = self.config.get('redis_port', None)
|
||||
if redis_port == None:
|
||||
redis_port = '6379'
|
||||
|
||||
self.config['redis_port'] = redis_port
|
||||
self.rd = redis.StrictRedis(host='localhost', port=redis_port, db=0)
|
||||
if self.config['use_celery'] == False:
|
||||
raise Exception('no celery')
|
||||
|
||||
self.app.config['CELERY_BROKER_URL'] = 'redis://localhost:%s/0' % redis_port
|
||||
self.app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:%s/0' % redis_port
|
||||
@@ -166,6 +174,7 @@ class Framework:
|
||||
F.logger.info(f"celery running_type: {running_type}")
|
||||
#F.logger.info(f"celery running_type: {options}")
|
||||
celery.steps['worker'].add(CustomArgs)
|
||||
|
||||
except Exception as e:
|
||||
if self.config['use_celery']:
|
||||
self.logger.error('CELERY!!!')
|
||||
@@ -187,6 +196,14 @@ class Framework:
|
||||
if len(args) > 0 and type(args[0]) == type(dummy_func):
|
||||
return args[0]
|
||||
self.f(*args, **kwargs)
|
||||
try:
|
||||
from .init_cache_manager import _RedisManager, get_cache
|
||||
_RedisManager(host='localhost', port=redis_port)
|
||||
self.get_cache = get_cache
|
||||
except Exception as e:
|
||||
self.logger.error(f"get_cache import error: {str(e)}")
|
||||
self.get_cache = None
|
||||
|
||||
return celery
|
||||
|
||||
|
||||
@@ -201,11 +218,13 @@ class Framework:
|
||||
self.logger.error(f'Exception:{str(e)}')
|
||||
self.logger.error(traceback.format_exc())
|
||||
self.SystemModelSetting = SystemInstance.ModelSetting
|
||||
SystemInstance.plugin_load()
|
||||
if self.config['run_flask']:
|
||||
SystemInstance.plugin_load()
|
||||
self.app.register_blueprint(SystemInstance.blueprint)
|
||||
self.config['flag_system_loading'] = True
|
||||
self.__config_initialize('member')
|
||||
self.__config_initialize('system_loading_after')
|
||||
self.set_level(self.SystemModelSetting.get_int('log_level'))
|
||||
|
||||
|
||||
def initialize_plugin(self):
|
||||
@@ -232,6 +251,7 @@ class Framework:
|
||||
|
||||
self.__make_default_logger()
|
||||
self.__config_initialize("last")
|
||||
self.config['loading_completed'] = True
|
||||
self.logger.info('### LAST')
|
||||
self.logger.info(f"### PORT: {self.config.get('port')}")
|
||||
self.logger.info('### Now you can access App by webbrowser!!')
|
||||
@@ -248,6 +268,7 @@ class Framework:
|
||||
def __config_initialize(self, mode):
|
||||
if mode == "first":
|
||||
self.config = {}
|
||||
self.config['loading_completed'] = False
|
||||
self.config['os'] = platform.system()
|
||||
self.config['flag_system_loading'] = False
|
||||
#self.config['run_flask'] = True if sys.argv[0].endswith('main.py') else False
|
||||
@@ -263,6 +284,8 @@ class Framework:
|
||||
self.config['export_filepath'] = os.path.join(self.config['path_app'], 'export.sh')
|
||||
self.config['exist_export'] = os.path.exists(self.config['export_filepath'])
|
||||
self.config['recent_version'] = '--'
|
||||
from .version import VERSION
|
||||
self.config['version'] = VERSION
|
||||
self.__process_args()
|
||||
self.__load_config()
|
||||
self.__init_define()
|
||||
@@ -270,7 +293,7 @@ class Framework:
|
||||
self.config['notify_yaml_filepath'] = os.path.join(self.config['path_data'], 'db', 'notify.yaml')
|
||||
if 'running_type' not in self.config:
|
||||
self.config['running_type'] = 'native'
|
||||
|
||||
self.pip_install()
|
||||
elif mode == "flask":
|
||||
self.app.secret_key = os.urandom(24)
|
||||
self.app.config['TEMPLATES_AUTO_RELOAD'] = True
|
||||
@@ -295,8 +318,8 @@ class Framework:
|
||||
self.config['DEFINE'] = {}
|
||||
# 이건 필요 없음
|
||||
self.config['DEFINE']['GIT_VERSION_URL'] = 'https://raw.githubusercontent.com/flaskfarm/flaskfarm/main/lib/framework/version.py'
|
||||
self.config['DEFINE']['CHANGELOG'] = 'https://flaskfarm.github.io/posts/changelog'
|
||||
|
||||
self.config['DEFINE']['CHANGELOG'] = 'https://github.com/flaskfarm/flaskfarm'
|
||||
#self.config['DEFINE']['WEB_DIRECT_URL'] = "http://52.78.103.230:49734"
|
||||
|
||||
|
||||
def __process_args(self):
|
||||
@@ -363,6 +386,9 @@ class Framework:
|
||||
self.config['debug'] = False
|
||||
if self.config.get('plugin_update') == None:
|
||||
self.config['plugin_update'] = True
|
||||
# 2022-11-20
|
||||
if self.config['debug']:
|
||||
self.config['plugin_update'] = False
|
||||
if self.config.get('plugin_loading_only_devpath') == None:
|
||||
self.config['plugin_loading_only_devpath'] = False
|
||||
if self.config.get('plugin_loading_list') == None:
|
||||
@@ -402,8 +428,8 @@ class Framework:
|
||||
try:
|
||||
if self.config['flag_system_loading']:
|
||||
try:
|
||||
from system import SystemModelSetting
|
||||
level = SystemModelSetting.get_int('log_level')
|
||||
#from system import SystemModelSetting
|
||||
level = self.SystemModelSetting.get_int('log_level')
|
||||
except:
|
||||
level = logging.DEBUG
|
||||
if self.__level_unset_logger_list is not None:
|
||||
@@ -426,7 +452,7 @@ class Framework:
|
||||
return converted.timetuple()
|
||||
|
||||
if from_command == False:
|
||||
file_formatter = logging.Formatter(u'[%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s] %(message)s')
|
||||
file_formatter = logging.Formatter(u'[%(asctime)s|%(levelname)s|%(name)s|%(filename)s:%(lineno)s] %(message)s')
|
||||
else:
|
||||
file_formatter = logging.Formatter(u'[%(asctime)s] %(message)s')
|
||||
|
||||
@@ -435,10 +461,18 @@ class Framework:
|
||||
fileHandler = logging.handlers.RotatingFileHandler(filename=os.path.join(self.path_data, 'log', f'{name}.log'), maxBytes=file_max_bytes, backupCount=5, encoding='utf8', delay=True)
|
||||
fileHandler.setFormatter(file_formatter)
|
||||
logger.addHandler(fileHandler)
|
||||
if name == 'framework' and self.all_log_filehandler == None:
|
||||
self.all_log_filehandler = logging.handlers.RotatingFileHandler(filename=os.path.join(self.path_data, 'log', f'all.log'), maxBytes=5*1024*1024, backupCount=5, encoding='utf8', delay=True)
|
||||
self.all_log_filehandler.setFormatter(file_formatter)
|
||||
|
||||
if from_command == False:
|
||||
streamHandler = logging.StreamHandler()
|
||||
streamHandler.setFormatter(CustomFormatter())
|
||||
logger.addHandler(streamHandler)
|
||||
|
||||
if self.all_log_filehandler != None:
|
||||
logger.addHandler(self.all_log_filehandler)
|
||||
|
||||
return logger
|
||||
|
||||
|
||||
@@ -459,7 +493,7 @@ class Framework:
|
||||
def set_level(self, level):
|
||||
try:
|
||||
for l in self.__logger_list:
|
||||
l.setLevel(level)
|
||||
l.setLevel(int(level))
|
||||
self.__make_default_logger()
|
||||
except:
|
||||
pass
|
||||
@@ -468,7 +502,7 @@ class Framework:
|
||||
|
||||
def start(self):
|
||||
host = '0.0.0.0'
|
||||
for i in range(5):
|
||||
for i in range(5):
|
||||
try:
|
||||
#self.logger.debug(d(self.config))
|
||||
# allow_unsafe_werkzeug=True termux nohup 실행시 필요함
|
||||
@@ -517,8 +551,8 @@ class Framework:
|
||||
PluginManager.plugin_unload()
|
||||
with self.app.test_request_context():
|
||||
self.socketio.stop()
|
||||
except Exception as exception:
|
||||
self.logger.error('Exception:%s', exception)
|
||||
except Exception as e:
|
||||
self.logger.error(f"Exception:{str(e)}")
|
||||
self.logger.error(traceback.format_exc())
|
||||
|
||||
def get_recent_version(self):
|
||||
@@ -532,3 +566,11 @@ class Framework:
|
||||
self.logger.error(traceback.format_exc())
|
||||
self.config['recent_version'] = '확인 실패'
|
||||
return False
|
||||
|
||||
|
||||
# dev 도커용. package는 setup에 포함.
|
||||
def pip_install(self):
|
||||
try:
|
||||
import json_fix
|
||||
except:
|
||||
os.system('pip install json_fix')
|
||||
|
||||
Reference in New Issue
Block a user