diff options
author | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
---|---|---|
committer | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
commit | 4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch) | |
tree | ee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/gotrue/_sync/gotrue_base_api.py | |
parent | cc961e04ba734dd72309fb548a2f97d67d578813 (diff) | |
download | gn-ai-master.tar.gz |
Diffstat (limited to '.venv/lib/python3.12/site-packages/gotrue/_sync/gotrue_base_api.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/gotrue/_sync/gotrue_base_api.py | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/gotrue/_sync/gotrue_base_api.py b/.venv/lib/python3.12/site-packages/gotrue/_sync/gotrue_base_api.py new file mode 100644 index 00000000..c6c2b7b0 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/gotrue/_sync/gotrue_base_api.py @@ -0,0 +1,125 @@ +from __future__ import annotations + +from typing import Any, Callable, Dict, Optional, TypeVar, overload + +from httpx import Response +from pydantic import BaseModel +from typing_extensions import Literal, Self + +from ..constants import API_VERSION_HEADER_NAME, API_VERSIONS +from ..helpers import handle_exception, model_dump +from ..http_clients import SyncClient + +T = TypeVar("T") + + +class SyncGoTrueBaseAPI: + def __init__( + self, + *, + url: str, + headers: Dict[str, str], + http_client: Optional[SyncClient], + verify: bool = True, + proxy: Optional[str] = None, + ): + self._url = url + self._headers = headers + self._http_client = http_client or SyncClient( + verify=bool(verify), + proxy=proxy, + follow_redirects=True, + http2=True, + ) + + def __enter__(self) -> Self: + return self + + def __exit__(self, exc_t, exc_v, exc_tb) -> None: + self.close() + + def close(self) -> None: + self._http_client.aclose() + + @overload + def _request( + self, + method: Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"], + path: str, + *, + jwt: Optional[str] = None, + redirect_to: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + query: Optional[Dict[str, str]] = None, + body: Optional[Any] = None, + no_resolve_json: Literal[False] = False, + xform: Callable[[Any], T], + ) -> T: ... # pragma: no cover + + @overload + def _request( + self, + method: Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"], + path: str, + *, + jwt: Optional[str] = None, + redirect_to: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + query: Optional[Dict[str, str]] = None, + body: Optional[Any] = None, + no_resolve_json: Literal[True], + xform: Callable[[Response], T], + ) -> T: ... # pragma: no cover + + @overload + def _request( + self, + method: Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"], + path: str, + *, + jwt: Optional[str] = None, + redirect_to: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + query: Optional[Dict[str, str]] = None, + body: Optional[Any] = None, + no_resolve_json: bool = False, + ) -> None: ... # pragma: no cover + + def _request( + self, + method: Literal["GET", "OPTIONS", "HEAD", "POST", "PUT", "PATCH", "DELETE"], + path: str, + *, + jwt: Optional[str] = None, + redirect_to: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + query: Optional[Dict[str, str]] = None, + body: Optional[Any] = None, + no_resolve_json: bool = False, + xform: Optional[Callable[[Any], T]] = None, + ) -> Optional[T]: + url = f"{self._url}/{path}" + headers = {**self._headers, **(headers or {})} + if API_VERSION_HEADER_NAME not in headers: + headers[API_VERSION_HEADER_NAME] = API_VERSIONS["2024-01-01"].get("name") + if "Content-Type" not in headers: + headers["Content-Type"] = "application/json;charset=UTF-8" + if jwt: + headers["Authorization"] = f"Bearer {jwt}" + query = query or {} + if redirect_to: + query["redirect_to"] = redirect_to + try: + response = self._http_client.request( + method, + url, + headers=headers, + params=query, + json=model_dump(body) if isinstance(body, BaseModel) else body, + ) + response.raise_for_status() + result = response if no_resolve_json else response.json() + if xform: + return xform(result) + except Exception as e: + raise handle_exception(e) |