
    Ѯh4                        d Z ddlZddlmZ ddlmZmZ ddlZddl	Z	ddl
Z
ddlZddlmZ i ej                  ej                  ej                  ej                   ej"                  ej$                  ej&                  ej(                  ej*                  ej,                  ej.                  ej0                  ej2                  ej4                  ej6                  ej8                  ej:                  ej<                  ej>                  ej@                  ejB                  ejD                  ejF                  ejH                  ejJ                  ejL                  ejN                  ejP                  ejR                  ejT                  ejV                  ejX                  Z-ej                  ej&                  ej*                  ej.                  ej:                  ej                  ej>                  ejN                  ejR                  d	Z.ejB                  ejJ                  ej                  ejV                  ej.                  ej6                  ej*                  ej>                  ej                  ej2                  ej"                  ejN                  ejR                  ejF                  ej&                  dZ/d Z0d	 Z1d
 Z2ddZ3	 dde
jh                  deedeejj                     f      dejj                  fdZ6d Z7d Z8ddZ9de
jh                  dejj                  fdZ:dde
jh                  dejj                  fdZ;d Z<d Z=d Z>d Z? G d dej                  j                  j                        ZCy)z)Internal utilities common to all modules.    N)python_version)CallableOptional)
exceptions)	i  i  i  i  i  i  i  i  i  )                        	   
                  c                  >    dt                dt        j                   S )Nz
gl-python/z fire-admin/)r   firebase_admin__version__     g/home/www/academy-backend.kofcorporation.com/venv/lib/python3.12/site-packages/firebase_admin/_utils.pyget_metrics_headerr   Q   s     ()n6P6P5QRRr   c                     | t        j                         S t        | t         j                        r0t        j                  | j                        }| |urt        d      | S t        dt        |        d      )z3Returns a reference to an initialized App instance.zKIllegal app argument. App instance not initialized via the firebase module.zNIllegal app argument. Argument must be of type firebase_admin.App, but given "z".)r   get_app
isinstanceAppname
ValueErrortype)appinitialized_apps     r   _get_initialized_appr&   T   s~    
{%%''#~))*(00:o% D E E

	I;b	 r   c                 <    t        |       } | j                  ||      S N)r&   _get_service)r$   r!   initializers      r   get_app_servicer+   f   s    
s
#CD+..r   c                     | j                   t        |       S | j                   }|j                  j                         }|j                  }t        ||      \  }}d}|r
 || ||      }|r|S t        | ||      S )ag  Constructs a ``FirebaseError`` from the given requests error.

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

    Args:
        error: An error raised by the requests module 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_requests``, but may return ``None``.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code.
    N)responsehandle_requests_errorcontentdecodestatus_code_parse_platform_error_handle_func_requestserrorhandle_funcr-   r/   r1   
error_dictmessageexcs           r   #handle_platform_error_from_requestsr:   k   s     ~~$U++~~H%%'G&&K/EJ
C%*53L0LLr   r5   r6   .returnc                    t        | t        j                        r`| j                  }|j                  j                         }|j                  }t        ||      \  }}d}|r
 || ||      }|r|S t        | ||      S t        |       S )a^  Constructs a ``FirebaseError`` from the given httpx error.

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

    Args:
        error: An error raised by the httpx module 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_httpx``, but may return ``None``.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code.
    N)
r   httpxHTTPStatusErrorr-   r/   r0   r1   r2   _handle_func_httpxhandle_httpx_errorr4   s           r    handle_platform_error_from_httpxrA      s    $ %../>>""))+**3G[I
GeWj9CsM1%*MMe$$r   c                     t        | t              st        j                  d|  |       S | j	                  d      }| j	                  d      }t        |      }t        |      } ||      S )zConstructs a ``FirebaseError`` from the given operation error.

    Args:
        error: An error returned by a long running operation.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code.
    2Unknown error while making a remote service call: r8   causecoder8   )r8   )r   dictr   UnknownErrorget_rpc_code_to_error_code_error_code_to_exception_type)r5   rpc_coder8   
error_codeerr_types        r   handle_operation_errorrO      sk     eT"&&HP 	 yy Hii	"G(2J,Z8HG$$r   c                 >    |j                  d      }t        | ||      S )a|  Constructs a ``FirebaseError`` from the given GCP error.

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

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code or None.
    status)rI   r.   r5   r8   r7   rF   s       r   r3   r3      s!     >>(#D 66r   c                    t        | t        j                  j                        rt        j                  d|  |       S t        | t        j                  j
                        rt        j                  d|  |       S | j                  t        j                  d|  |       S |st        | j                  j                        }|st        |       }t        |      } ||| | j                        S )ao  Constructs a ``FirebaseError`` from the given requests 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 requests 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.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code.
    $Timed out while making an API call: rD   "Failed to establish a connection: rC   r8   rE   http_response)r   requestsr   TimeoutDeadlineExceededErrorConnectionErrorUnavailableErrorr-   rH   _http_status_to_error_coder1   strrK   r5   r8   rF   rN   s       r   r.   r.      s    $ %,,445//:5'B 	 %,,<<=**8@ 	 ~~&&HP 	 )%..*D*DEe*,T2HG5OOr   c                 >    |j                  d      }t        | ||      S )ay  Constructs a ``FirebaseError`` from the given GCP error.

    Args:
        error: An error raised by the httpx module while making an HTTP call.
        message: A message to be included in the resulting ``FirebaseError``.
        error_dict: Parsed GCP error response.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code or None.
    rQ   )rI   r@   rR   s       r   r?   r?      s!     >>(#DeWd33r   c                    t        | t        j                        rt        j                  d|  |       S t        | t        j
                        rt        j                  d|  |       S t        | t        j                        rZt        d|        |st        | j                  j                        }|st        |       }t        |      } ||| | j                        S t        j                  d|  |       S )ai  Constructs a ``FirebaseError`` from the given httpx 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 httpx 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.

    Returns:
        FirebaseError: A ``FirebaseError`` that can be raised to the user code.
    rT   rD   rU   zprinting status errorrV   rC   )r   r=   TimeoutExceptionr   rZ   ConnectErrorr\   r>   printr]   r-   r1   r^   rK   rH   r_   s       r   r@   r@      s    $ %//0//:5'B 	 %++,**8@ 	 %../%u--enn.H.HID%jG06uENNSS""DUGL r   c                 J    t         j                  | t        j                        S )z-Maps an HTTP status to a platform error code.)_HTTP_STATUS_TO_ERROR_CODErI   r   UNKNOWN)rQ   s    r   r]   r]   '  s    %))&*2D2DEEr   c                 J    t         j                  | t        j                        S )z*Maps an RPC code to a platform error code.)_RPC_CODE_TO_ERROR_CODErI   r   rg   )rL   s    r   rJ   rJ   +  s    "&&x1C1CDDr   c                 J    t         j                  | t        j                        S )z0Maps a platform error code to an exception type.)_ERROR_CODE_TO_EXCEPTION_TYPErI   r   rH   )rF   s    r   rK   rK   /  s    (,,T:3J3JKKr   c                     i }	 t        j                  |       }t        |t              r|}|j                  di       }|j                  d      }|sd| d|  }||fS # t        $ r Y <w xY w)a(  Parses an HTTP error response from a Google Cloud Platform API and extracts the error code
    and message fields.

    Args:
        content: Decoded content of the response body.
        status_code: HTTP status code.

    Returns:
        tuple: A tuple containing error code and message.
    r5   r8   z&Unexpected HTTP response with status: z; body: )jsonloadsr   rG   r"   rI   )r/   r1   dataparsed_bodyr7   msgs         r   r2   r2   4  s~     Djj)k4(D '2&J
..
#C6{m8G9Us?  s   'A 	A('A(c                       e Zd ZdZd Zd Zy)EmulatorAdminCredentialsz Credentials for use with the firebase local emulator.

    This is used instead of user-supplied credentials or ADC.  It will silently do nothing when
    asked to refresh credentials.
    c                 x    t         j                  j                  j                  j	                  |        d| _        y )Nowner)googleauthcredentialsCredentials__init__token)selfs    r   rz   z!EmulatorAdminCredentials.__init__W  s'    ++44T:
r   c                      y r(   r   )r|   requests     r   refreshz EmulatorAdminCredentials.refresh[  s    r   N)__name__
__module____qualname____doc__rz   r   r   r   r   rs   rs   Q  s    
r   rs   r(   )NN)Dr   rm   platformr   typingr   r   google.authrv   rX   r=   r   r   INVALID_ARGUMENTInvalidArgumentErrorFAILED_PRECONDITIONFailedPreconditionErrorOUT_OF_RANGEOutOfRangeErrorUNAUTHENTICATEDUnauthenticatedErrorPERMISSION_DENIEDPermissionDeniedError	NOT_FOUNDNotFoundErrorABORTEDAbortedErrorALREADY_EXISTSAlreadyExistsErrorCONFLICTConflictErrorRESOURCE_EXHAUSTEDResourceExhaustedError	CANCELLEDCancelledError	DATA_LOSSDataLossErrorrg   rH   INTERNALInternalErrorUNAVAILABLEr\   DEADLINE_EXCEEDEDrZ   rk   rf   ri   r   r&   r+   r:   	HTTPErrorFirebaseErrorrA   rO   r3   r.   r?   r@   r]   rJ   rK   r2   rw   rx   ry   rs   r   r   r   <module>r      sq   0  # %     %!!@!@!""J$F$F! Z77! 
 ? ?	!
   *"B"B! *22! 
//! z<<! 11! !!:#D#D! *33! *22! 
//! 11! J77!    *"B"B!! * 
	$	$		#	#		%	%								'	'		&	&						
  ""##  ##$$%%"" $S$/
M: TX%%hsHZ5M5M,N'NOP% %>%*7%PN4eoo 4zG_G_ 4&eoo &:KcKc &PFEL
:v{{66BB r   