diff --git a/api4jenkins/http.py b/api4jenkins/http.py index 91b3403..4465c26 100644 --- a/api4jenkins/http.py +++ b/api4jenkins/http.py @@ -1,4 +1,5 @@ # encoding: utf-8 +import inspect import logging from httpx import (AsyncClient, AsyncHTTPTransport, Client, HTTPTransport, @@ -29,20 +30,19 @@ def check_response(response: Response) -> None: response.raise_for_status() +def _new_transport(obj, kwargs): + init_args = { + arg: kwargs.pop(arg) + for arg in inspect.getfullargspec(obj).args + if arg in kwargs + } + return obj(**init_args) + + def new_http_client(**kwargs) -> Client: + trans = _new_transport(HTTPTransport, kwargs) return Client( - transport=HTTPTransport( - verify=kwargs.pop('verify', True), - cert=kwargs.pop('cert', None), - http1=kwargs.pop('http1', True), - http2=kwargs.pop('http2', False), - trust_env=kwargs.pop('trust_env', True), - proxy=kwargs.pop('proxy', None), - uds=kwargs.pop('uds', None), - local_address=kwargs.pop('local_address', None), - retries=kwargs.pop('retries', 0), - socket_options=kwargs.pop('socket_options', None) - ), + transport=trans, **kwargs, event_hooks={'request': [log_request], 'response': [check_response]} ) @@ -58,19 +58,9 @@ async def async_check_response(response: Response) -> None: def new_async_http_client(**kwargs) -> AsyncClient: + trans = _new_transport(AsyncHTTPTransport, kwargs) return AsyncClient( - transport=AsyncHTTPTransport( - verify=kwargs.pop('verify', True), - cert=kwargs.pop('cert', None), - http1=kwargs.pop('http1', True), - http2=kwargs.pop('http2', False), - trust_env=kwargs.pop('trust_env', True), - proxy=kwargs.pop('proxy', None), - uds=kwargs.pop('uds', None), - local_address=kwargs.pop('local_address', None), - retries=kwargs.pop('retries', 0), - socket_options=kwargs.pop('socket_options', None) - ), + transport=trans, **kwargs, event_hooks={'request': [async_log_request], 'response': [async_check_response]}