o
    è’Oj€A  ã                   @   sð   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 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 d dlmZ d d	lmZ d d
lmZ d dlmZmZmZ e e¡Zeƒ ZdZ dZ!dd„ Z"G dd„ dƒZ#G dd„ dƒZ$dS )é    N)Úparsers)Úcreate_request_object)Úget_current_datetime)ÚHTTPClientError)Úget_global_history_recorder)Úfirst_non_none_response)Úhandle_checksum_body)ÚURLLib3Session)ÚStreamingBody)Úget_environ_proxiesÚis_valid_endpoint_urlÚis_valid_ipv6_endpoint_urlé<   é
   c                 C   sz   | j | jd|jidœ}|d dkr| j|d< |S |jr"| j|d< |S |jr6|d  d¡}t| j|ƒ|d< |S | j|d< |S )aµ  Convert an HTTP response object to a request dict.

    This converts the HTTP response object to a dictionary.

    :type http_response: botocore.awsrequest.AWSResponse
    :param http_response: The HTTP response from an AWS service request.

    :rtype: dict
    :return: A response dictionary which will contain the following keys:
        * headers (dict)
        * status_code (int)
        * body (string or file-like object)

    Úoperation_name)ÚheadersÚstatus_codeÚcontextr   é,  Úbodyr   zcontent-length)	r   r   ÚnameÚcontentÚhas_event_stream_outputÚrawÚhas_streaming_outputÚgetr
   )Úhttp_responseÚoperation_modelÚresponse_dictÚlength© r    úW/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/botocore/endpoint.pyÚconvert_to_response_dict+   s"   ÿý
ù
û
ÿr"   c                   @   s    e Zd ZdZ		d#dd„Zdd„ Zdd„ Zd	d
„ Zd$dd„Zdd„ Z	dd„ Z
dd„ Zdd„ Zd$dd„Zdd„ Zdd„ Zdd„ Zdd„ Z		d#dd „Zd!d"„ ZdS )%ÚEndpointa,  
    Represents an endpoint for a particular service in a specific
    region.  Only an endpoint can make requests.

    :ivar service: The Service object that describes this endpoints
        service.
    :ivar host: The fully qualified endpoint hostname.
    :ivar session: The session object.
    Nc                 C   sR   || _ || _|| _t ¡ | _|d u rt ¡ }|| _|| _	| j	d u r't
ƒ | _	d S d S ©N)Ú_endpoint_prefixÚ_event_emitterÚhostÚ	threadingÚLockÚ_lockr   ÚResponseParserFactoryÚ_response_parser_factoryÚhttp_sessionr	   )Úselfr'   Úendpoint_prefixÚevent_emitterÚresponse_parser_factoryr-   r    r    r!   Ú__init__X   s   

ÿzEndpoint.__init__c                 C   s   | j › d| j› d�S )Nú(ú))r%   r'   ©r.   r    r    r!   Ú__repr__k   s   zEndpoint.__repr__c                 C   s   | j  ¡  d S r$   )r-   Úcloser5   r    r    r!   r7   n   s   zEndpoint.closec                 C   s   t  d||¡ |  ||¡S )Nz%Making request for %s with params: %s)ÚloggerÚdebugÚ_send_request)r.   r   Úrequest_dictr    r    r!   Úmake_requestq   s   ýzEndpoint.make_requestc                 C   s^   t |ƒ}|r(t|j|jgƒ|_|jj ¡ }d|› d|j› �}| j	j
|||jd� |  |¡}|S )Nzrequest-created.Ú.)Úrequestr   )r   Úanyr   r   Ústream_outputÚservice_modelÚ
service_idÚ	hyphenizer   r&   ÚemitÚprepare_request)r.   Úparamsr   r>   rB   Ú
event_nameÚprepared_requestr    r    r!   Úcreate_requesty   s    þÿý
zEndpoint.create_requestc                 C   s.   |  ¡ D ]\}}t|tƒr| d¡||< qd S )Nzutf-8)ÚitemsÚ
isinstanceÚstrÚencode)r.   r   ÚkeyÚvaluer    r    r!   Ú_encode_headersŒ   s
   
€þzEndpoint._encode_headersc                 C   s   |   |j¡ | ¡ S r$   )rP   r   Úprepare©r.   r>   r    r    r!   rE   ’   s   zEndpoint.prepare_requestc                 C   s:   t ƒ }tj |d¡}|| }|tj|d� | }| d¡S )Nz%a, %d %b %Y %H:%M:%S %Z)Úsecondsz%Y%m%dT%H%M%SZ)r   ÚdatetimeÚstrptimeÚ	timedeltaÚstrftime)r.   Úresponse_received_timestampÚdate_headerÚread_timeoutÚlocal_timestampÚdate_conversionÚestimated_skewÚttlr    r    r!   Ú_calculate_ttl–   s   ÿ
ÿþÿ
zEndpoint._calculate_ttlc                 C   sl   |d j  d¡}| d¡}|r2|s4ztƒ }|  |||¡|d< W d S  ty1   tjddd� Y d S w d S d S )Nr   ÚDateÚhas_streaming_inputr^   z9Exception received when updating retries context with TTLT©Úexc_info)r   r   r   r_   Ú	Exceptionr8   r9   )r.   Úretries_contextrZ   Úsuccess_responseÚresponse_date_headerra   rX   r    r    r!   Ú_set_ttl¥   s"   
ýþÿøzEndpoint._set_ttlc                 C   sP   |  di ¡}||d< d|vrtt ¡ ƒ|d< |r&|d j}|  |||¡ d S d S )NÚretriesÚattemptzinvocation-idÚclient_config)Ú
setdefaultrL   ÚuuidÚuuid4rZ   rh   )r.   r   rj   rf   re   rZ   r    r    r!   Ú_update_retries_context¶   s   
þz Endpoint._update_retries_contextc           	      C   sÒ   d}|d }|   ||¡ |  ||¡}|  |||¡\}}|  |||||¡rK|d7 }|   |||¡ | ¡  |  ||¡}|  |||¡\}}|  |||||¡s$|d urad|d v ra|d }||d d d< |d urg|‚|S )Né   r   ÚResponseMetadataÚRetryAttempts)ro   rI   Ú_get_responseÚ_needs_retryÚreset_stream)	r.   r;   r   Úattemptsr   r>   rf   Ú	exceptionÚtotal_retriesr    r    r!   r:   À   sL   ÿûÿðûÿ
þÿzEndpoint._send_requestc           
      C   s|   |   |||¡\}}d d ||dœ}|d ur#|\}}||d< t||ƒ|d< |jj ¡ }	| jjd|	› d|j› �fi |¤Ž ||fS )N)r   Úparsed_responser   rw   ry   r   zresponse-received.r=   )Ú_do_get_responser"   rA   rB   rC   r&   rD   r   )
r.   r>   r   r   rf   rw   Úkwargs_to_emitr   ry   rB   r    r    r!   rs   é   s*   ÿüÿÿþzEndpoint._get_responsec              
   C   sš  z=t  d|¡ t d|j|j|j|j|jdœ¡ |j	j
 ¡ }d|› d|j› �}| jj||d�}t|ƒ}|d u r<|  |¡}W n2 tyS } z
d |fW  Y d }~S d }~w tyo } zt jddd	� d |fW  Y d }~S d }~ww t||ƒ}	t||	||ƒ |	 ¡ }
|j|
d
< t d|
¡ |j	j}i }| jjd|› d|j› �||	|d� | j |¡}| |	|j¡}| |¡ |jdkrÁ|  |	|||¡ t d|¡ ||fd fS )NzSending http request: %sÚHTTP_REQUEST)Úmethodr   Ú	streamingÚurlr   zbefore-send.r=   )r>   z-Exception received when sending HTTP request.Trb   r~   ÚHTTP_RESPONSEzbefore-parse.)r   r   Úcustomized_response_dictr   ÚPARSED_RESPONSE)r8   r9   Úhistory_recorderÚrecordr}   r   ra   r   r   rA   rB   rC   r   r&   rD   r   Ú_sendr   rd   r"   r   Úcopyr   Úresolved_protocolr,   Úcreate_parserÚparseÚoutput_shapeÚupdater   Ú_add_modeled_error_fields)r.   r>   r   r   rB   rG   Ú	responsesr   Úer   Úhttp_response_record_dictÚprotocolr�   Úparserry   r    r    r!   rz     s~   ûþ

€€ÿ€üÿüÿüÿ

üzEndpoint._do_get_responsec           	      C   sT   |  di ¡  d¡}|d u rd S |j}| |¡}|d u rd S | ||¡}| |¡ d S )NÚErrorÚCode)r   rA   Úshape_for_error_coder‰   r‹   )	r.   r   ry   r   r‘   Ú
error_coderA   Úerror_shapeÚmodeled_parser    r    r!   rŒ   L  s   
z"Endpoint._add_modeled_error_fieldsc           
   	   C   sn   |j j ¡ }d|› d|j› �}| jj||| ||||d�}t|ƒ}	|	d u s(|	du r*dS t d|	¡ t	 
|	¡ dS )Nzneeds-retry.r=   )ÚresponseÚendpointÚ	operationrv   Úcaught_exceptionr;   Fz3Response received to retry, sleeping for %s secondsT)rA   rB   rC   r   r&   rD   r   r8   r9   ÚtimeÚsleep)
r.   rv   r   r;   r˜   r›   rB   rG   r�   Úhandler_responser    r    r!   rt   ^  s(   ù	þ
zEndpoint._needs_retryc                 C   s   | j  |¡S r$   )r-   ÚsendrR   r    r    r!   r…   ~  s   zEndpoint._send)NNr$   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r2   r6   r7   r<   rI   rP   rE   r_   rh   ro   r:   rs   rz   rŒ   rt   r…   r    r    r    r!   r#   M   s,    
ú


)G
ú r#   c                	   @   s@   e Zd Zdd„ Zddeeeddddf	dd„Zdd„ Zdd	„ Z	dS )
ÚEndpointCreatorc                 C   s
   || _ d S r$   )r&   )r.   r0   r    r    r!   r2   ƒ  s   
zEndpointCreator.__init__Nc              	   C   st   t |ƒst|ƒstd|› �ƒ‚|	d u r|  |¡}	|j}t d||¡ |||	|  |¡||
||d�}t||| j	||d�S )NzInvalid endpoint: zSetting %s timeout as %s)ÚtimeoutÚproxiesÚverifyÚmax_pool_connectionsÚsocket_optionsÚclient_certÚproxies_config)r/   r0   r1   r-   )
r   r   Ú
ValueErrorÚ_get_proxiesr/   r8   r9   Ú_get_verify_valuer#   r&   )r.   rA   Úregion_nameÚendpoint_urlr§   r1   r¥   r¨   Úhttp_session_clsr¦   r©   rª   r«   r/   r-   r    r    r!   Úcreate_endpoint†  s4   ÿþ
ù
ûzEndpointCreator.create_endpointc                 C   s   t |ƒS r$   )r   )r.   r   r    r    r!   r­   ±  s   zEndpointCreator._get_proxiesc                 C   s   |d ur|S t j dd¡S )NÚREQUESTS_CA_BUNDLET)ÚosÚenvironr   )r.   r§   r    r    r!   r®   ¶  s   z!EndpointCreator._get_verify_value)
r    r¡   r¢   r2   ÚDEFAULT_TIMEOUTÚMAX_POOL_CONNECTIONSr	   r²   r­   r®   r    r    r    r!   r¤   ‚  s    
ó+r¤   )%rT   Úloggingr´   r(   rœ   rm   Úbotocorer   Úbotocore.awsrequestr   Úbotocore.compatr   Úbotocore.exceptionsr   Úbotocore.historyr   Úbotocore.hooksr   Úbotocore.httpchecksumr   Úbotocore.httpsessionr	   Úbotocore.responser
   Úbotocore.utilsr   r   r   Ú	getLoggerr    r8   rƒ   r¶   r·   r"   r#   r¤   r    r    r    r!   Ú<module>   s2   
"  7