
                         Z    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e
      Zy	)
zContext 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                   $    e Zd ZdZddZd Zd Zy)CredentialProvidersManagerz>Context manager for handling credential provider registration.Nc                     || _         y)zInitializes 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_providerss     =lib/googlecloudsdk/core/credentials/creds_context_managers.py__init__z#CredentialProvidersManager.__init__#   s     "6D    c                     | j                   xs t        j                         g| _         | j                   D ]  }|j                           t	        j
                         t        _        | S )zBRegisters sources for credentials and project for use by commands.)r   r   GceCredentialProviderRegisteriamcred_util ImpersonationAccessTokenProviderIMPERSONATION_TOKEN_PROVIDER)r   providers     r   	__enter__z$CredentialProvidersManager.__enter__,   s`    !%!;!; "##%@D .. /
 	557 
&Kr   c                 b    ~~~| j                   D ]  }|j                           dt        _        y)zCleans up credential providers.N)r   
UnRegisterr   r   )r   exc_type	exc_valueexc_tracebackr   s        r   __exit__z#CredentialProvidersManager.__exit__9   s/    	9m.. / *.E&r   )N)__name__
__module____qualname____doc__r   r   r    r   r   r	   r	       s    F6.r   r	   N)r"   
__future__r   r   r   %googlecloudsdk.api_lib.iamcredentialsr   r   googlecloudsdk.core.credentialsr   objectr	   r#   r   r   <module>r(      s'    '  ' F 1. .r   