deepdata: core product code (backend, frontend, runtime, deepflow module)

This commit is contained in:
figmar
2026-08-30 19:23:38 +08:00
commit bd3db30be9
1405 changed files with 271727 additions and 0 deletions
@@ -0,0 +1,59 @@
"""
Parser Holder
解析器持有者,根据文件类型选择合适的解析器
"""
import os
from typing import Dict, Type, Optional
from app.module.operator.parsers.abstract_parser import AbstractParser
from app.module.operator.parsers.tar_parser import TarParser
from app.module.operator.parsers.zip_parser import ZipParser
from app.module.operator.schema import OperatorDto
class ParserHolder:
"""解析器持有者,根据文件类型选择解析器"""
def __init__(self):
self._parsers: Dict[str, AbstractParser] = {
"tar": TarParser(),
"gz": TarParser(),
"tgz": TarParser(),
"zip": ZipParser(),
}
def get_parser(self, file_path: str) -> AbstractParser:
"""根据文件扩展名获取解析器"""
_, ext = os.path.splitext(file_path)
file_type = ext.lstrip('.').lower()
if file_type not in self._parsers:
raise ValueError(f"Unsupported file type: {file_type}")
return self._parsers[file_type]
def parse_yaml_from_archive(
self,
file_type: str,
archive_path: str,
entry_path: str,
file_name: Optional[str] = None,
file_size: Optional[int] = None
) -> OperatorDto:
"""从压缩包解析 YAML"""
if file_type not in self._parsers:
raise ValueError(f"Unsupported file type: {file_type}")
return self._parsers[file_type].parse_yaml_from_archive(
archive_path,
entry_path,
file_name,
file_size
)
def extract_to(self, file_type: str, archive_path: str, target_dir: str) -> None:
"""解压文件到目标目录"""
if file_type not in self._parsers:
raise ValueError(f"Unsupported file type: {file_type}")
self._parsers[file_type].extract_to(archive_path, target_dir)