from __future__ import annotations from app.core.exceptions import MediaAPIError class ProjectNotFoundError(MediaAPIError): code = "PROJECT_NOT_FOUND" status_code = 404 class ProjectInvalidNameError(MediaAPIError): code = "PROJECT_INVALID_NAME" status_code = 422 class ProjectInvalidStatusError(MediaAPIError): code = "PROJECT_INVALID_STATUS" status_code = 422 class ProjectThumbnailInvalidError(MediaAPIError): code = "PROJECT_THUMBNAIL_INVALID" status_code = 422 class ProjectAlreadyArchivedError(MediaAPIError): code = "PROJECT_ALREADY_ARCHIVED" status_code = 409 class ProjectInvalidCursorError(MediaAPIError): code = "PROJECT_INVALID_CURSOR" status_code = 422 class ProjectAssetNotFoundError(MediaAPIError): code = "PROJECT_ASSET_NOT_FOUND" status_code = 404 class ProjectAssetConflictError(MediaAPIError): code = "PROJECT_ASSET_CONFLICT" status_code = 409 class ProjectJobNotFoundError(MediaAPIError): code = "PROJECT_JOB_NOT_FOUND" status_code = 404 class ProjectJobConflictError(MediaAPIError): code = "PROJECT_JOB_CONFLICT" status_code = 409 class ProjectEditorNotFoundError(MediaAPIError): code = "PROJECT_EDITOR_NOT_FOUND" status_code = 404 class ProjectEditorConflictError(MediaAPIError): code = "PROJECT_EDITOR_REVISION_CONFLICT" status_code = 409 class ProjectEditorInvalidError(MediaAPIError): code = "PROJECT_EDITOR_INVALID" status_code = 422 class ProjectEditorAssetInvalidError(MediaAPIError): code = "PROJECT_EDITOR_ASSET_INVALID" status_code = 422 class ProjectRenderNotFoundError(MediaAPIError): code = "PROJECT_RENDER_NOT_FOUND" status_code = 404 class ProjectRenderConflictError(MediaAPIError): code = "PROJECT_RENDER_CONFLICT" status_code = 409 class ProjectRenderInvalidError(MediaAPIError): code = "PROJECT_RENDER_INVALID" status_code = 422 class ProjectRenderUnsupportedError(MediaAPIError): code = "PROJECT_RENDER_UNSUPPORTED_FEATURE" status_code = 422 class ProjectRenderLimitError(MediaAPIError): code = "PROJECT_RENDER_LIMIT_EXCEEDED" status_code = 429 class ProjectRenderTransitionError(RuntimeError): """Internal invariant failure; never accept state transitions from clients.""" class CollaborationUnauthorizedError(MediaAPIError): code = "COLLABORATION_UNAUTHORIZED" status_code = 403 class TeamNotFoundError(MediaAPIError): code = "TEAM_NOT_FOUND" status_code = 404 class TeamMemberNotFoundError(MediaAPIError): code = "TEAM_MEMBER_NOT_FOUND" status_code = 404 class ApprovalRequestNotFoundError(MediaAPIError): code = "APPROVAL_REQUEST_NOT_FOUND" status_code = 404 class ApprovalWorkflowStateError(MediaAPIError): code = "APPROVAL_WORKFLOW_STATE_ERROR" status_code = 409 class ApprovalSeparationOfDutiesError(MediaAPIError): code = "APPROVAL_SEPARATION_OF_DUTIES_ERROR" status_code = 403 class InvitationNotFoundError(MediaAPIError): code = "INVITATION_NOT_FOUND" status_code = 404 class InvitationExpiredError(MediaAPIError): code = "INVITATION_EXPIRED" status_code = 409