o nnh@sdZddlmZddlZddlZddlZddlZddl Z ddl Z ddl m Z mZddlmZGdddZGd d d ZGd d d e ZdS) zA simple HTTP client.) annotationsN)ApplicationErrordisplay) CommonConfigc@sHeZdZdZddd d ZdddZdddZdd ddZdd!ddZdS)" HttpClientzMake HTTP requests.FargsralwaysboolreturnNonecCs||_||_dSN)rr )selfrr rF/usr/local/lib/python3.10/dist-packages/ansible_test/_internal/http.py__init__s zHttpClient.__init__urlstr HttpResponsecC |d|S)z,Perform an HTTP GET and return the response.GETrequestrrrrrget zHttpClient.getcCr)z/Perform an HTTP DELETE and return the response.DELETErrrrrdelete rzHttpClient.deleteNdatat.Optional[str]headerst.Optional[dict[str, str]]cCs|d|||S)z,Perform an HTTP PUT and return the response.PUTr)rrrr rrrput$szHttpClient.putmethodcCs|duri}|r |nd}tjj||||d}tjd|d|ddd}d}d} d } d } d } |d 7}t} |jj rB|j sBnzCz"tj |}|j } |j } |} Wdn1s_wYWntjjy}z|j } |j } |} WYd}~nd}~wwWn:ty}z.||krt| }tt|jdt|jd|d|ddt| WYd}~q1d}~ww t| }tjd|d|d| d| dt| d|dd dd| }t||| |S)z0Perform an HTTP request and return the response.N)r$rrr zHTTP  ) verbosityrOKTr.z: z [z.2fz seconds]z -> HTTP z (z) [z bytes, )encodeurllibrRequestrinfotime monotonicrexplainr urlopenstatusreasonreaderror HTTPError Exceptionwarningtype __module____name__sleeplendecoder)rr$rrr data_bytesrattempts max_attempts sleep_seconds status_coder6 body_bytesstartresponseexdurationbodyrrrr(sZ  0   :zHttpClient.request)F)rrr r r r )rrr r)NN)rrrrr r!r r) r$rrrrrr r!r r) r>r= __qualname____doc__rrrr#rrrrrrs    rc@s$eZdZdZdd d Zdd dZdS)rzHTTP response.r$rrrFintrIr r cCs||_||_||_||_dSr )r$rrFrI)rr$rrFrIrrrrfs zHttpResponse.__init__t.Anyc Cs<zt|jWStyt|jd|j|j|jfdw)zJReturn the response parsed as JSON, raising an exception if parsing fails.z*Cannot parse response to %s %s as JSON: %sN)jsonloadsrI ValueError HttpErrorrFr$r)rrrrrQls  zHttpResponse.jsonN) r$rrrrFrOrIrr r )r rP)r>r=rMrNrrQrrrrrcs rcs"eZdZdZd fdd ZZS) rTzHTTP response as an error.r5rOmessagerr r cstd||f||_dS)Nz%s: %s)superrr5)rr5rU __class__rrrws zHttpError.__init__)r5rOrUrr r )r>r=rMrNr __classcell__rrrWrrTtsrT)rN __future__r http.clienthttprQr1typingt urllib.errorr.urllib.requestutilrr util_commonrrrrTrrrrs  N