from aiohttp import ClientSession from typing import Dict, Optional from server.core.helpers.authorization import BaseClient from server.atlas.exceptions import AtlasError from server.atlas.client import Config class AtlasClient(BaseClient): """Artist API app_client.""" dna_prefix = "sme-dna|" error_cls = AtlasError def __init__(self, session: ClientSession, config: Config): super().__init__(session, config) def __update_user_id(self, user_id: str) -> str: return user_id if self.dna_prefix in user_id else self.dna_prefix + user_id async def check_health(self): return True async def _get(self, end_url, method="GET"): return await super()._make_request(end_url, method) async def _make_end_url(self, url): return self.config.base_url + url async def get_profileinfo(self, user_id: str) -> Dict: """Make get request to atlas API to get userinfo of current user. Args: user_id: current user id """ url = f"api/v1/users/{self.__update_user_id(user_id)}/claims" end_url = await self._make_end_url(url) res = await self._get(end_url) return res async def get_users_with_same_labels(self, user_labels: list) -> Dict: """Make get request to atlas API to get users with same labels as current user. Args: user_labels: current user labels list """ url = "api/v1/resource_groups/dna/claim_names/labels" end_url = await self._make_end_url(url) return {label_id: await self._get(end_url + f"/{label_id}/users") for label_id in user_labels} async def get_label_names(self, user_id: str, label_id: Optional[int] = None) -> dict: url = f"api/v1/users/{self.__update_user_id(user_id)}/resource_groups/dna/claim_names/labels" if label_id: url += f"?filter=id:{label_id}" end_url = await self._make_end_url(url) response = await self._get(end_url) return {item["id"]: item["friendly"] for item in response["results"]}