dt / app /resources /task /main.py
gitdeem's picture
Upload 96 files
4e9efe9 verified
import threading
import time
from datetime import datetime
import os
import traceback
from flask import current_app
from app.extensions import db
from app.models.comparison import Comparison
from app.models.prompt import Prompt
from app.models.translate import Translate
from app.translate import word, excel, powerpoint, pdf, gptpdf, txt, csv_handle, md, to_translate
def main_wrapper(task_id, config, origin_path):
"""
翻译任务核心逻辑(支持多参数)[^4]
:param task_id: 任务ID
:param origin_path: 原始文件绝对路径
:param target_path: 目标文件绝对路径
:param config: 翻译配置字典
:return: 是否成功
"""
try:
# 获取任务对象
task = Translate.query.get(task_id)
if not task:
current_app.logger.error(f"任务 {task_id} 不存在")
return False
# 设置OpenAI API
# 初始化翻译配置
_init_translate_config(task)
to_translate.init_openai(config['api_url'], config['api_key'])
# 获取文件扩展名
extension = os.path.splitext(origin_path)[1].lower()
print('文件扩展名',extension,origin_path)
# 调用文件处理器
handler_map = {
('.docx', '.doc'): word,
('.xlsx', '.xls'): excel,
('.pptx', '.ppt'): powerpoint,
('.pdf',): pdf,
('.txt',): txt,
('.csv',): csv_handle,
('.md',): md
}
# 查找匹配的处理器
for ext_group, handler in handler_map.items():
if extension in ext_group:
# if extension == '.pdf':
# status = handler(config, origin_path) # 传递 origin_path
# else:
# status = handler.start(config) # 传递翻译配置
status = handler.start(
# origin_path=origin_path,
# target_path=target_path,
trans=config # 传递翻译配置
)
print('config配置项', config)
return status
current_app.logger.error(f"不支持的文件类型: {extension}")
return False
except Exception as e:
current_app.logger.error(f"翻译任务执行异常: {str(e)}", exc_info=True)
return False
def _init_translate_config1(task):
"""初始化翻译配置(如OpenAI)"""
if task.api_url and task.api_key:
import openai
openai.api_base = task.api_url
openai.api_key = task.api_key
def pdf_handler(config, origin_path):
return gptpdf.start(config)
# if pdf.is_scanned_pdf(origin_path):
# return gptpdf.start(config)
# else:
# # 这里均使用gptpdf实现
# return gptpdf.start(config)
# # return pdf.start(config)
def _init_translate_config(trans):
"""
初始化翻译配置[^5]
:param trans: 翻译任务对象
"""
# 设置OpenAI API
if trans.api_url and trans.api_key:
set_openai_config(trans.api_url, trans.api_key)
# 加载术语对照表
if trans.comparison_id:
comparison = get_comparison(trans.comparison_id)
trans.prompt = f"{comparison}\n{trans.prompt}"
# 加载提示词模板
if trans.prompt_id:
prompt = get_prompt(trans.prompt_id)
trans.prompt = prompt
def set_openai_config(api_url, api_key):
"""
设置OpenAI API配置[^6]
"""
import openai
openai.api_base = api_url
openai.api_key = api_key
def get_comparison(comparison_id):
"""
加载术语对照表
:param comparison_id: 术语对照表ID
:return: 术语对照表内容
"""
comparison = db.session.query(Comparison).filter_by(id=comparison_id).first()
if comparison and comparison.content:
return comparison.content.replace(',', ':').replace(';', '\n')
return ""
def get_prompt(prompt_id):
"""
加载提示词模板
:param prompt_id: 提示词模板ID
:return: 提示词内容
"""
prompt = db.session.query(Prompt).filter_by(id=prompt_id).first()
if prompt and prompt.content:
return prompt.content
return ""