Files
cdtestplant_v1/apps/project/schemas/testDemand.py

132 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from apps.project.models import TestDemand, TestDemandContent, TestDemandContentStep
from apps.project.schemas.design import DesignModelOutSchemaOrigin # 注意导入的是不含上级的Schema
from ninja import Field, Schema, ModelSchema
from typing import List, Union, Optional
from pydantic import AliasChoices
# 删除schema
class DeleteSchema(Schema):
ids: List[int]
# 测试项-输出schema -> 包含两层嵌套
class TestContentStepSchema(ModelSchema):
class Meta:
model = TestDemandContentStep
fields = ['operation', 'expect']
class TestContentSchema(ModelSchema):
subStep: List[TestContentStepSchema] = [] # 可能为空
class Meta:
model = TestDemandContent
fields = ["subName"]
# 2025年修改为两个一个含上级一个不含
class TestDemandModelOutSchemaOrigin(ModelSchema):
testContent: List[TestContentSchema] # 下级对象
class Meta:
model = TestDemand
exclude = ['project', 'round', 'dut', 'design', 'remark', 'sort']
class TestDemandModelOutSchema(ModelSchema):
testContent: List[TestContentSchema] # 下级对象
# 2025年5月9日新增上级字段design
design: Optional[DesignModelOutSchemaOrigin] = None
class Meta:
model = TestDemand
exclude = ['project', 'round', 'dut', 'design', 'remark', 'sort']
# 查询测试项
class TestDemandFilterSchema(Schema):
project_id: int = Field(None, alias='projectId')
round_id: str = Field(None, alias='round')
dut_id: str = Field(None, alias='dut')
design_id: str = Field(None, alias='designDemand')
# 其他字段
ident: str = Field(None, alias='ident')
testType: str = Field(None, alias='testType')
name: str = Field(None, alias='name')
priority: str = Field(None, alias="priority")
# 新增查询字段,给大表的查询
testDesciption: str = Field(None, alias="testDesciption")
testContent: str = Field(None, alias="testContent")
# 处理树状结构的schema
class TestDemandTreeReturnSchema(Schema):
title: str = Field(..., alias='title')
key: str = Field(..., alias='key')
level: str = Field(..., alias='level')
class TestDemandTreeInputSchema(Schema):
# 注意这里有alias
project_id: int = Field(None, alias='projectId')
key: str = Field(None, alias='key')
level: str = Field(None, alias='level')
# 增加测试项
class TestDemandCreateOutSchema(ModelSchema):
level: Union[str, int]
class Meta:
model = TestDemand
exclude = ['remark', 'sort', 'project', 'round', 'dut', 'design']
# 新增测试子项单个子项的Schema
class TestContentInputSchema(Schema):
subName: str = None
subStep: Optional[List[TestContentStepSchema]] = []
# 新增/更新测试项Schema
class TestDemandCreateInputSchema(Schema):
project_id: int = Field(..., validation_alias=AliasChoices("projectId", "project_id"),
serialization_alias="projectId")
round_key: str = Field(..., alias="round")
dut_key: str = Field(..., alias="dut")
design_key: str = Field(..., alias="designDemand")
# 其他字段
ident: str = Field(None, alias="ident")
name: str = Field(None, alias="name")
adequacy: str = Field(None, alias="adequacy")
priority: str = Field(None, alias="priority")
testContent: List[TestContentInputSchema] = []
testMethod: List[str] = []
testType: str = Field(None, alias="testType")
testDesciption: str = Field("", alias='testDesciption')
# 处理前端请求-设计需求关联测试需求(测试项)
class TestDemandRelatedSchema(Schema):
data: List[int] = None
project_id: int = Field(None, alias="project_id")
round_key: str = Field(None, alias="roundNumber")
dut_key: str = Field(None, alias="dutNumber")
design_key: str = Field(None, alias="designDemandNumber")
# 处理前端请求-设计需求已关联测试需求(测试项)
class TestDemandExistRelatedSchema(Schema):
project_id: int = Field(None, alias="project_id")
round_key: str = Field(None, alias="roundNumber")
dut_key: str = Field(None, alias="dutNumber")
design_key: str = Field(None, alias="designDemandNumber")
# 根据design的idtestDemand数据项目iddepth复制测试项到指定design
class DemandCopyToDesignSchema(Schema):
project_id: int
design_id: int
demand_key: str
depth: bool = False
# 替换文本输入Schema
class ReplaceDemandContentSchema(Schema):
project_id: int
round_key: str
originText: str
replaceText: str
selectRows: List[int]
selectColumn: List[str]
# 优先级替换Schema
class PriorityReplaceSchema(Schema):
selectRows: List[int] = None
priority: str