v1.3.4 플러그인 구조를 가이드에 맞춰 변경

This commit is contained in:
joyfuI
2020-03-15 15:29:32 +09:00
parent d5f6084664
commit 728967327e
7 changed files with 273 additions and 212 deletions

View File

@@ -1,22 +1,24 @@
# -*- coding: utf-8 -*-
#########################################################
# python
import traceback
import os
# third-party
# sjva 공용
from framework import app, db, path_app_root
from framework.util import Util
# 패키지
from .plugin import package_name
from .plugin import logger, package_name
db_file = os.path.join(path_app_root, 'data', 'db', '%s.db' % package_name)
app.config['SQLALCHEMY_BINDS'][package_name] = 'sqlite:///%s' % db_file
app.config['SQLALCHEMY_BINDS'][package_name] = 'sqlite:///%s' % (os.path.join(path_app_root, 'data', 'db', '%s.db' % package_name))
#########################################################
class ModelSetting(db.Model):
__tablename__ = 'plugin_%s_setting' % package_name
__table_args__ = { 'mysql_collate': 'utf8_general_ci' }
__tablename__ = '%s_setting' % package_name
__table_args__ = {'mysql_collate': 'utf8_general_ci'}
__bind_key__ = package_name
id = db.Column(db.Integer, primary_key=True)
@@ -31,6 +33,79 @@ class ModelSetting(db.Model):
return repr(self.as_dict())
def as_dict(self):
return { x.name: getattr(self, x.name) for x in self.__table__.columns }
return {x.name: getattr(self, x.name) for x in self.__table__.columns}
#########################################################
@staticmethod
def get(key):
try:
return db.session.query(ModelSetting).filter_by(key=key).first().value.strip()
except Exception as e:
logger.error('Exception:%s %s', e, key)
logger.error(traceback.format_exc())
@staticmethod
def get_int(key):
try:
return int(ModelSetting.get(key))
except Exception as e:
logger.error('Exception:%s %s', e, key)
logger.error(traceback.format_exc())
@staticmethod
def get_bool(key):
try:
return ModelSetting.get(key) == 'True'
except Exception as e:
logger.error('Exception:%s %s', e, key)
logger.error(traceback.format_exc())
@staticmethod
def set(key, value):
try:
item = db.session.query(ModelSetting).filter_by(key=key).with_for_update().first()
if item is not None:
item.value = value.strip()
db.session.commit()
else:
db.session.add(ModelSetting(key, value.strip()))
except Exception as e:
logger.error('Exception:%s', e)
logger.error(traceback.format_exc())
logger.error('Error Key:%s Value:%s', key, value)
@staticmethod
def to_dict():
try:
return Util.db_list_to_dict(db.session.query(ModelSetting).all())
except Exception as e:
logger.error('Exception:%s', e)
logger.error(traceback.format_exc())
@staticmethod
def setting_save(req):
try:
for key, value in req.form.items():
if key in ['scheduler', 'is_running']:
continue
if key.startswith('tmp_'):
continue
logger.debug('Key:%s Value:%s', key, value)
entity = db.session.query(ModelSetting).filter_by(key=key).with_for_update().first()
entity.value = value
db.session.commit()
return True
except Exception as e:
logger.error('Exception:%s', e)
logger.error(traceback.format_exc())
return False
@staticmethod
def get_list(key):
try:
value = ModelSetting.get(key)
values = [x.strip().strip() for x in value.replace('\n', '|').split('|')]
values = Util.get_list_except_empty(values)
return values
except Exception as e:
logger.error('Exception:%s %s', e, key)
logger.error(traceback.format_exc())