Download app/resources/task/main.py from gitdeem/dt: direct link, hf CLI and curl.
- Browser
- Download file 4.36 kB
-
https://huggingface.co/spaces/gitdeem/dt/resolve/main/app/resources/task/main.py
- Command line
-
hf download hf://spaces/gitdeem/dt/app/resources/task/main.py
-
curl -L -o main.py https://huggingface.co/spaces/gitdeem/dt/resolve/main/app/resources/task/main.py
4.36 kB
| 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 "" | |