Files
youtube-dl/lib/plugin/model_setting.py

156 lines
5.7 KiB
Python
Raw Normal View History

2022-10-11 16:46:05 +09:00
import traceback
2022-10-17 13:28:55 +09:00
from datetime import datetime
2022-10-02 20:18:05 +09:00
2022-10-11 16:46:05 +09:00
from framework import F
2022-10-02 20:18:05 +09:00
def get_model_setting(package_name, logger, table_name=None):
2022-10-12 15:40:54 +09:00
2022-10-11 16:46:05 +09:00
class ModelSetting(F.db.Model):
2022-10-02 20:18:05 +09:00
__tablename__ = '%s_setting' % package_name if table_name is None else table_name
__table_args__ = {'mysql_collate': 'utf8_general_ci'}
__bind_key__ = package_name
2022-10-11 16:46:05 +09:00
id = F.db.Column(F.db.Integer, primary_key=True)
key = F.db.Column(F.db.String, unique=True, nullable=False)
value = F.db.Column(F.db.String, nullable=False)
2022-10-02 20:18:05 +09:00
def __init__(self, key, value):
self.key = key
self.value = value
def __repr__(self):
return repr(self.as_dict())
def as_dict(self):
return {x.name: getattr(self, x.name) for x in self.__table__.columns}
@staticmethod
def get(key):
try:
2022-10-12 15:40:54 +09:00
with F.app.app_context():
ret = F.db.session.query(ModelSetting).filter_by(key=key).first()
if ret is not None:
return ret.value.strip()
return None
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)} [{key}]")
2022-10-02 20:18:05 +09:00
logger.error(traceback.format_exc())
@staticmethod
def has_key(key):
2022-10-12 15:40:54 +09:00
with F.app.app_context():
return (F.db.session.query(ModelSetting).filter_by(key=key).first() is not None)
2022-10-02 20:18:05 +09:00
@staticmethod
def get_int(key):
try:
return int(ModelSetting.get(key))
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)} [{key}]")
2022-10-02 20:18:05 +09:00
logger.error(traceback.format_exc())
@staticmethod
def get_bool(key):
try:
return (ModelSetting.get(key) == 'True')
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)} [{key}]")
logger.error(traceback.format_exc())
@staticmethod
def get_datetime(key):
try:
2022-10-18 10:31:15 +09:00
tmp = ModelSetting.get(key)
if tmp != None and tmp != '':
return datetime.strptime(tmp, '%Y-%m-%d %H:%M:%S.%f')
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)} [{key}]")
2022-10-02 20:18:05 +09:00
logger.error(traceback.format_exc())
@staticmethod
def set(key, value):
try:
2022-10-12 15:40:54 +09:00
with F.app.app_context():
item = F.db.session.query(ModelSetting).filter_by(key=key).with_for_update().first()
if item is not None:
item.value = value.strip() if value is not None else value
F.db.session.commit()
else:
F.db.session.add(ModelSetting(key, value.strip()))
F.db.session.commit()
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)} [{key}]")
2022-10-02 20:18:05 +09:00
logger.error(traceback.format_exc())
@staticmethod
def to_dict():
try:
2022-10-11 16:46:05 +09:00
ret = ModelSetting.db_list_to_dict(F.db.session.query(ModelSetting).all())
2022-10-02 20:18:05 +09:00
ret['package_name'] = package_name
return ret
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)}")
2022-10-02 20:18:05 +09:00
logger.error(traceback.format_exc())
@staticmethod
def setting_save(req):
try:
change_list = []
for key, value in req.form.items():
if key in ['scheduler', 'is_running']:
continue
2022-10-25 12:12:04 +09:00
if key.startswith('global') or key.startswith('tmp_') or key.startswith('_'):
2022-10-02 20:18:05 +09:00
continue
#logger.debug('Key:%s Value:%s', key, value)
if ModelSetting.get(key) != value:
change_list.append(key)
2022-10-11 16:46:05 +09:00
entity = F.db.session.query(ModelSetting).filter_by(key=key).with_for_update().first()
2025-12-25 19:42:32 +09:00
if entity == None:
logger.warning(f"NOT exist setting key: {key}")
2022-10-02 20:18:05 +09:00
entity.value = value
2022-10-11 16:46:05 +09:00
F.db.session.commit()
2022-10-02 20:18:05 +09:00
return True, change_list
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)}")
2022-10-02 20:18:05 +09:00
logger.error(traceback.format_exc())
logger.debug('Error Key:%s Value:%s', key, value)
return False, []
@staticmethod
2025-12-25 19:42:32 +09:00
def get_list(key, delimeter='\n', comment='#'):
value = None
2022-10-02 20:18:05 +09:00
try:
value = ModelSetting.get(key).replace('\n', delimeter)
if comment is None:
values = [x.strip() for x in value.split(delimeter)]
else:
values = [x.split(comment)[0].strip() for x in value.split(delimeter)]
values = ModelSetting.get_list_except_empty(values)
return values
2022-10-17 13:28:55 +09:00
except Exception as e:
logger.error(f"Exception:{str(e)}")
2022-10-02 20:18:05 +09:00
logger.error(traceback.format_exc())
logger.error('Error Key:%s Value:%s', key, value)
@staticmethod
def get_list_except_empty(source):
tmp = []
for _ in source:
if _.strip().startswith('#'):
continue
if _.strip() != '':
tmp.append(_.strip())
return tmp
2022-10-11 16:46:05 +09:00
@staticmethod
def db_list_to_dict(db_list):
ret = {}
for item in db_list:
ret[item.key] = item.value
return ret
return ModelSetting