U
    n/e                     @   sF   d dl Z d dlZd dlmZ d dlmZ eeZG dd deZ	dS )    N)EndpointProviderError)EndpointRulesetResolverc                   @   s$   e Zd Zdd Zdd Zdd ZdS )AioEndpointRulesetResolverc              
      s   |dkri }|dkri }|  |||I dH }td|  z| jjf |}W n@ tk
r } z"| ||}|dkrv n||W 5 d}~X Y nX td|j  | js|j	dr|j
d|jdd  d}|j
dd	 |j D d
}|S )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://zhttp://   )urlc                 S   s   i | ]\}}||d  qS )r    ).0keyvalr   r   7/tmp/pip-unpacked-wheel-8mnez3y6/aiobotocore/regions.py
<dictcomp>6   s     zAAioEndpointRulesetResolver.construct_endpoint.<locals>.<dictcomp>)headers)_get_provider_paramsLOGdebug	_providerZresolve_endpointr   Z#ruleset_error_to_botocore_exceptionr   Z_use_ssl
startswith_replacer   items)selfoperation_model	call_argsrequest_contextprovider_paramsZprovider_resultexZbotocore_exceptionr   r   r   construct_endpoint   sF      
 z-AioEndpointRulesetResolver.construct_endpointc           	         sr   i }|  |||I dH }| j D ]J\}}| j|||d}|dkr\|jdk	r\| j|j|d}|dk	r"|||< q"|S )a  Resolve a value for each parameter defined in the service's ruleset

        The resolution order for parameter values is:
        1. Operation-specific static context values from the service definition
        2. Operation-specific dynamic context values from API parameters
        3. Client-specific context parameters
        4. Built-in values such as region, FIPS usage, ...
        N)
param_namer   r   )builtin_namebuiltins)_get_customized_builtinsZ_param_definitionsr   Z_resolve_param_from_contextbuiltinZ_resolve_param_as_builtin)	r   r   r   r   r   customized_builtinsr   Z	param_defZ	param_valr   r   r   r   =   s(      

z/AioEndpointRulesetResolver._get_provider_paramsc                    s<   | j j }t| j}| jjd| ||||dI d H  |S )Nzbefore-endpoint-resolution.%s)r   modelparamscontext)Z_service_model
service_idZ	hyphenizecopyZ	_builtinsZ_event_emitteremit)r   r   r   r   r%   r!   r   r   r   r   ^   s    z3AioEndpointRulesetResolver._get_customized_builtinsN)__name__
__module____qualname__r   r   r   r   r   r   r   r   
   s   2!r   )
r&   loggingZbotocore.exceptionsr   Zbotocore.regionsr   	getLoggerr(   r   r   r   r   r   r   <module>   s
   
