import logging from typing import Any from fansifter_common.adapters.poeditor.exceptions import POEditorClientError from fansifter_common.adapters.poeditor.models import ( LanguagesResponse, Response, TermsResponse, ) from fansifter_common.httpclient.base import HTTPClient logger = logging.getLogger(__name__) class POEditorClient(HTTPClient): exception_class = POEditorClientError base_url = "https://api.poeditor.com" def __init__(self, api_token: str) -> None: self._api_token = api_token super().__init__( client_options={ "base_url": self.base_url, }, ) def _with_api_token(self, data: dict[str, Any]) -> dict[str, Any]: return {**data, "api_token": self._api_token} def get_project_terms_translation_for_lang( self, project_id: int, language_code: str ) -> dict[str, str]: response_obj = self.request( "POST", "/v2/terms/list", data=self._with_api_token( { "id": project_id, "language": language_code, } ), type=Response[TermsResponse], ) return { term.term: term.translation.content for term in response_obj.result.terms } def get_available_project_languages(self, project_id: int) -> set[str]: response_obj = self.request( "POST", "/v2/languages/list", data=self._with_api_token({"id": project_id}), type=Response[LanguagesResponse], ) return {lang.code for lang in response_obj.result.languages}