o
    €Ï½  ã                   @   sT   d 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	 G dd„ de
ƒZd	S )
zÔContext managers related to credentials and authentication.

Context managers allow use of "with" syntax for managing credentials.
Example:

  with CredentialProvidersManager():
    # Task requiring credentials.
é    )Úabsolute_import)Údivision)Úunicode_literals)Úutil)Ústorec                   @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
ÚCredentialProvidersManagerz>Context manager for handling credential provider registration.Nc                 C   s
   || _ dS )zÌInitializes context manager with optional credential providers.

    Args:
      credential_providers (list[object]): List of provider classes like those
        defined in core.credentials.store.py.
    N)Ú_credential_providers)ÚselfÚcredential_providers© r   úS/tmp/google-cloud-sdk/lib/googlecloudsdk/core/credentials/creds_context_managers.pyÚ__init__#   s   
z#CredentialProvidersManager.__init__c                 C   s4   | j pt ¡ g| _ | j D ]}| ¡  qt ¡ t_| S )zBRegisters sources for credentials and project for use by commands.)r   r   ÚGceCredentialProviderÚRegisterÚiamcred_utilÚ ImpersonationAccessTokenProviderÚIMPERSONATION_TOKEN_PROVIDER)r	   Úproviderr   r   r   Ú	__enter__,   s   ÿ

ÿz$CredentialProvidersManager.__enter__c                 C   s$   ~~~| j D ]}| ¡  qdt_dS )zCleans up credential providers.N)r   Ú
UnRegisterr   r   )r	   Úexc_typeÚ	exc_valueÚexc_tracebackr   r   r   r   Ú__exit__9   s   


z#CredentialProvidersManager.__exit__)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r       s
    
	r   N)r   Ú
__future__r   r   r   Ú%googlecloudsdk.api_lib.iamcredentialsr   r   Úgooglecloudsdk.core.credentialsr   Úobjectr   r   r   r   r   Ú<module>   s   	