o
    è’Oj=+  ã                   @   sÀ   d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl	m
Z
 d dlmZ e  e¡ZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZdd„ ZG dd„ dƒZG dd„ dƒZG dd„ dƒZdS )é    N)Ú
xform_name)ÚBotoCoreErrorÚConnectionErrorÚHTTPClientError)ÚOperationNotFoundError)ÚCachedPropertyc                   @   s   e Zd ZdS )ÚEndpointDiscoveryExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   úX/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/botocore/discovery.pyr      s    r   c                   @   ó   e Zd ZdZdZdS )ÚEndpointDiscoveryRequiredzBEndpoint Discovery is disabled but is required for this operation.zAEndpoint Discovery is not enabled but this operation requires it.N©r	   r
   r   Ú__doc__Úfmtr   r   r   r   r      ó    r   c                   @   r   )ÚEndpointDiscoveryRefreshFailedz=Endpoint Discovery failed to the refresh the known endpoints.z<Endpoint Discovery failed to refresh the required endpoints.Nr   r   r   r   r   r   #   r   r   c                 K   s"   | j }|r| d¡rtƒ ‚d S d S )NÚrequired)Úendpoint_discoveryÚgetr   )ÚmodelÚkwargsr   r   r   r   Ú,block_endpoint_discovery_required_operations)   s   ÿr   c                   @   sN   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ Zdd„ Z	ddd„Z
dS )ÚEndpointDiscoveryModelc                 C   ó
   || _ d S ©N)Ú_service_model)ÚselfÚservice_modelr   r   r   Ú__init__0   ó   
zEndpointDiscoveryModel.__init__c                 C   s   | j j}t|jƒS r   )r   Úendpoint_discovery_operationr   Úname)r   Údiscovery_operationr   r   r   Údiscovery_operation_name3   s   
z/EndpointDiscoveryModel.discovery_operation_namec                 C   s&   | j j}g }|jrt|jj ¡ ƒ}|S r   )r   r#   Úinput_shapeÚlistÚmembersÚkeys)r   r%   r*   r   r   r   Údiscovery_operation_keys8   s
   z/EndpointDiscoveryModel.discovery_operation_keysc                 C   s2   z| j  |¡}|j dd¡W S  ty   Y dS w )Nr   F)r   Úoperation_modelr   r   r   )r   Úoperation_namer,   r   r   r   Údiscovery_required_for@   s   ÿÿz-EndpointDiscoveryModel.discovery_required_forc                    s>   | j ‰ | d¡s| dd ¡ | dd ¡ ‡ fdd„| ¡ D ƒS )NÚIdentifiersÚ	Operationc                    s   i | ]\}}|ˆ v r||“qS r   r   ©Ú.0ÚkÚv©Ú
input_keysr   r   Ú
<dictcomp>O   s    zEEndpointDiscoveryModel.discovery_operation_kwargs.<locals>.<dictcomp>)r+   r   ÚpopÚitems©r   r   r   r5   r   Údiscovery_operation_kwargsI   s
   
z1EndpointDiscoveryModel.discovery_operation_kwargsc                 C   s   |   |j|¡S r   )Ú_gather_idsr'   ©r   Ú	operationÚparamsr   r   r   Úgather_identifiersQ   ó   z)EndpointDiscoveryModel.gather_identifiersNc                 C   sb   |d u ri }|j  ¡ D ]#\}}|j d¡r|| ||< q|jdkr.||v r.|  ||| |¡ q|S )NÚendpointdiscoveryidÚ	structure)r)   r9   Úmetadatar   Ú	type_namer<   )r   Úshaper?   ÚidsÚmember_nameÚmember_shaper   r   r   r<   T   s   ÿÿ€z"EndpointDiscoveryModel._gather_idsr   )r	   r
   r   r!   r   r&   r+   r.   r;   r@   r<   r   r   r   r   r   /   s    

	r   c                   @   sp   e Zd Z	ddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚEndpointDiscoveryManagerNTc                 C   sP   |d u ri }|| _ i | _|d u rtj}|| _|| _t |¡| _t|j	j
ƒ| _d S r   )Ú_cacheÚ_failed_attemptsÚtimeÚ_timeÚ_always_discoverÚweakrefÚproxyÚ_clientr   Úmetar    Ú_model)r   ÚclientÚcacheÚcurrent_timeÚalways_discoverr   r   r   r!   d   s   z!EndpointDiscoveryManager.__init__c                 C   s8   |d }|   ¡ }|D ]}| d¡}||d  |d< q
|S )NÚ	EndpointsÚCachePeriodInMinutesé<   Ú
Expiration)rN   r   )r   ÚresponseÚ	endpointsrW   ÚendpointÚ
cache_timer   r   r   Ú_parse_endpointsu   s   
z)EndpointDiscoveryManager._parse_endpointsc                 C   s   t |tƒrtt| ¡ ƒƒS |S r   )Ú
isinstanceÚdictÚtupleÚsortedr9   )r   Úvaluer   r   r   Ú_cache_item}   s   
z$EndpointDiscoveryManager._cache_itemc                    s0   ˆ j jdi |¤Ž}t‡ fdd„t| ¡ ƒD ƒƒS )Nc                 3   s   � | ]
\}}ˆ   |¡V  qd S r   )rg   r1   ©r   r   r   Ú	<genexpr>…   s   € z=EndpointDiscoveryManager._create_cache_key.<locals>.<genexpr>r   )rT   r;   rd   re   r9   r:   r   rh   r   Ú_create_cache_keyƒ   s   z*EndpointDiscoveryManager._create_cache_keyc                 C   s   | j  ||¡S r   )rT   r@   r=   r   r   r   r@   ‡   rA   z+EndpointDiscoveryManager.gather_identifiersc                 K   s*   | j di |¤Ž}|| jv r| j|= d S d S )Nr   )rj   rK   )r   r   Ú	cache_keyr   r   r   Údelete_endpointsŠ   s   
ÿz)EndpointDiscoveryManager.delete_endpointsc                 K   s@   | j jdi |¤Ž}| j j}t| j|ƒ}t d|¡ |di |¤ŽS )Nz%Discovering endpoints with kwargs: %sr   )rT   r;   r&   ÚgetattrrR   ÚloggerÚdebug)r   r   r-   r%   r   r   r   Ú_describe_endpoints�   s
   z,EndpointDiscoveryManager._describe_endpointsc                    s.   || j vrd S |  ¡ ‰ ‡ fdd„| j | D ƒS )Nc                    s   g | ]
}ˆ |d  k r|‘qS )r\   r   )r2   Úe©Únowr   r   Ú
<listcomp>œ   s    zCEndpointDiscoveryManager._get_current_endpoints.<locals>.<listcomp>)rK   rN   )r   Úkeyr   rr   r   Ú_get_current_endpoints˜   s   
z/EndpointDiscoveryManager._get_current_endpointsc              	   K   st   | j di |¤Ž}z| jdi |¤Ž}|  |¡}|| j|< | j |d ¡ |W S  ttfy9   |  ¡ d | j|< Y d S w )Nr[   r   )	rj   rp   ra   rK   rL   r8   r   r   rN   )r   r   rk   r]   r^   r   r   r   Ú_refresh_current_endpointsž   s   

þz3EndpointDiscoveryManager._refresh_current_endpointsc                 C   s0   || j v r|  ¡ }|| j | k rdS | j |= dS )NTF)rL   rN   )r   rk   rs   r   r   r   Ú_recently_failedª   s   
z)EndpointDiscoveryManager._recently_failedc                 C   s   |d d S )Nr   ÚAddressr   )r   r^   r   r   r   Ú_select_endpoint²   s   z)EndpointDiscoveryManager._select_endpointc                 K   sÚ   |d }| j  |¡}| js|st d|¡ d S | jdi |¤Ž}|  |¡}|r+|  |¡S |  |¡}|sA| j	di |¤Ž}|rA|  |¡S t d|¡ | j
 |d ¡}|rU|  |¡S |rk|rh| j	di |¤Ž}|rh|  |¡S tƒ ‚d S )Nr0   zAOptional discovery disabled. Skipping discovery for Operation: %sz%Endpoint Discovery has failed for: %sr   )rT   r.   rO   rn   ro   rj   rv   rz   rx   rw   rK   r   r   )r   r   r>   Údiscovery_requiredrk   r^   Úrecently_failedÚstale_entriesr   r   r   Údescribe_endpointµ   s8   
þ





z*EndpointDiscoveryManager.describe_endpoint)NNT)r	   r
   r   r!   ra   rg   rj   r@   rl   rp   rv   rw   rx   rz   r~   r   r   r   r   rJ   c   s    
ÿ	rJ   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚEndpointDiscoveryHandlerc                 C   r   r   )Ú_manager)r   Úmanagerr   r   r   r!   â   r"   z!EndpointDiscoveryHandler.__init__c                 C   s@   |  d|› �| j¡ | d|› �| j¡ |  d|› �| j¡ d S )Nzbefore-parameter-build.zrequest-created.zneeds-retry.)Úregisterr@   Úregister_firstÚdiscover_endpointÚhandle_retries)r   ÚeventsÚ
service_idr   r   r   r‚   å   s   ÿÿz!EndpointDiscoveryHandler.registerc                 K   s0   |j }|d u r	d S | j ||¡}d|i|d< d S )NÚidentifiersÚ	discovery)r   r€   r@   )r   r?   r   Úcontextr   r   rG   r   r   r   r@   î   s
   z+EndpointDiscoveryHandler.gather_identifiersc                 K   sn   |j  di ¡ d¡}|d u rd S | jj||d�}|d u r#t d¡ d S | d¡s,d| }t d|¡ ||_d S )Nr‰   rˆ   ©r0   r/   z&Failed to discover and inject endpointÚhttpzhttps://z!Injecting discovered endpoint: %s)rŠ   r   r€   r~   rn   ro   Ú
startswithÚurl)r   Úrequestr-   r   rG   r_   r   r   r   r„   ö   s   ÿ


z*EndpointDiscoveryHandler.discover_endpointc           
      K   sŒ   |d u rd S |\}}|  di ¡  d¡}|  di ¡  d¡}|dkr&|dkr&d S |  di ¡}|  di ¡  d	¡}	|	d u r;d S | jj|j|	d
� dS )NÚResponseMetadataÚHTTPStatusCodeÚErrorÚCodei¥  ÚInvalidEndpointExceptionrŠ   r‰   rˆ   r‹   r   )r   r€   rl   r$   )
r   Úrequest_dictr]   r>   r   Ú_ÚstatusÚ
error_coderŠ   rG   r   r   r   r…     s   ÿz'EndpointDiscoveryHandler.handle_retriesN)r	   r
   r   r!   r‚   r@   r„   r…   r   r   r   r   r   á   s    	r   )ÚloggingrM   rP   Úbotocorer   Úbotocore.exceptionsr   r   r   Úbotocore.modelr   Úbotocore.utilsr   Ú	getLoggerr	   rn   r   r   r   r   r   rJ   r   r   r   r   r   Ú<module>   s   
4~