o
    gQ                     @   s   d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	 dede
deee ee f fdd	Z	
	
ddede
dee dee deee ee f f
ddZd
S )    )OptionalTuple)UserIdentity)DEFAULT_DATABASEDEFAULT_TENANT)ChromaAuthErroruser_identity4overwrite_singleton_tenant_database_access_from_authreturnc                 C   sX   |sdS d}d}| j }| j}|r|dkr|}|r(t|dkr(|d dkr(|d }||fS )a(  
    If settings.chroma_overwrite_singleton_tenant_database_access_from_auth
    is False, this function always returns (None, None).

    If settings.chroma_overwrite_singleton_tenant_database_access_from_auth
    is True, follows the following logic:
    - If the user only has access to a single tenant, this function will
        return that tenant as its first return value.
    - If the user only has access to a single database, this function will
        return that database as its second return value. If the user has
        access to multiple tenants and/or databases, including "*", this
        function will return None for the corresponding value(s).
    - If the user has access to multiple tenants and/or databases this
        function will return None for the corresponding value(s).
    NNN*   r   )tenant	databaseslen)r   r	   r   databaseuser_tenantuser_databases r   S/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/auth/utils/__init__.py(_singleton_tenant_database_if_applicable   s   r   Nuser_provided_tenantuser_provided_databasec                 C   sx   t | |d\}}|r|tkr|r||krt|r$|tkr$|r$||kr$t|r*|tkr.|r.|}|r4|tkr8|r8|}||fS )N)r   r	   )r   r   r   r   )r   r	   r   r   
new_tenantnew_databaser   r   r   maybe_set_tenant_and_database(   sD   	r   r   )typingr   r   chromadb.authr   chromadb.configr   r   chromadb.errorsr   boolstrr   r   r   r   r   r   <module>   s0    
#