from marshmallow import fields from typing import Any, List, Optional from apollo_utils.core.constants.core import SPOTIFY_PLAYLIST_URI_PREFIX from apollo_utils.core.constants.dsp import DSP class PlaylistIdField(fields.String): def __init__(self, dsp: Optional[DSP] = None, from_uri: bool = True, *args, **kwargs): self._add_prefix = f"{dsp.value}_" if dsp else None self._remove_prefix = SPOTIFY_PLAYLIST_URI_PREFIX if from_uri else None super().__init__(*args, **kwargs) def _deserialize(self, value, attr, data, **kwargs) -> List[Any]: field_value = super()._deserialize(value, attr, data, **kwargs) if self._remove_prefix and field_value.startswith(self._remove_prefix): field_value = field_value[len(self._remove_prefix):] if self._add_prefix and self._add_prefix not in field_value: field_value = f"{self._add_prefix}{field_value}" return field_value