from decorator.singleton import singleton from db.db_conn import db_conn from db.models.tables import RequestTask, RequestTaskLog from datetime import datetime @singleton class RequestTaskRepository(object): """爬取任务相关数据库操作""" def __init__(self) -> None: pass def create_task(self) -> str: """创建任务记录""" # 根据任务编号降序获取历史最新任务 task = db_conn.query_sql(lambda session: session.query(RequestTask).order_by(RequestTask.start_time.desc()).first(), new_session=True) # 创建新任务 if task == None: id = 1 else: id = task.id + 1 new_task = RequestTask(id=id, start_time=datetime.now()) db_conn.insert(new_task) return id def complete_task(self, task_id, s): """完成任务,更新任务状态""" def f(session): task = session.query(RequestTask).filter_by(id=task_id).one() task.end_time = datetime.now() task.running_status = False task.success = s session.commit() return db_conn.query_sql(f, new_session=True) def insert_log(self, task_id, type, log): """记录任务日志""" task_log = RequestTaskLog() task_log.create_time = datetime.now() task_log.request_id = task_id task_log.log_type = type task_log.log = log return db_conn.insert(task_log)