from typing import List from apollo_utils.core.utils.result_types import ListResult from apollo_utils.job.clients.base.client import BaseApiClient from apollo_utils.job.clients.base.config import BaseConfig from apollo_utils.job.clients.utils.request_in_chunks.sync.request_in_chunks import request_in_chunks from apollo_playlists_messages.config import CHUNK_SIZE, CHUNK_WAIT, SETTINGS_VERSION from apollo_playlists_messages.constants import USER_DATA_HEADER, Service, APP_NAME from apollo_playlists_messages.logger import get_logger class GateApiClientConfig(BaseConfig): service = Service.GATE_API logger = get_logger(APP_NAME) def __init__(self): self._load_attrs() super().__init__() class GateApiClient(GateApiClientConfig, BaseApiClient): @request_in_chunks( items_kwarg="ids", chunk_size=CHUNK_SIZE, result_type=ListResult, wait=True, wait_time=CHUNK_WAIT ) def get_favorites_with_accounts(self, ids: List[str], entity_type: str, **params): data = self._prepare_request(entity_type, ids) return self.send_request( "api/service/users/favorites/list/", method="POST", data=data, headers=USER_DATA_HEADER, get_json=True, **params, ).get("data", []) def _prepare_request(self, entity_type: str, ids: List[str]) -> dict: settings = {"type": "mobile"} if SETTINGS_VERSION: settings.update({"version": SETTINGS_VERSION}) return { "entity": { "type": entity_type, "id": ids, }, "device": {"is_active": True}, "settings": settings, "include": ["settings", "devices"], }