
    Vh                        d Z ddlmZ ddlZddlZddlZddlZddl	Z
ddlZ
ddlmZmZ ddlmZ  G d d      Z G d	 d
      Z G d de      Zy)zA simple HTTP client.    )annotationsN   )ApplicationErrordisplay)CommonConfigc                  >    e Zd ZdZdd	dZd
dZd
dZdddZdddZy)
HttpClientzMake HTTP requests.c                     || _         || _        y N)argsalways)selfr   r   s      K/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/http.py__init__zHttpClient.__init__   s    	    c                &    | j                  d|      S )z,Perform an HTTP GET and return the response.GETrequestr   urls     r   getzHttpClient.get   s    ||E3''r   c                &    | j                  d|      S )z/Perform an HTTP DELETE and return the response.DELETEr   r   s     r   deletezHttpClient.delete    s    ||Hc**r   Nc                *    | j                  d|||      S )z,Perform an HTTP PUT and return the response.PUTr   )r   r   dataheaderss       r   putzHttpClient.put$   s    ||E3g66r   c                   |i }|r|j                         nd}t        j                  j                  ||||      }t	        j
                  d| d| d       d}d}d}	d	}
d
}d}	 |dz  }t        j                         }| j                  j                  r| j                  snS	 	 t        j                  j                  |      5 }|j                  }
|j                  }|j                         }ddd       	 t        j                         |z
  }t	        j
                  d| d| d|
 d| dt/        |       d|ddd       |j1                         }t3        |||
|      S # 1 sw Y   sxY w# t        j                  j                   $ r2}|j                  }
|j                  }|j                         }Y d}~d}~ww xY w# t"        $ r}||k\  r t        j                         |z
  }t	        j$                  t'        |      j(                   dt'        |      j*                   d| d|dd       t        j,                  |	       Y d}~d}~ww xY w)z0Perform an HTTP request and return the response.N)methodr   r   r   zHTTP     )	verbosityr         OKr   r   .: z [z.2fz	 seconds]z	 -> HTTP z (z) [z bytes, )encodeurllibr   Requestr   infotime	monotonicr   explainr   urlopenstatusreasonreaderror	HTTPError	Exceptionwarningtype
__module____name__sleeplendecodeHttpResponse)r   r"   r   r   r   
data_bytesr   attemptsmax_attemptssleep_secondsstatus_coder4   
body_bytesstartresponseexdurationbodys                     r   r   zHttpClient.request(   s)   ?G&*T[[]
..((CjZa(b 	uVHAcU+q9
MHNN$Eyy  +//8 5H&.oo!)%-]]_
5& >>#e+uVHAcU)K=6(#cR\oM^^fgopsftt}~  KL  	M  "FCd;;55 5 ||-- +"$))KYYF!#J+  	|+  >>+e348#6#6"7qb9J9J8K2bTQST\]`Saaj kl

=)	sO   $E* )E,E* E'#E* *F9(F4/F< 4F99F< <	I
A:II
)F)r   r   r   boolreturnNone)r   strrM   r@   )NN)r   rO   r   t.Optional[str]r   t.Optional[dict[str, str]]rM   r@   )
r"   rO   r   rO   r   rP   r   rQ   rM   r@   )	r<   r;   __qualname____doc__r   r   r   r    r    r   r   r	   r	      s    (+78<r   r	   c                       e Zd ZdZddZddZy)r@   zHTTP response.c                <    || _         || _        || _        || _        y r   )r"   r   rE   rH   )r   r"   r   rE   rH   s        r   r   zHttpResponse.__init__f   s    & r   c           
         	 t        j                  | j                        S # t        $ r? t	        | j
                  d| j                  d| j                  d| j                        dw xY w)zJReturn the response parsed as JSON, raising an exception if parsing fails.zCannot parse response to r#   z
 as JSON:
N)jsonloadsrH   
ValueError	HttpErrorrE   r"   r   )r   s    r   rX   zHttpResponse.jsonl   ss    	P::dmm,, 	PD,,_c_j_jlpltltvz  wD  wD  /E  F  LP  P	Ps
   ! AA)N)
r"   rO   r   rO   rE   intrH   rO   rM   rN   )rM   zt.Any)r<   r;   rR   rS   r   rX   rT   r   r   r@   r@   c   s    !Pr   r@   c                  $     e Zd ZdZd fdZ xZS )r[   zHTTP response as an error.c                <    t         |   |d|       || _        y )Nr*   )superr   r3   )r   r3   message	__class__s      r   r   zHttpError.__init__w   s    VW56r   )r3   r\   r`   rO   rM   rN   )r<   r;   rR   rS   r   __classcell__)ra   s   @r   r[   r[   t   s    $ r   r[   )rS   
__future__r   http.clienthttprX   r/   typingturllib.errorr,   urllib.requestutilr   r   util_commonr   r	   r@   r[   rT   r   r   <module>rl      sM     "      

K< K<\P P"  r   