Spaces:
Sleeping
Sleeping
File size: 1,491 Bytes
3493993 | 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 | from __future__ import annotations
from enum import Enum
from app.projects.errors import ProjectRenderTransitionError
class RenderStatus(str, Enum):
QUEUED = "queued"
PROCESSING = "processing"
COMPLETED = "completed"
FAILED = "failed"
CANCELLING = "cancelling"
CANCELLED = "cancelled"
TERMINAL_RENDER_STATUSES = frozenset(
{RenderStatus.COMPLETED, RenderStatus.FAILED, RenderStatus.CANCELLED}
)
ALLOWED_RENDER_TRANSITIONS: dict[RenderStatus, frozenset[RenderStatus]] = {
RenderStatus.QUEUED: frozenset(
{RenderStatus.PROCESSING, RenderStatus.CANCELLED, RenderStatus.FAILED}
),
RenderStatus.PROCESSING: frozenset(
{
RenderStatus.QUEUED,
RenderStatus.COMPLETED,
RenderStatus.FAILED,
RenderStatus.CANCELLING,
RenderStatus.CANCELLED,
}
),
RenderStatus.CANCELLING: frozenset(
{RenderStatus.CANCELLED, RenderStatus.COMPLETED, RenderStatus.FAILED}
),
RenderStatus.COMPLETED: frozenset(),
RenderStatus.FAILED: frozenset(),
RenderStatus.CANCELLED: frozenset(),
}
def validate_render_transition(current: str, target: str) -> RenderStatus:
source = RenderStatus(current)
destination = RenderStatus(target)
if destination not in ALLOWED_RENDER_TRANSITIONS[source]:
raise ProjectRenderTransitionError(
f"Cannot transition render from {source.value} to {destination.value}."
)
return destination
|