from typing import Any, Dict, List from apollo_utils.core.utils.result_types import DictResult, 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_messages_views.config import CHUNK_SIZE, EVENT_VIEW, PUBLIC from apollo_messages_views.constants.base import USER_DATA_HEADER, EventView, Service, APP_NAME from apollo_messages_views.logger import get_logger EVENT_VIEW_TO_URL = { EventView.FEED.value: ("api/service/messages/list/", "api/service/messages/feed/"), EventView.PUSH.value: ("api/service/messages/feed/list/", "api/service/messages/push/"), } class UserDataClientConfig(BaseConfig): service = Service.USER_DATA logger = get_logger(APP_NAME) def __init__(self): self._load_attrs() super().__init__() class UserDataClient(UserDataClientConfig, BaseApiClient): def __init__(self): super().__init__() self.get_url, self.create_url = EVENT_VIEW_TO_URL[EVENT_VIEW] @request_in_chunks(chunk_size=CHUNK_SIZE, items_kwarg="ids", result_type=ListResult) def get_bulk_messages( self, ids: List[int], include: List[str] = ("all",), get_json: bool = True, **params ) -> List[Dict[str, Any]]: request_body = {"id": ids, "include": include} return self.send_request( self.get_url, method="POST", data=request_body, headers=USER_DATA_HEADER, get_json=get_json, **params ).get("data", []) @request_in_chunks(chunk_size=CHUNK_SIZE, items_kwarg="data", result_type=DictResult) def create_bulk_messages( self, data: List[Dict[str, Any]], get_json: bool = True, **params ) -> Dict[str, List[Dict[str, int]]]: request_body = {"data": data, "public": PUBLIC} return self.send_request( self.create_url, method="POST", data=request_body, headers=USER_DATA_HEADER, get_json=get_json, **params )