TellmeStpToGlb/api/schemas.py
sladro b5e18c5c7a feat: 重构转换系统,默认启用层级转换和组件名称保留
## 主要变更
- 创建新的STP文件文本解析器,直接读取文件内容提取组件名称
- 简化CLI和API接口,移除层级和名称保留参数
- 所有转换默认使用层级模式并保留原始组件名称
- 重构转换器类,清理冗余代码

## 技术改进
- 新增 core/stp_parser.py:直接解析PRODUCT和PRODUCT_DEFINITION实体
- 优化 converter.py:统一转换流程,默认层级转换
- 更新 main.py:简化命令行参数,移除 --hierarchy 和 --preserve-names
- 修复 API 错误处理:全局异常处理器返回正确的JSON响应
- 完善 API 精度参数传递:支持自定义精度选项

## 接口变更
- CLI:`python main.py input.stp output.glb` 即可获得层级转换结果
- API:移除 preserve_hierarchy 和 preserve_original_names 参数
- 保持向后兼容:原有的基本用法不变

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-15 10:25:14 +08:00

55 lines
2.4 KiB
Python

#!/usr/bin/env python3
"""
API数据模式定义
"""
from pydantic import BaseModel, Field
from typing import Optional
from datetime import datetime
class PrecisionOptionsSchema(BaseModel):
"""精度选项模式"""
linear_deflection: float = Field(default=0.01, ge=0.001, le=1.0, description="线性偏差")
angular_deflection: float = Field(default=0.1, ge=0.01, le=1.0, description="角度偏差")
mesh_quality: str = Field(default="medium", pattern="^(low|medium|high|custom)$", description="网格质量等级")
class ConvertOptionsSchema(BaseModel):
"""转换选项模式"""
auto_scale: bool = Field(default=True, description="是否自动缩放")
auto_center: bool = Field(default=True, description="是否自动居中")
precision: PrecisionOptionsSchema = Field(default_factory=PrecisionOptionsSchema, description="精度选项")
class ConvertRequestSchema(BaseModel):
"""转换请求模式"""
input_path: str = Field(..., description="输入STP文件路径")
output_path: str = Field(..., description="输出GLB文件路径")
options: ConvertOptionsSchema = Field(default_factory=ConvertOptionsSchema, description="转换选项")
class ConvertResponseSchema(BaseModel):
"""转换响应模式"""
task_id: str = Field(..., description="任务ID")
status: str = Field(..., description="任务状态")
message: str = Field(default="", description="状态消息")
class TaskStatusSchema(BaseModel):
"""任务状态模式"""
task_id: str = Field(..., description="任务ID")
status: str = Field(..., description="任务状态")
progress: int = Field(..., description="进度百分比(0-100)")
message: str = Field(default="", description="状态消息")
created_at: datetime = Field(..., description="创建时间")
started_at: Optional[datetime] = Field(default=None, description="开始时间")
completed_at: Optional[datetime] = Field(default=None, description="完成时间")
error_message: Optional[str] = Field(default=None, description="错误信息")
class HealthResponseSchema(BaseModel):
"""健康检查响应模式"""
status: str = Field(default="healthy", description="服务状态")
timestamp: datetime = Field(default_factory=datetime.now, description="检查时间")
version: str = Field(default="1.0.0", description="服务版本")