You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.7 KiB
98 lines
2.7 KiB
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# @Time : 2023/5/21 16:49
|
|
# @Author : old tom
|
|
# @File : metadata_compare_task.py
|
|
# @Project : futool-tiny-datahub
|
|
# @Desc : 版本比较任务管理
|
|
from common.futool.core.fu_lang import str_md5
|
|
from datahub.local_db_conf import local_conn
|
|
from datahub.log_conf import log
|
|
from dataclasses import dataclass
|
|
from datahub.metadata.metaversion.versiondao.metadata_task_dao import MetaTaskDao
|
|
|
|
|
|
@dataclass
|
|
class MetadataCompareTask(object):
|
|
# 版本号1
|
|
version_code_1: int
|
|
# 版本号2
|
|
version_code_2: int
|
|
# 版本号1对应的数据源ID
|
|
source_id_1: str
|
|
# 版本号2对应的数据源ID
|
|
source_id_2: str = None
|
|
# 比较任务类型
|
|
compare_task_type: str = 'same' if source_id_2 is None else 'diff'
|
|
|
|
def compare_id_gen(self) -> str:
|
|
"""
|
|
生成任务ID
|
|
:return:
|
|
"""
|
|
return str_md5(''.join([str(getattr(self, x)) for x in self.__dict__.keys()]))
|
|
|
|
|
|
class MetadataCompareTaskManage(object):
|
|
class MetadataCompareTaskError(Exception):
|
|
"""
|
|
自定义异常
|
|
"""
|
|
|
|
def __init__(self, msg=''):
|
|
Exception.__init__(self, msg)
|
|
|
|
"""
|
|
版本比较任务管理
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.dao = MetaTaskDao(local_conn)
|
|
|
|
def create_task(self, task: MetadataCompareTask) -> bool:
|
|
"""
|
|
创建任务
|
|
:return:
|
|
"""
|
|
compare_id = task.compare_id_gen()
|
|
self._check_task_exist(compare_id)
|
|
return self.dao.create_task(compare_id, task.version_code_1, task.version_code_2, task.source_id_1,
|
|
task.source_id_2, task.compare_task_type)
|
|
|
|
def finish_task(self, compare_id):
|
|
"""
|
|
结束任务
|
|
:return:
|
|
"""
|
|
self._check_task_not_exist(compare_id)
|
|
return self.dao.finish_task(compare_id)
|
|
|
|
def has_finished(self, compare_id):
|
|
"""
|
|
判断任务是否结束
|
|
:param compare_id:
|
|
:return:
|
|
"""
|
|
self._check_task_not_exist(compare_id)
|
|
return self.dao.check_task_status(compare_id)
|
|
|
|
def _check_task_exist(self, compare_id):
|
|
"""
|
|
校验任务是否存在
|
|
:param compare_id:
|
|
:return:
|
|
"""
|
|
if self.dao.task_exists(compare_id):
|
|
log.error(f'版本比较任务已存在,任务ID={compare_id}')
|
|
raise self.MetadataCompareTaskError()
|
|
|
|
def _check_task_not_exist(self, compare_id):
|
|
"""
|
|
校验任务是否不存在
|
|
:param compare_id:
|
|
:return:
|
|
"""
|
|
if not self.dao.task_exists(compare_id):
|
|
log.error(f'版本比较任务不存在,请先创建任务')
|
|
raise self.MetadataCompareTaskError()
|