o
     i                  
   @  s   U d Z ddlmZ ddlmZmZ ddlmZ ddlmZ z+ddl	m
Z
 ddlmZ e  Ze
j D ]\ZZedsFeevrFee e< q4W n eyY Z zed	ed
Z[ww dZded< ddddZG dd dZd
S )zCloud Firestore Async module.

This module contains utilities for asynchronusly accessing the Google Cloud Firestore databases
associated with Firebase apps. This requires the ``google-cloud-firestore`` Python module.
    )annotations)OptionalDict)App)_utils)	firestore)DEFAULT_DATABASE_zrFailed to import the Cloud Firestore library for Python. Make sure to install the "google-cloud-firestore" module.N_firestore_asyncstr_FIRESTORE_ASYNC_ATTRIBUTEappOptional[App]database_idOptional[str]returnfirestore.AsyncClientc                 C  s:   |durt |tstd| dt| tt}||S )aP  Returns an async client that can be used to interact with Google Cloud Firestore.

    Args:
        app: An App instance (optional).
        database_id: The database ID of the Google Cloud Firestore database to be used.
            Defaults to the default Firestore database ID if not specified or an empty string
            (optional).

    Returns:
        google.cloud.firestore.Firestore_Async: A `Firestore Async Client`_.

    Raises:
        ValueError: If the specified database ID is not a valid string, or if a project ID is not
            specified either via options, credentials or environment variables, or if the specified
            project ID is not a valid string.

    .. _Firestore Async Client: https://cloud.google.com/python/docs/reference/firestore/latest/        google.cloud.firestore_v1.async_client.AsyncClient
    Nzdatabase_id "z" must be a string or None.)
isinstancer   
ValueErrorr   get_app_servicer   _FirestoreAsyncService
get_client)r   r   
fs_service r   ~/var/www/snowflake_co_dev_github/snow_flake_back_end_deploy/env/lib/python3.10/site-packages/firebase_admin/firestore_async.pyclient)   s   
r   c                   @  s$   e Zd ZdZdddZdddZdS )r   z?Service that maintains a collection of firestore async clients.r   r   r   Nonec                 C  s   || _ i | _d S )N)_app_clients)selfr   r   r   r   __init__G   s   
z_FirestoreAsyncService.__init__r   r   r   c                 C  sV   |pt }|| jvr&| jj }| jj}|stdtj|||d}|| j|< | j| S )zKCreates an async client based on the database_id. These clients are cached.zProject ID is required to access Firestore. Either set the projectId option, or use service account credentials. Alternatively, set the GOOGLE_CLOUD_PROJECT environment variable.)credentialsprojectdatabase)	r   r   r   
credentialget_credential
project_idr   r   AsyncClient)r   r   r!   r"   	fs_clientr   r   r   r   K   s   


z!_FirestoreAsyncService.get_clientN)r   r   r   r   )r   r   r   r   )__name__
__module____qualname____doc__r    r   r   r   r   r   r   D   s    
r   )NN)r   r   r   r   r   r   )r,   
__future__r   typingr   r   firebase_adminr   r   google.cloudr   %google.cloud.firestore_v1.base_clientr   globalskeysexisting__dict__itemskeyvalue
startswithImportErrorerrorr   __annotations__r   r   r   r   r   r   <module>   s.   

