File size: 1,643 Bytes
9bed109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from __future__ import annotations

from datetime import datetime
from typing import Any, Literal
from uuid import UUID

from pydantic import BaseModel, ConfigDict, Field, HttpUrl

from shared.schemas.render_job import RenderQuality


class RenderEnqueueBody(BaseModel):
    model_config = ConfigDict(extra="forbid")

    render_type: Literal["preview", "full"] = "preview"
    quality: RenderQuality = "720p"
    webhook_url: HttpUrl | None = None
    scene_id: UUID | None = Field(
        default=None,
        description="When set, worker renders `manim_code` from this scene (class GeneratedScene).",
    )


class RenderEnqueueResponse(BaseModel):
    model_config = ConfigDict(extra="forbid")

    job_id: UUID
    status: Literal["queued"] = "queued"


class RenderJobStatusResponse(BaseModel):
    """`RenderJob` fields exposed by `GET /v1/jobs/{job_id}`."""

    model_config = ConfigDict(extra="forbid")

    id: UUID
    project_id: UUID
    scene_id: UUID | None = Field(
        default=None,
        description="Source scene when render was enqueued with scene_id.",
    )
    job_type: Literal["preview", "full"]
    render_quality: RenderQuality | None = None
    status: Literal["queued", "rendering", "completed", "failed", "cancelled"]
    progress: int = Field(default=0, ge=0, le=100)
    logs: str | None = None
    asset_url: str | None = None
    error_code: str | None = None
    webhook_url: str | None = None
    docker_image_tag: str | None = None
    created_at: datetime
    started_at: datetime | None = None
    completed_at: datetime | None = None
    metadata: dict[str, Any] = Field(default_factory=dict)