Source code for scapi.client.user
from typing import List, Optional
from scapi import exceptions
from scapi.client import models
from scapi.config import Config
from scapi.consts import BaseUrl, Defaults
from scapi.enums import Region
from scapi.http.auth.token import TokenHTTPClient
from .base import SharedBaseClient
from .clan.user import UserClanEndpoint
[docs]
class UserClient(SharedBaseClient):
"""API Client for user specific endpoints."""
def __init__(
self,
*,
token: str,
base_url: str = BaseUrl.PRODUCTION,
timeout: int = Defaults.TIMEOUT,
json: bool = Defaults.JSON,
region: Optional[Region | str] = None,
):
"""
Initialize user client with authentication token.
Args:
token: User access token.
base_url (optional): API server base URL. Defaults to `http://eapi.stalcraft.net`.
timeout (optional): Request timeout in seconds. Defaults to `60s`.
json (optional): Return JSON instead of models. Defaults to `False`.
region (optional): Default game server region. Defaults to `ru`.
"""
self._token = token
self._timeout = timeout
super().__init__(base_url=base_url, json=json, region=region)
def _create_http_client(self):
if self._token:
return TokenHTTPClient(
token=self._token,
base_url=self._base_url,
timeout=self._timeout,
)
raise exceptions.CredentialsError(f"No user token provided for {self.__class__.__name__}.")
[docs]
async def characters(
self,
region: Optional[Region | str] = None,
) -> List[models.Character]:
"""
Retrieve user characters.
Args:
region (optional): Game server region. Defaults to `ru`.
Returns:
List of user characters.
"""
region = (region or self._region or Config.REGION).lower()
response = await self._http.GET(
url=f"{region}/characters",
)
return self._parse(response, models.Character)
[docs]
async def friends(
self,
character: str,
region: Optional[Region | str] = None,
) -> List[str]:
"""
Retrieve user character friends list.
Args:
character: User character name.
region (optional): Game server region. Defaults to `ru`.
Returns:
List of user friends character names.
"""
region = (region or self._region or Config.REGION).lower()
response = await self._http.GET(
f"{region}/friends/{character}",
)
return self._parse(response)
[docs]
def clan(
self,
clan_id: str,
region: Optional[Region | str] = None,
) -> UserClanEndpoint:
"""
Factory method for user specific clan endpoint.
Args:
clan_id: Clan identifier.
region (optional): Default game server region. Defaults to `ru`.
Returns:
User clan endpoint instance.
"""
region = region or self._region
return UserClanEndpoint(clan_id=clan_id, region=region, http=self._http, json=self._json)