Skip to content

Commit 17db121

Browse files
committed
feat: Allow for configuration of the httpx client classes to use
1 parent 6d7a40c commit 17db121

2 files changed

Lines changed: 22 additions & 8 deletions

File tree

libsimba/schemas.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@
2323
from datetime import datetime, timezone
2424
from enum import Enum
2525
from pathlib import Path
26-
from typing import IO, Any, AnyStr, Dict, List, Optional, Tuple, Union
26+
from typing import IO, Any, AnyStr, Dict, List, Optional, Tuple, Type, Union
2727

2828
from pydantic import BaseModel, FieldValidationInfo, field_validator, model_validator
2929

30+
import httpx
31+
3032

3133
class AuthFlow(str, Enum):
3234
CLIENT_CREDENTIALS = "client_credentials"
@@ -59,6 +61,8 @@ class ConnectionConfig(BaseModel):
5961
http2: bool = False
6062
# a path to a cert file or false to turn off verification
6163
verify: Optional[Union[bool, str]] = None
64+
httpx_class: Optional[Type[httpx.Client]] = httpx.Client
65+
async_httpx_class: Optional[Type[httpx.AsyncClient]] = httpx.AsyncClient
6266

6367

6468
class Login(BaseModel):

libsimba/utils.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from email.utils import parsedate_to_datetime
2626
from enum import Enum
2727
from time import sleep
28-
from typing import Dict, Iterable, Mapping, Optional, Union
28+
from typing import Dict, Iterable, Mapping, Optional, Type, Union
2929
from urllib.parse import urlencode, urlparse, urlunparse
3030

3131
import httpx
@@ -236,7 +236,9 @@ async def handle_async_request(self, request: httpx.Request) -> httpx.Response:
236236
return response
237237

238238

239-
def async_http_client(config: schemas.ConnectionConfig = None) -> httpx.AsyncClient:
239+
def async_http_client(
240+
config: schemas.ConnectionConfig = None
241+
) -> httpx.AsyncClient:
240242
"""
241243
Create an async HTTPX client
242244
:param config: a connection config
@@ -250,14 +252,20 @@ def async_http_client(config: schemas.ConnectionConfig = None) -> httpx.AsyncCli
250252
)
251253
transport = RetryTransport(
252254
AsyncHTTPTransport(
253-
retries=config.connection_retries, verify=config.verify, http2=config.http2
255+
retries=config.connection_retries,
256+
verify=config.verify,
257+
http2=config.http2
254258
),
255259
max_attempts=config.max_attempts,
256260
)
257-
return httpx.AsyncClient(timeout=config.timeout, transport=transport)
261+
return config.async_httpx_class(timeout=config.timeout,
262+
transport=transport)
258263

259264

260-
def http_client(config: schemas.ConnectionConfig = None) -> httpx.Client:
265+
def http_client(
266+
config: schemas.ConnectionConfig = None,
267+
cls: Optional[Type[httpx.Client]] = httpx.Client
268+
) -> httpx.Client:
261269
"""
262270
Create an HTTPX client
263271
:param config: a connection config
@@ -271,11 +279,13 @@ def http_client(config: schemas.ConnectionConfig = None) -> httpx.Client:
271279
)
272280
transport = RetryTransport(
273281
HTTPTransport(
274-
retries=config.connection_retries, verify=config.verify, http2=config.http2
282+
retries=config.connection_retries,
283+
verify=config.verify,
284+
http2=config.http2
275285
),
276286
max_attempts=config.max_attempts,
277287
)
278-
return httpx.Client(timeout=config.timeout, transport=transport)
288+
return config.httpx_class(timeout=config.timeout, transport=transport)
279289

280290

281291
def build_url(base_api_url: str, path: str, query_dict: Optional[dict]):

0 commit comments

Comments
 (0)