From 4f29e4de73a2f93c750231042e275fcd85c3cb39 Mon Sep 17 00:00:00 2001 From: ksieuk Date: Wed, 4 Oct 2023 23:38:52 +0300 Subject: [PATCH] feat: [#38] add http client --- src/assistant/lib/app/app.py | 11 ++++++++ src/assistant/lib/clients/__init__.py | 6 +++- src/assistant/lib/clients/http_client.py | 36 ++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/assistant/lib/clients/http_client.py diff --git a/src/assistant/lib/app/app.py b/src/assistant/lib/app/app.py index 6c18806..7a67a1b 100644 --- a/src/assistant/lib/app/app.py +++ b/src/assistant/lib/app/app.py @@ -57,6 +57,17 @@ class Application: logger.info("Initializing clients") + http_yandex_tts_client = clients.AsyncHttpClient( + base_url="yandex", # todo add yandex api url from settings + proxy_settings=settings.proxy, + ) + disposable_resources.append( + DisposableResource( + name="http_client yandex", + dispose_callback=http_yandex_tts_client.close(), + ) + ) + # Repositories logger.info("Initializing repositories") diff --git a/src/assistant/lib/clients/__init__.py b/src/assistant/lib/clients/__init__.py index 1fbe64c..0050424 100644 --- a/src/assistant/lib/clients/__init__.py +++ b/src/assistant/lib/clients/__init__.py @@ -1,3 +1,7 @@ +from .http_client import AsyncHttpClient from .postgres import AsyncPostgresClient -__all__ = ["AsyncPostgresClient"] +__all__ = [ + "AsyncHttpClient", + "AsyncPostgresClient", +] diff --git a/src/assistant/lib/clients/http_client.py b/src/assistant/lib/clients/http_client.py new file mode 100644 index 0000000..1382acb --- /dev/null +++ b/src/assistant/lib/clients/http_client.py @@ -0,0 +1,36 @@ +import httpx + +import lib.app.split_settings as app_split_settings + + +class AsyncHttpClient: + def __init__( + self, + proxy_settings: app_split_settings.ProxySettings, + base_url: str | None = None, + **client_params: dict[str, str], + ) -> None: + self.base_url = base_url if base_url else "" + self.proxy_settings = proxy_settings + self.proxies = self._get_proxies_from_settings() + self.client_params = client_params + + self.client = self._get_client() + + def _get_proxies_from_settings(self) -> dict[str, str] | None: + if not self.proxy_settings.enable: + return None + proxies = {"all://": self.proxy_settings.dsn} + return proxies + + def _get_client(self): + return httpx.AsyncClient( + base_url=self.base_url, + proxies=self.proxies, # type: ignore + **self.client_params, + ) + + async def close(self): + if not self.client: + return + await self.client.aclose()