from dataclasses import dataclass, field from typing import List, Optional from marshmallow import EXCLUDE from external_api.base.clients.client import ApiClient @dataclass class AtlasUserModel: email: str family_name: str given_name: str id: str is_sony_employee: bool is_vip: bool preferred_username: Optional[str] = None status: Optional[str] = None business_unit: Optional[str] = None class Meta: unknown = EXCLUDE @dataclass class AtlasUserClaimsModel: name: str email: str atlas_user_id: str = field(metadata={"data_key": "sub"}) decibel_roles: List[str] = field(metadata={"data_key": "decibel/role"}) labels: Optional[List[int]] = field(metadata={"data_key": "decibel/labels"}, default_factory=list) class Meta: unknown = EXCLUDE class AtlasApiClient: http_client: ApiClient def __init__(self, client: ApiClient) -> None: self.http_client = client async def get_user(self, user_id: str) -> AtlasUserModel: endpoint = f"/users/{user_id}" return await self.http_client.get(endpoint, response_type=AtlasUserModel) async def get_user_claims(self, user_id: str) -> AtlasUserClaimsModel: endpoint = f"/users/{user_id}/claims" return await self.http_client.get(endpoint, response_type=AtlasUserClaimsModel)