o
    ?Hh++                     @   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   R/home/air/sanwanet/gpt-api/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 | |}|sC| j	di |}|rC| |S td| | j
|d }|rW| |S |rm|rj| j	di |}|rj| |S t d S )Nr0   z?Optional discovery disabled. Skipping discovery for Operation: z%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   s6   






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}