
    .
0h%                        d Z ddlZddlm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j        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        ej         ej!        ej"        ej#        ej$        ej%        ej&        ej'        ej(        Z)ej	        ej        ej        ej        ej        ej        ej        ej#        ej%        d	Z*ej        ej!        ej	        ej'        ej        ej        ej        ej        ej        ej        ej        ej#        ej%        ej        ej        dZ+d Z,d Z-d	 Z.dd
Z/d Z0d Z1ddZ2d Z3d Z4d Z5d Z6 G d dej7        j8        j9                  Z:dS )z)Internal utilities common to all modules.    N)python_version)
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__     P/var/www/html/nourish/venv/lib/python3.11/site-packages/firebase_admin/_utils.pyget_metrics_headerr   O   s!    R((RRn6PRRRr   c                    | t          j                    S t          | t           j                  r.t          j        | j                  }| |urt          d          | S t          d                    t          |                               )z3Returns a reference to an initialized App instance.NzKIllegal app argument. App instance not initialized via the firebase module.zTIllegal app argument. Argument must be of type  firebase_admin.App, but given "{0}".)r   get_app
isinstanceAppname
ValueErrorformattype)appinitialized_apps     r   _get_initialized_appr%   R   s    
{%'''#~)** (0::o%% D E E E

 ==CVDII=N=NP P Pr   c                 L    t          |           } |                     ||          S N)r%   _get_service)r#   r   initializers      r   get_app_servicer*   c   s%    
s
#
#CD+...r   c                     | j         t          |           S | j         }|j                                        }|j        }t          ||          \  }}d}|r || ||          }|r|n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.   r0   
error_dictmessageexcs           r   #handle_platform_error_from_requestsr8   h   s     ~$U+++~H%%''G&K/EEJ
C 6k%*55L330LLLr   c                 &   t          | t                    s)t          j        d                    |           |           S |                     d          }|                     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.
    5Unknown error while making a remote service call: {0}r6   causecoder6   )r6   )r   dictr   UnknownErrorr!   get_rpc_code_to_error_code_error_code_to_exception_type)r3   rpc_coder6   
error_codeerr_types        r   handle_operation_errorrF      s     eT"" &KRRSXYY   	 yy  Hii	""G(22J,Z88H8G$$$$r   c                 N    |                     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)r@   r-   )r3   r6   r5   r=   s       r   r2   r2      s'     >>(##D 6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.
    z'Timed out while making an API call: {0}r;   z%Failed to establish a connection: {0}Nr:   )r6   r<   http_response)r   requestsr   TimeoutDeadlineExceededErrorr!   ConnectionErrorUnavailableErrorr,   r?   _http_status_to_error_coder0   strrB   )r3   r6   r=   rE   s       r   r-   r-      s!   $ %,455 /=DDUKK   	 %,<== *;BB5II   	 ~&KRRSXYY   	  F)%.*DEE e**,T22H8G5OOOOr   c                 L    t                               | t          j                  S )z-Maps an HTTP status to a platform error code.)_HTTP_STATUS_TO_ERROR_CODEr@   r   UNKNOWN)rH   s    r   rP   rP      s    %))&*2DEEEr   c                 L    t                               | t          j                  S )z*Maps an RPC code to a platform error code.)_RPC_CODE_TO_ERROR_CODEr@   r   rT   )rC   s    r   rA   rA      s    "&&x1CDDDr   c                 L    t                               | t          j                  S )z0Maps a platform error code to an exception type.)_ERROR_CODE_TO_EXCEPTION_TYPEr@   r   r?   )r=   s    r   rB   rB      s    (,,T:3JKKKr   c                    i }	 t          j        |           }t          |t                    r|}n# t          $ r Y nw xY w|                    di           }|                    d          }|sd                    ||           }||fS )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.
    r3   r6   z4Unexpected HTTP response with status: {0}; body: {1})jsonloadsr   r>   r    r@   r!   )r.   r0   dataparsed_bodyr5   msgs         r   r1   r1      s     Dj))k4(( 	D    '2&&J
..
#
#C bDKKKY`aas?s   +0 
==c                       e Zd ZdZd Zd ZdS )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                 f    t           j        j        j                            |            d| _        d S )Nowner)googleauthcredentialsCredentials__init__token)selfs    r   rg   z!EmulatorAdminCredentials.__init__   s)    +44T:::


r   c                     d S r'   r   )ri   requests     r   refreshz EmulatorAdminCredentials.refresh  s    r   N)__name__
__module____qualname____doc__rg   rl   r   r   r   r`   r`      s<         
      r   r`   r'   )NN);rp   rZ   platformr   google.authrc   rK   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DataLossErrorrT   r?   INTERNALInternalErrorUNAVAILABLErO   DEADLINE_EXCEEDEDrM   rX   rS   rV   r   r%   r*   r8   rF   r2   r-   rP   rA   rB   r1   rd   re   rf   r`   r   r   r   <module>r      s0   0 /  # # # # # #          % % % % % %!!@!"J$F! Z7! 
 ?	!
  *"B! *2! 
/! z<! 1! !:#D! *3! *2! 
/! 1! J7!   *"B!! * 
	$		#		%						'		&				
 
  "# #$%"  $S S SP P P"/ / /
M M M M8% % %*7 7 7%P %P %P %PPF F FE E EL L L
  :    v{6B     r   