o
    ×èFhÚ  ã                   @   sl   d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ ddd„Z	dd„ Z
dd	d
„Zdd„ ZdS )z:Internal utilities for interacting with Google API client.é    N)Ú
exceptions)Ú_utilsc                 C   sl   t | tjjƒst| ƒS | j ¡ }| jj}t	 
||¡\}}t| ƒ}d}|r+|| |||ƒ}|r/|S t| |||ƒS )au  Constructs a ``FirebaseError`` from the given googleapiclient error.

    This can be used to handle errors returned by Google Cloud Platform (GCP) APIs.

    Args:
        error: An error raised by the googleapiclient while making an HTTP call to a GCP API.
        handle_func: A function that can be used to handle platform errors in a custom way. When
            specified, this function will be called with three arguments. It has the same
            signature as ```_handle_func_googleapiclient``, but may return ``None``.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code.
    N)Ú
isinstanceÚgoogleapiclientÚerrorsÚ	HttpErrorÚhandle_googleapiclient_errorÚcontentÚdecodeÚrespÚstatusr   Ú_parse_platform_errorÚ)_http_response_from_googleapiclient_errorÚ_handle_func_googleapiclient)ÚerrorÚhandle_funcr	   Ústatus_codeÚ
error_dictÚmessageÚhttp_responseÚexc© r   úT/var/www/html/loop/nvenv/lib/python3.10/site-packages/firebase_admin/_gapic_utils.pyÚ*handle_platform_error_from_googleapiclient   s   
r   c                 C   s   |  d¡}t| |||ƒS )aÛ  Constructs a ``FirebaseError`` from the given GCP error.

    Args:
        error: An error raised by the googleapiclient module while making an HTTP call.
        message: A message to be included in the resulting ``FirebaseError``.
        error_dict: Parsed GCP error response.
        http_response: A requests HTTP response object to associate with the exception.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code or None.
    r   )Úgetr   )r   r   r   r   Úcoder   r   r   r   8   s   
r   c                 C   s¼   t | tjƒst | tjƒrdt| ƒv rtjd | ¡| d�S t | tj	ƒr,tj
d | ¡| d�S t | tjjƒs=tjd | ¡| d�S |sFt | jj¡}|sLt| ƒ}|sRt| ƒ}t |¡}||| |d�S )a&  Constructs a ``FirebaseError`` from the given googleapiclient error.

    This method is agnostic of the remote service that produced the error, whether it is a GCP
    service or otherwise. Therefore, this method does not attempt to parse the error response in
    any way.

    Args:
        error: An error raised by the googleapiclient module while making an HTTP call.
        message: A message to be included in the resulting ``FirebaseError`` (optional). If not
            specified the string representation of the ``error`` argument is used as the message.
        code: A GCP error code that will be used to determine the resulting error type (optional).
            If not specified the HTTP status code on the error response is used to determine a
            suitable error code.
        http_response: A requests HTTP response object to associate with the exception (optional).
            If not specified, one will be created from the ``error``.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code.
    z	timed outz'Timed out while making an API call: {0})r   Úcausez%Failed to establish a connection: {0}z5Unknown error while making a remote service call: {0})r   r   r   )r   ÚsocketÚtimeoutr   Ústrr   ÚDeadlineExceededErrorÚformatÚhttplib2ÚServerNotFoundErrorÚUnavailableErrorr   r   r   ÚUnknownErrorr   Ú_http_status_to_error_coder   r   r   Ú_error_code_to_exception_type)r   r   r   r   Úerr_typer   r   r   r   H   s4   
ÿþþþ
r   c                 C   s&   t j ¡ }t | j¡|_| jj|_	|S )zMCreates a requests HTTP Response object from the given googleapiclient error.)
ÚrequestsÚmodelsÚResponseÚioÚBytesIOr	   Úrawr   r   r   )r   r   r   r   r   r   u   s   

r   )N)NNN)Ú__doc__r,   r   r   r"   r)   Úfirebase_adminr   r   r   r   r   r   r   r   r   r   Ú<module>   s   

-