Tadeas Kosek
apply generated DDD abstraction
92fd1a7
"""Audio quality value object."""
from dataclasses import dataclass
from typing import Dict, Any
from ..exceptions.domain_exceptions import InvalidQualityLevelError
@dataclass(frozen=True)
class AudioQuality:
"""Value object representing audio quality level."""
value: str
LEVELS = {
'high': {'priority': 3, 'description': 'Best quality, larger file size'},
'medium': {'priority': 2, 'description': 'Balanced quality and file size'},
'low': {'priority': 1, 'description': 'Smaller file size, acceptable quality'}
}
def __post_init__(self):
if self.value.lower() not in self.LEVELS:
raise InvalidQualityLevelError(self.value)
# Normalize to lowercase
object.__setattr__(self, 'value', self.value.lower())
@property
def priority(self) -> int:
"""Get numeric priority (higher is better quality)."""
return self.LEVELS[self.value]['priority']
@property
def description(self) -> str:
"""Get human-readable description."""
return self.LEVELS[self.value]['description']
def get_settings_for_format(self, audio_format: 'AudioFormat',
quality_presets: Dict[str, Dict[str, Dict[str, Any]]]) -> Dict[str, Any]:
"""Get quality settings for specific audio format."""
return quality_presets.get(audio_format.value, {}).get(self.value, {})
def __str__(self) -> str:
return self.value
def __lt__(self, other: 'AudioQuality') -> bool:
"""Compare quality levels by priority."""
return self.priority < other.priority