U
    n/e'#                     @   s   d dl mZmZ d dlmZ d dlmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ G dd dZG dd deZdddZdS )    )UNSIGNED	translate)PartialCredentialsError)EVENT_ALIASESServiceModelSessionUnknownServiceErrorcopy   )retryhandler)AioBaseClientAioClientCreator)"AioSmartDefaultsConfigStoreFactory)AioCredentialscreate_credential_resolver)AioHierarchicalEmitter)AioResponseParserFactorycreate_token_resolver)AioIMDSRegionProviderc                   @   s*   e Zd Zdd ZedddZdd ZdS )	ClientCreatorContextc                 C   s   || _ d | _d S N)_coro_client)selfcoro r   7/tmp/pip-unpacked-wheel-8mnez3y6/aiobotocore/session.py__init__   s    zClientCreatorContext.__init__)returnc                    s   | j I d H | _| j I d H S r   )r   r   
__aenter__r   r   r   r   r       s    zClientCreatorContext.__aenter__c                    s   | j |||I d H  d S r   )r   	__aexit__)r   exc_typeexc_valexc_tbr   r   r   r"      s    zClientCreatorContext.__aexit__N)__name__
__module____qualname__r   r   r    r"   r   r   r   r   r      s   r   c                	       s   e Zd Zd fdd	Zdd Zdd Zd	d
 Zdd ZdddZdd Z	dddZ
d ddZdd Zd!ddZd"ddZ  ZS )#
AioSessionNTc                    s$   |d krt  }t |||| d S r   )r   superr   )r   Zsession_varsZevent_hooksZinclude_builtin_handlersZprofile	__class__r   r   r   %   s       zAioSession.__init__c                 C   s   t | S r   r   r!   r   r   r   _create_token_resolver3   s    z!AioSession._create_token_resolverc                 C   s   t | | jdS )N)region_name)r   Z_last_client_region_usedr!   r   r   r   _create_credential_resolver6   s     z&AioSession._create_credential_resolverc                    s    fdd} j d| d S )Nc                     s     d} t d}t| |S )Ndefault_config_resolver)session)_get_internal_componentr   r   )r0   Zimds_region_providerr!   r   r   create_smart_defaults_factory<   s    
 zRAioSession._register_smart_defaults_factory.<locals>.create_smart_defaults_factorysmart_defaults_factory)Z_internal_componentsZlazy_register_component)r   r3   r   r!   r    _register_smart_defaults_factory;   s
    	 z+AioSession._register_smart_defaults_factoryc                 C   s   | j dt  d S )Nresponse_parser_factory)_componentsZregister_componentr   r!   r   r   r   !_register_response_parser_factoryI   s     z,AioSession._register_response_parser_factoryc                 C   s   t |||| _d S r   )r   _credentials)r   
access_key
secret_keytokenr   r   r   set_credentialsN   s    zAioSession.set_credentialsc                    s(   | j d kr"| jd I d H | _ | j S )NZcredential_provider)r9   r7   get_componentZload_credentialsr!   r   r   r   get_credentialsQ   s    

zAioSession.get_credentialsc                    s   |  ||I d H }t||dS )N)service_name)get_service_datar   )r   r@   api_versionZservice_descriptionr   r   r   get_service_modelZ   s
     
zAioSession.get_service_modelc                    sH   |}|  dj|d|d}t||}| jjd| ||| dI dH  |S )zK
        Retrieve the fully merged data associated with a service.
        data_loaderz	service-2)	type_namerB   zservice-data-loaded.%s)service_datar@   r1   N)r>   Zload_service_modelr   getZ_eventsemit)r   r@   rB   Z	data_pathrF   Z
service_idr   r   r   rA   `   s    
  zAioSession.get_service_datac                 O   s   t | j||S r   )r   _create_client)r   argskwargsr   r   r   create_clientq   s    zAioSession.create_clientc                    s  |   }|
d k	r$|d k	r$||
}
n|d k	r0|}
| ||
}|d krN| d}|d krh| d|d }| d}| d}| d}|
d k	r|
jtkrd }nP|d k	r|d k	rt|||	d}n0| 	||rt
d| 	||dn|  I d H }|  }| d	}| d
}t| d}| d}|j| j| j| jd | |
|}|dkrn| d}||||I d H  | j||d t|||  |tt||||d
}|j|||||||  |
||d
I d H }| d}|d k	r||jj |S )NZ	ca_bundleZapi_versionsrD   event_emitterr6   )r:   r;   r<   explicit)ZproviderZcred_varendpoint_resolverexceptions_factoryconfig_storeuser_agent_creator)Zsession_user_agent_nameZsession_user_agent_versionZsession_user_agent_extralegacyr4   )Zclient_namerQ   )rR   )
r@   r.   Z	is_secureendpoint_urlverifycredentialsZscoped_configZclient_configrB   
auth_tokenmonitor)Zget_default_client_configmergeZ_resolve_region_nameZget_config_variablerG   r>   Zsignature_versionr   r   Z_missing_cred_varsr   r?   Zget_auth_tokenr2   r	   Zset_session_configZuser_agent_nameZuser_agent_versionZuser_agent_extraZ_resolve_defaults_modeZmerge_smart_defaultsZ!_add_configured_endpoint_providerr   
user_agentr   r   rL   Zget_scoped_configregistermetaevents)r   r@   r.   rB   Zuse_sslrU   rT   Zaws_access_key_idZaws_secret_access_keyZaws_session_tokenconfigZdefault_client_configloaderrM   r6   rV   rW   rO   rP   rQ   rR   Zdefaults_moder4   Zclient_creatorclientrX   r   r   r   rI   t   s    

 


 



  


zAioSession._create_clientawsFc                    sZ   |  d}g }z2| |I d H }|d d|}||||}W n tk
rT   Y nX |S )NrO   metadataZendpointPrefix)r2   rA   rG   Zget_available_endpointsr   )r   r@   Zpartition_nameZallow_non_regionalresolverresultsrF   Zendpoint_prefixr   r   r   get_available_regions   s     
   z AioSession.get_available_regions)NNTN)N)N)N)	NNTNNNNNN)ra   F)r&   r'   r(   r   r-   r/   r5   r8   r=   r?   rC   rA   rL   rI   re   __classcell__r   r   r+   r   r)   "   s6       
	

         
q   r)   Nc                 C   s   t | S )z&
    Return a new session object.
    )r)   )Zenv_varsr   r   r   get_session   s    rg   )N) Zbotocorer   r   Zbotocore.exceptionsr   Zbotocore.sessionr   r   r   r   r	    r   r`   r   r   Zconfigproviderr   rV   r   r   hooksr   parsersr   tokensr   utilsr   r   r)   rg   r   r   r   r   <module>   s    U