Spaces:
Running
Running
| 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 | |