Coverage for src / lexigram / contracts / multimedia / exceptions.py: 100%
22 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
1"""Domain errors for the multimedia generation subsystem."""
3from __future__ import annotations
5from typing import Any
7from lexigram.contracts.exceptions.domain import DomainError
10class MultimediaError(DomainError):
11 """Base exception for all multimedia-generation errors.
13 Mirrors ``AIError(DomainError)`` — recoverable, expected failures that
14 callers should handle gracefully via ``Result``.
15 """
17 _code = "LEX_ERR_MM_001"
19 def __init__(
20 self, message: str = "Multimedia generation error", **kwargs: Any
21 ) -> None:
22 super().__init__(message, **kwargs)
25class BeatAnalysisError(MultimediaError):
26 """Base for tempo/beat-detection errors."""
28 _code = "LEX_ERR_MM_008"
31class TTSError(MultimediaError):
32 """Base for text-to-speech generation errors."""
34 _code = "LEX_ERR_MM_002"
37class MusicGenerationError(MultimediaError):
38 """Base for music/sound generation errors."""
40 _code = "LEX_ERR_MM_003"
43class VideoGenerationError(MultimediaError):
44 """Base for video generation errors."""
46 _code = "LEX_ERR_MM_004"
49class ImageGenerationError(MultimediaError):
50 """Base for still-image generation errors."""
52 _code = "LEX_ERR_MM_005"
55class ProviderNotInstalledError(MultimediaError):
56 """Raised eagerly at DI-resolution time when a configured provider's
57 optional extra is not installed. Carries an actionable install hint
58 rather than surfacing a bare ImportError later.
59 """
61 _code = "LEX_ERR_MM_006"
64class UpscaleError(MultimediaError):
65 """Base for image/video super-resolution errors."""
67 _code = "LEX_ERR_MM_007"
70__all__ = [
71 "BeatAnalysisError",
72 "ImageGenerationError",
73 "MultimediaError",
74 "MusicGenerationError",
75 "ProviderNotInstalledError",
76 "TTSError",
77 "UpscaleError",
78 "VideoGenerationError",
79]