music-assistant-server

2 KBPY
utils.py
2 KB76 lines • python
1"""Utility functions for handling cookies and converting them into Netscape format."""
2
3from __future__ import annotations
4
5from dataclasses import dataclass
6from typing import TYPE_CHECKING
7
8from mashumaro import DataClassDictMixin
9
10# Playlist, Album, and Track cannot be placed under TYPE_CHECKING
11# because they are used at runtime by DataClassDictMixin
12from music_assistant_models.media_items import (
13    Album,
14    AudioFormat,
15    Playlist,
16    Track,
17)
18
19from music_assistant.constants import VERBOSE_LOG_LEVEL
20from music_assistant.providers.nicovideo.constants import (
21    NICOVIDEO_AUDIO_BIT_DEPTH,
22    NICOVIDEO_AUDIO_CHANNELS,
23    NICOVIDEO_CODEC_TYPE,
24    NICOVIDEO_CONTENT_TYPE,
25)
26
27if TYPE_CHECKING:
28    import logging
29
30
31@dataclass
32class PlaylistWithTracks(DataClassDictMixin):
33    """Helper class to hold playlist and its tracks."""
34
35    playlist: Playlist
36    tracks: list[Track]
37
38
39@dataclass
40class AlbumWithTracks(DataClassDictMixin):
41    """Helper class to hold album and its tracks."""
42
43    album: Album
44    tracks: list[Track]
45
46
47def log_verbose(logger: logging.Logger, message: str, *args: object) -> None:
48    """Log a message at VERBOSE level with performance optimization.
49
50    Args:
51        logger: Logger instance
52        message: Log message format string
53        *args: Arguments for the message format string
54    """
55    if logger.isEnabledFor(VERBOSE_LOG_LEVEL):
56        logger.log(VERBOSE_LOG_LEVEL, message, *args)
57
58
59def create_audio_format(
60    *, bit_rate: int | None = None, sample_rate: int | None = None
61) -> AudioFormat:
62    """Create AudioFormat from stream format data."""
63    audio_format = AudioFormat(
64        content_type=NICOVIDEO_CONTENT_TYPE,
65        codec_type=NICOVIDEO_CODEC_TYPE,
66        channels=NICOVIDEO_AUDIO_CHANNELS,
67        bit_depth=NICOVIDEO_AUDIO_BIT_DEPTH,
68    )
69
70    if bit_rate is not None:
71        audio_format.bit_rate = bit_rate
72    if sample_rate is not None:
73        audio_format.sample_rate = sample_rate
74
75    return audio_format
76