o
    f>hj                     @   s   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlm
Z G dd deZG d	d
 d
eZdS )    )Logger)AnyDictOptionalTuple)	urlencode)ResponseTwilioException)Requestc                   @   s   e Zd Zddededee fddZ	 						dded	ed
ee	ee
f  dee	ee
f  dee	eef  deeeef  dee dedefddZde	eef ddfddZdededdfddZdS )
HttpClientNloggeris_asynctimeoutc                 C   s:   || _ || _|dur|dkrt||| _d| _d| _dS )a  
        Constructor for the abstract HTTP client

        :param logger
        :param is_async: Whether the client supports async request calls.
        :param timeout: Timeout for the requests.
                        Timeout should never be zero (0) or less.
        Nr   )r   r   
ValueErrorr   _test_only_last_request_test_only_last_response)selfr   r   r    r   G/var/www/html/venv/lib/python3.10/site-packages/twilio/http/__init__.py__init__   s   	
zHttpClient.__init__Fmethoduriparamsdataheadersauthallow_redirectsreturnc	           	      C   s   t d)z'
        Make an HTTP request.
        zHttpClient is an abstract classr	   	r   r   r   r   r   r   r   r   r   r   r   r   request$   s   zHttpClient.requestkwargsc              	   C   s   | j d |d r)| j d|d |d t|d  | j d|d  n| j d|d |d  |d r\| j d	 |d  D ]\}}d
| vr[| j d|| qG| j d dS )z'
        Logs the HTTP request
        z-- BEGIN Twilio API Request --r   z{} Request: {}?{}r   urlzQuery Params: {}z{} Request: {}r   zHeaders:authorizationz{} : {}z-- END Twilio API Request --N)r   infoformatr   itemslower)r   r!   keyvaluer   r   r   log_request4   s    zHttpClient.log_requeststatus_coderesponsec                 C   s*   | j d| | j d|j dS )z(
        Logs the HTTP response
        zResponse Status Code: {}zResponse Headers: {}N)r   r$   r%   r   )r   r+   r,   r   r   r   log_responseM   s   zHttpClient.log_response)NNNNNNF)__name__
__module____qualname__r   boolr   floatr   strr   objectr   TwilioResponser    r   r*   intr   r-   r   r   r   r   r      s<    	

r   c                   @   s   e Zd ZdZ						ddededeeeef  deeeef  deeeef  d	eeeef  d
ee	 de
defddZdS )AsyncHttpClientzE
    An abstract class representing an asynchronous HTTP client.
    NFr   r   r   r   r   r   r   r   r   c	           	         s
   t d)z4
        Make an asynchronous HTTP request.
        z$AsyncHttpClient is an abstract classr	   r   r   r   r   r    Z   s   zAsyncHttpClient.requestr.   )r/   r0   r1   __doc__r4   r   r   r5   r   r3   r2   r6   r    r   r   r   r   r8   U   s6    	
r8   N)loggingr   typingr   r   r   r   urllib.parser   requestsr   twilio.base.exceptionsr
   twilio.http.requestr   TwilioRequesttwilio.http.responser6   r5   r   r8   r   r   r   r   <module>   s    I