from typing import List, Dict, Any from apollo_utils.core.utils.result_types import DictResult 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 charts_messages.config import APP_VERSION from charts_messages.logger import get_logger from charts_messages.constants import Service, USER_DATA_HEADER, CHUNK_SIZE, APP_NAME 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 get_event(self, event_id: int, include: List[str], **params): """Get an event by id Args: event_id: int event id include: Fields to include to response ["context", "meta", "data", "all"] """ return self.send_request( "api/service/events/", headers=USER_DATA_HEADER, id=event_id, include=include, **params ) @request_in_chunks(chunk_size=CHUNK_SIZE, items_kwarg="body", result_type=DictResult) def post_messages( self, body: List[Dict[str, Any]], unique_key: str = None, unique_mode: str = None, **params ): """Send created messages to USER DATA API Args: body: public: unique_mode: unique_key: **params: Returns: """ request_body = { "data": body } if unique_mode: # to provide uniqueness within the created events on server-side: Delphi can send duplicates request_body.update({"unique_mode": unique_mode, "unique_key": unique_key}) return self.send_request( "api/service/messages/", method="POST", data=request_body, headers=USER_DATA_HEADER, get_json=True, **params, ) def get_user_accounts_with_devices(self, **params): request_body = { "device": {"is_active": True}, "settings": {"type": "mobile", "version": "2"}, "include": ["devices"] } if any(APP_VERSION.values()): request_body["device"]["app_version"] = APP_VERSION result = self.send_request( "api/service/users/settings/list/", method="POST", data=request_body, headers=USER_DATA_HEADER, get_json=True, **params, ) return result["data"]