blob: 18dec9ef7934693cba00f4b88da0ef15ab631da3 [file] [log] [blame]
from typing import List, Optional
from ninja import ModelSchema, Schema
from trackingserver_template.models import CodeArtifact, DAGTemplate, NodeTemplate
class CodeArtifactIn(ModelSchema):
class Meta:
model = CodeArtifact
exclude = ["id", "created_at", "updated_at"]
class NodeTemplateIn(ModelSchema):
class Meta:
model = NodeTemplate
# Exclude the foreign keys
exclude = ["id", "dag_template", "created_at", "updated_at", "code_artifacts"]
code_artifact_pointers: List[
str
] # Pointers to code artifacts, which are uniue by DAGTemplate/Name
class NodeTemplateOut(ModelSchema):
class Meta:
model = NodeTemplate
fields = "__all__"
# exclude =
primary_code_artifact: Optional[str] = None
class File(Schema):
path: str
contents: str
class CodeLog(Schema):
files: List[File]
class DAGTemplateIn(ModelSchema):
nodes: List[NodeTemplateIn]
code_artifacts: List[CodeArtifactIn]
code_log: CodeLog
class Meta:
model = DAGTemplate
fields = [
"name",
"template_type",
"config",
"dag_hash",
"tags",
"code_hash",
"code_version_info_type",
"code_version_info",
"code_version_info_schema",
]
class DAGTemplateOut(ModelSchema):
class Meta:
model = DAGTemplate
# Note that if you call this without `prefetch_related` in an async context it will break, so ensure you use that!
fields = "__all__"
class DAGTemplateUpdate(Schema):
is_active: bool = True
class CodeArtifactOut(ModelSchema):
class Meta:
model = CodeArtifact
fields = "__all__"
class DAGTemplateOutWithData(DAGTemplateOut):
nodes: List[NodeTemplateOut]
code_artifacts: List[CodeArtifactOut]
code: Optional[CodeLog]
class CatalogResponse(Schema):
nodes: List[NodeTemplateOut]
code_artifacts: List[CodeArtifactOut]