2024-08-21 06:46:11 +00:00
|
|
|
|
# coding=utf-8
|
|
|
|
|
|
"""
|
|
|
|
|
|
@project: MaxKB
|
|
|
|
|
|
@Author:虎
|
|
|
|
|
|
@file: sync.py
|
|
|
|
|
|
@date:2024/8/20 21:37
|
|
|
|
|
|
@desc:
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
import logging
|
|
|
|
|
|
import traceback
|
|
|
|
|
|
from typing import List
|
|
|
|
|
|
|
|
|
|
|
|
from celery_once import QueueOnce
|
|
|
|
|
|
|
|
|
|
|
|
from common.util.fork import ForkManage, Fork
|
2024-10-25 11:11:49 +00:00
|
|
|
|
from dataset.task.tools import get_save_handler, get_sync_web_document_handler, get_sync_handler
|
2024-08-21 06:46:11 +00:00
|
|
|
|
|
|
|
|
|
|
from ops import celery_app
|
2025-01-13 08:38:28 +00:00
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
2024-08-21 06:46:11 +00:00
|
|
|
|
|
|
|
|
|
|
max_kb_error = logging.getLogger("max_kb_error")
|
|
|
|
|
|
max_kb = logging.getLogger("max_kb")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@celery_app.task(base=QueueOnce, once={'keys': ['dataset_id']}, name='celery:sync_web_dataset')
|
|
|
|
|
|
def sync_web_dataset(dataset_id: str, url: str, selector: str):
|
|
|
|
|
|
try:
|
2025-01-13 08:38:28 +00:00
|
|
|
|
max_kb.info(_('Start--->Start synchronization web knowledge base:{dataset_id}').format(dataset_id=dataset_id))
|
2024-08-21 06:46:11 +00:00
|
|
|
|
ForkManage(url, selector.split(" ") if selector is not None else []).fork(2, set(),
|
|
|
|
|
|
get_save_handler(dataset_id,
|
|
|
|
|
|
selector))
|
2025-01-13 08:38:28 +00:00
|
|
|
|
|
|
|
|
|
|
max_kb.info(_('End--->End synchronization web knowledge base:{dataset_id}').format(dataset_id=dataset_id))
|
2024-08-21 06:46:11 +00:00
|
|
|
|
except Exception as e:
|
2025-01-13 08:38:28 +00:00
|
|
|
|
max_kb_error.error(_('Synchronize web knowledge base:{dataset_id} error{error}{traceback}').format(
|
|
|
|
|
|
dataset_id=dataset_id, error=str(e), traceback=traceback.format_exc()))
|
2024-08-21 06:46:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
2024-12-30 10:13:32 +00:00
|
|
|
|
@celery_app.task(base=QueueOnce, once={'keys': ['dataset_id']}, name='celery:sync_replace_web_dataset')
|
2024-10-25 11:11:49 +00:00
|
|
|
|
def sync_replace_web_dataset(dataset_id: str, url: str, selector: str):
|
|
|
|
|
|
try:
|
2025-01-13 08:38:28 +00:00
|
|
|
|
max_kb.info(_('Start--->Start synchronization web knowledge base:{dataset_id}').format(dataset_id=dataset_id))
|
2024-10-25 11:11:49 +00:00
|
|
|
|
ForkManage(url, selector.split(" ") if selector is not None else []).fork(2, set(),
|
|
|
|
|
|
get_sync_handler(dataset_id
|
|
|
|
|
|
))
|
2025-01-13 08:38:28 +00:00
|
|
|
|
max_kb.info(_('End--->End synchronization web knowledge base:{dataset_id}').format(dataset_id=dataset_id))
|
2024-10-25 11:11:49 +00:00
|
|
|
|
except Exception as e:
|
2025-01-13 08:38:28 +00:00
|
|
|
|
max_kb_error.error(_('Synchronize web knowledge base:{dataset_id} error{error}{traceback}').format(
|
|
|
|
|
|
dataset_id=dataset_id, error=str(e), traceback=traceback.format_exc()))
|
2024-10-25 11:11:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
2024-08-21 06:46:11 +00:00
|
|
|
|
@celery_app.task(name='celery:sync_web_document')
|
|
|
|
|
|
def sync_web_document(dataset_id, source_url_list: List[str], selector: str):
|
|
|
|
|
|
handler = get_sync_web_document_handler(dataset_id)
|
|
|
|
|
|
for source_url in source_url_list:
|
|
|
|
|
|
result = Fork(base_fork_url=source_url, selector_list=selector.split(' ')).fork()
|
|
|
|
|
|
handler(source_url, selector, result)
|