Files
inflearn/logic.py
2022-05-13 20:24:03 +09:00

144 lines
4.3 KiB
Python
Executable File

# -*- coding: utf-8 -*-
#########################################################
# python
import os
import sys
import traceback
import logging
import threading
import time
# third-party
from sqlalchemy import desc
# sjva 공용
from framework import db, scheduler, path_data
from framework.job import Job
from framework.util import Util
from framework.logger import get_logger
# 패키지
# from .plugin import package_name, logger
from .model import ModelSetting
from .logic_queue import LogicQueue
from .logic_inflearn import LogicInflearn
#########################################################
package_name = __name__.split(".")[0]
logger = get_logger(package_name)
class Logic(object):
db_default = {
"inflearn_url": "https://www.inflearn.com",
"download_path": os.path.join(path_data, "inflearn"),
"inflearn_auto_make_folder": "True",
"inflearn_auto_make_season_folder": "True",
"inflearn_finished_insert": "[완결]",
"include_date": "False",
"date_option": "0", # 0:YYMMDD, 1:YYYY-MM-DD
"auto_make_folder": "True",
"max_ffmpeg_process_count": "4",
"auto_interval": "* 20 * * *",
"auto_start": "False",
"whitelist_program": "",
}
@staticmethod
def db_init():
try:
logger.debug(Logic.db_default.items())
for key, value in Logic.db_default.items():
logger.debug(f"{key}: {value}")
if db.session.query(ModelSetting).filter_by(key=key).count() == 0:
db.session.add(ModelSetting(key, value))
db.session.commit()
except Exception as e:
logger.error("Exception:%s", e)
logger.error(traceback.format_exc())
@staticmethod
def plugin_load():
try:
logger.debug("%s plugin_load", package_name)
# DB 초기화
Logic.db_init()
if ModelSetting.get("auto_start") == "True":
Logic.scheduler_start()
# 편의를 위해 json 파일 생성
from .plugin import plugin_info
Util.save_from_dict_to_json(
plugin_info, os.path.join(os.path.dirname(__file__), "info.json")
)
LogicQueue.queue_start()
except Exception as e:
logger.error("Exception:%s", e)
logger.error(traceback.format_exc())
@staticmethod
def plugin_unload():
try:
logger.debug("%s plugin_unload", package_name)
except Exception as e:
logger.error("Exception:%s", e)
logger.error(traceback.format_exc())
@staticmethod
def scheduler_start():
try:
interval = ModelSetting.get("auto_interval")
job = Job(
package_name,
package_name,
interval,
Logic.scheduler_function,
"인프런 다운로드",
True,
)
scheduler.add_job_instance(job)
except Exception as e:
logger.error("Exception:%s", e)
logger.error(traceback.format_exc())
@staticmethod
def scheduler_stop():
try:
scheduler.remove_job(package_name)
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():
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())
logger.error("key:%s value:%s", key, value)
return False
@staticmethod
def scheduler_function():
try:
LogicLinkkfYommi.scheduler_function()
except Exception as e:
logger.error("Exception:%s", e)
logger.error(traceback.format_exc())
# 기본 구조 End
##################################################################