This commit is contained in:
flaskfarm
2022-10-25 12:12:04 +09:00
parent b19a5072ba
commit 26835c2cbb
14 changed files with 545 additions and 548 deletions

View File

@@ -44,7 +44,7 @@ class PluginBase(object):
self.ModelSetting = None
if setting.get('use_db', True):
db_path = os.path.join(F.config['path_data'], 'db', f'{self.package_name}.db')
F.app.config['SQLALCHEMY_BINDS'][self.package_name] = f"sqlite:///{db_path}"
F.app.config['SQLALCHEMY_BINDS'][self.package_name] = f"sqlite:///{db_path}?check_same_thread=False"
if setting.get('use_default_setting', True):
self.ModelSetting = get_model_setting(self.package_name, self.logger)

View File

@@ -84,47 +84,47 @@ class Logic(object):
self.P.logger.error(traceback.format_exc())
def scheduler_start(self, sub):
def scheduler_start(self, module_name):
try:
job_id = '%s_%s' % (self.P.package_name, sub)
module = self.get_module(sub)
job = Job(self.P.package_name, job_id, module.get_scheduler_interval(), self.scheduler_function, module.get_scheduler_desc(), args=sub)
job_id = '%s_%s' % (self.P.package_name, module_name)
module = self.get_module(module_name)
job = Job(self.P.package_name, job_id, module.get_scheduler_interval(), self.scheduler_function, module.get_scheduler_desc(), args=module_name)
F.scheduler.add_job_instance(job)
except Exception as e:
self.P.logger.error(f'Exception:{str(e)}')
self.P.logger.error(traceback.format_exc())
def scheduler_stop(self, sub):
def scheduler_stop(self, module_name):
try:
job_id = '%s_%s' % (self.P.package_name, sub)
job_id = '%s_%s' % (self.P.package_name, module_name)
F.scheduler.remove_job(job_id)
except Exception as e:
self.P.logger.error(f'Exception:{str(e)}')
self.P.logger.error(traceback.format_exc())
def scheduler_function(self, sub):
def scheduler_function(self, module_name):
try:
module = self.get_module(sub)
module = self.get_module(module_name)
module.scheduler_function()
except Exception as e:
self.P.logger.error(f'Exception:{str(e)}')
self.P.logger.error(traceback.format_exc())
def reset_db(self,sub):
def reset_db(self, module_name):
try:
module = self.get_module(sub)
module = self.get_module(module_name)
return module.reset_db()
except Exception as e:
self.P.logger.error(f'Exception:{str(e)}')
self.P.logger.error(traceback.format_exc())
def one_execute(self, sub):
self.P.logger.debug('one_execute :%s', sub)
def one_execute(self, module_name):
self.P.logger.debug('one_execute :%s', module_name)
try:
job_id = '%s_%s' % (self.P.package_name, sub)
job_id = '%s_%s' % (self.P.package_name, module_name)
if F.scheduler.is_include(job_id):
if F.scheduler.is_running(job_id):
ret = 'is_running'
@@ -134,7 +134,7 @@ class Logic(object):
else:
def func():
time.sleep(2)
self.scheduler_function(sub)
self.scheduler_function(module_name)
threading.Thread(target=func, args=()).start()
ret = 'thread'
except Exception as e:
@@ -143,12 +143,12 @@ class Logic(object):
ret = 'fail'
return ret
def immediately_execute(self, sub):
self.P.logger.debug('immediately_execute :%s', sub)
def immediately_execute(self, module_name):
self.P.logger.debug('immediately_execute :%s', module_name)
try:
def func():
time.sleep(1)
self.scheduler_function(sub)
self.scheduler_function(module_name)
threading.Thread(target=func, args=()).start()
ret = {'ret':'success', 'msg':'실행합니다.'}
except Exception as e:
@@ -175,6 +175,65 @@ class Logic(object):
self.P.logger.error(f'Exception:{str(e)}')
self.P.logger.error(traceback.format_exc())
#######################################################
# 플러그인 - 모듈 - 페이지 구조하에서 서브 관련 함수

View File

@@ -14,6 +14,16 @@ class PluginModuleBase(object):
self.socketio_list = None
self.page_list = None
def get_module(self, module_name):
try:
for module in self.P.module_list:
if module.name == module_name:
return module
except Exception as e:
self.P.logger.error(f'Exception:{str(e)}')
self.P.logger.error(traceback.format_exc())
# set_module_list 대응
def set_page_list(self, page_list):
try:
@@ -87,7 +97,7 @@ class PluginModuleBase(object):
def get_first_menu(self):
return self.first_menu
def get_scheduler_name(self):
def get_scheduler_id(self):
return '%s_%s' % (self.P.package_name, self.name)
def dump(self, data):

View File

@@ -1,5 +1,5 @@
import traceback
from datetime import datetime
from datetime import datetime, timedelta
from framework import F
@@ -8,7 +8,7 @@ class ModelBase(F.db.Model):
__abstract__ = True
__table_args__ = {'mysql_collate': 'utf8_general_ci'}
model_setting = None
logger = None
P = None
def __repr__(self):
return repr(self.as_dict())
@@ -24,8 +24,8 @@ class ModelBase(F.db.Model):
F.db.session.commit()
return self
except Exception as e:
self.logger.error(f'Exception:{str(e)}')
self.logger.error(traceback.format_exc())
self.P.logger.error(f'Exception:{str(e)}')
self.P.logger.error(traceback.format_exc())
@classmethod
def get_paging_info(cls, count, current_page, page_size):
@@ -48,8 +48,8 @@ class ModelBase(F.db.Model):
F.logger.debug('paging : c:%s %s %s %s %s %s', count, paging['total_page'], paging['prev_page'], paging['next_page'] , paging['start_page'], paging['last_page'])
return paging
except Exception as e:
F.logger.error(f'Exception:{str(e)}')
F.logger.error(traceback.format_exc())
cls.P.logger.error(f'Exception:{str(e)}')
cls.P.logger.error(traceback.format_exc())
@classmethod
@@ -58,8 +58,8 @@ class ModelBase(F.db.Model):
with F.app.app_context():
return F.db.session.query(cls).filter_by(id=int(id)).first()
except Exception as e:
F.logger.error(f'Exception:{str(e)}')
F.logger.error(traceback.format_exc())
cls.P.logger.error(f'Exception:{str(e)}')
cls.P.logger.error(traceback.format_exc())
@classmethod
@@ -71,8 +71,8 @@ class ModelBase(F.db.Model):
tmp = [x.as_dict() for x in tmp]
return tmp
except Exception as e:
F.logger.error(f'Exception:{str(e)}')
F.logger.error(traceback.format_exc())
cls.P.logger.error(f'Exception:{str(e)}')
cls.P.logger.error(traceback.format_exc())
@@ -84,20 +84,32 @@ class ModelBase(F.db.Model):
F.db.session.commit()
return True
except Exception as e:
F.logger.error(f'Exception:{str(e)}')
F.logger.error(traceback.format_exc())
cls.P.logger.error(f'Exception:{str(e)}')
cls.P.logger.error(traceback.format_exc())
return False
@classmethod
def delete_all(cls):
def delete_all(cls, days=None):
try:
with F.app.app_context():
F.db.session.query(cls).delete()
F.db.session.commit()
if days == None:
F.db.session.query(cls).delete()
F.db.session.commit()
else:
now = datetime.datetime.now()
ago = now - datetime.timedelta(days=days)
ret = F.db.session.query(cls).filter(cls.created_time > ago).delete()
cls.P.debug(ret)
return True
except Exception as e:
F.logger.error(f'Exception:{str(e)}')
F.logger.error(traceback.format_exc())
cls.P.logger.error(f'Exception:{str(e)}')
cls.P.logger.error(traceback.format_exc())
return False
@@ -111,12 +123,12 @@ class ModelBase(F.db.Model):
if 'page' in req.form:
page = int(req.form['page'])
if 'keyword' in req.form:
search = req.form['keyword']
search = req.form['keyword'].strip()
option1 = req.form.get('option1', 'all')
option2 = req.form.get('option2', 'all')
order = req.form['order'] if 'order' in req.form else 'desc'
query = cls.make_query(order=order, search=search, option1=option1, option2=option2)
query = cls.make_query(req, order=order, search=search, option1=option1, option2=option2)
count = query.count()
query = query.limit(page_size).offset((page-1)*page_size)
F.logger.debug('cls count:%s', count)
@@ -124,21 +136,21 @@ class ModelBase(F.db.Model):
ret['list'] = [item.as_dict() for item in lists]
ret['paging'] = cls.get_paging_info(count, page, page_size)
try:
if cls.model_setting is not None and cls.__tablename__ is not None:
cls.model_setting.set(f'{cls.__tablename__}_last_list_option', f'{order}|{page}|{search}|{option1}|{option2}')
if cls.P.ModelSetting is not None and cls.__tablename__ is not None:
cls.P.ModelSetting.set(f'{cls.__tablename__}_last_list_option', f'{order}|{page}|{search}|{option1}|{option2}')
except Exception as e:
F.logger.error('Exception:%s', e)
F.logger.error(traceback.format_exc())
F.logger.error(f'{cls.__tablename__}_last_list_option ERROR!' )
return ret
except Exception as e:
F.logger.error('Exception:%s', e)
F.logger.error(traceback.format_exc())
cls.P.logger.error('Exception:%s', e)
cls.P.logger.error(traceback.format_exc())
# 오버라이딩
@classmethod
def make_query(cls, order='desc', search='', option1='all', option2='all'):
def make_query(cls, req, order='desc', search='', option1='all', option2='all'):
with F.app.app_context():
query = F.db.session.query(cls)
return query

View File

@@ -101,7 +101,7 @@ def get_model_setting(package_name, logger, table_name=None):
for key, value in req.form.items():
if key in ['scheduler', 'is_running']:
continue
if key.startswith('global_') or key.startswith('tmp_') or key.startswith('_'):
if key.startswith('global') or key.startswith('tmp_') or key.startswith('_'):
continue
#logger.debug('Key:%s Value:%s', key, value)
if ModelSetting.get(key) != value:

View File

@@ -92,42 +92,37 @@ def default_route(P):
for module in P.module_list:
module.setting_save_after(change_list)
return jsonify(ret)
elif sub == 'scheduler':
sub = request.form['sub']
go = request.form['scheduler']
P.logger.debug('scheduler :%s', go)
if go == 'true':
P.logic.scheduler_start(sub)
else:
P.logic.scheduler_stop(sub)
return jsonify(go)
elif sub == 'reset_db':
sub = request.form['sub']
ret = P.logic.reset_db(sub)
return jsonify(ret)
elif sub == 'one_execute':
sub = request.form['sub']
ret = P.logic.one_execute(sub)
return jsonify(ret)
elif sub == 'immediately_execute':
sub = request.form['sub']
ret = P.logic.immediately_execute(sub)
return jsonify(ret)
except Exception as exception:
P.logger.error('Exception:%s', exception)
P.logger.error(traceback.format_exc())
@P.blueprint.route('/ajax/<mod>/<cmd>', methods=['GET', 'POST'])
@P.blueprint.route('/ajax/<module_name>/<cmd>', methods=['GET', 'POST'])
@login_required
def second_ajax(mod, cmd):
def second_ajax(module_name, cmd):
try:
for module in P.module_list:
if mod == module.name:
if module_name == module.name:
if cmd == 'command':
return module.process_command(request.form['command'], request.form.get('arg1'), request.form.get('arg2'), request.form.get('arg3'), request)
else:
return module.process_ajax(cmd, request)
elif cmd == 'scheduler':
go = request.form['scheduler']
if go == 'true':
P.logic.scheduler_start(module_name)
else:
P.logic.scheduler_stop(module_name)
return jsonify(go)
elif cmd == 'reset_db':
ret = P.logic.reset_db(module_name)
return jsonify(ret)
elif cmd == 'one_execute':
ret = P.logic.one_execute(module_name)
return jsonify(ret)
elif cmd == 'immediately_execute':
ret = P.logic.immediately_execute(module_name)
return jsonify(ret)
except Exception as exception:
P.logger.error('Exception:%s', exception)
P.logger.error(traceback.format_exc())