
    q9i@                     ,   d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
 d dlZd dlmZmZ d dlmZ d dlZd dlmZ d dlZd dlZd dlZej.                  deeddf   fd       Zej.                  deeddf   fd	       Zed
ef   Z ej.                  ddg      dej6                  deeddf   fd       Z ej.                         dedeeddf   fd       ZdeddfdZdeddfdZdeddfdZ deddfdZ!deddfdZ"deed
ef   ee#ef   f   fdZ$ddZ%y)    N)AnyCallable	GeneratorcastDictTuple)	MagicMockpatch)SettingsSystem)	ClientAPI)FastAPIreturnc               #      K   t         j                  j                  d      rt        j                  d       t        j                         } |  | j                          y w)NCHROMA_INTEGRATION_TEST_ONLYIntegration test only)osenvirongetpytestskipchromadbEphemeralClientclear_system_cacheclients    b/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/chromadb/test/test_client.pyephemeral_apir      sC     	zz~~45+,%%'F
L
s   AA c               #      K   t         j                  j                  d      rt        j                  d       t        j                  t        j                         dz         } |  | j                          y w)Nr   r   z/test_server)path)
r   r   r   r   r   r   PersistentClienttempfile
gettempdirr   r   s    r   persistent_apir$      sX     	zz~~45+,&&  "^3F L
s   A5A7.sync_clientasync_client)paramsrequestc              #     K   | j                   dk(  r;t        d      5  t        d      5  t        j                   d d d        d d d        y t        d      5  t        d      5  dt        dt        dt        fd	}t        t        |       d d d        d d d        y # 1 sw Y   cxY w# 1 sw Y   y xY w# 1 sw Y   *xY w# 1 sw Y   y xY ww)
Nr%   z4chromadb.api.client.Client._validate_tenant_databasez,chromadb.api.client.Client.get_user_identityz?chromadb.api.async_client.AsyncClient._validate_tenant_databasez7chromadb.api.async_client.AsyncClient.get_user_identityargskwargsr   c                  r    t        j                         j                  t        j                  | i |      }|S N)asyncioget_event_looprun_until_completer   AsyncHttpClient)r*   r+   clss      r   factoryz!http_api_factory.<locals>.factory1   s5    !002EE 00$A&AC J    )paramr
   r   
HttpClientr   r   HttpAPIFactory)r(   r3   s     r   http_api_factoryr8   %   s      }}%IJ 	*EF *)))*	* 	* TU 		4PQ 43 # #  >7334		4 		4* *	* 	*
4 4		4 		4sb   CB*BB*CC$)B6C	CB'	#B**B3/C6B?	;CCCr8   c              #      K   t         j                  j                  d      2t        t         j                  j                  d            } | |      }n |        }| |j	                          y w)NCHROMA_SERVER_HTTP_PORT)port)r   r   r   intr   )r8   r;   r   s      r   http_apir=   :   sU     	zz~~/0<2::>>";<=!t,!#
L
s   A.A0r   c                 D    | j                         }|j                  du sJ y )NFget_settingsis_persistent)r   settingss     r   test_ephemeral_clientrC   E   s$    ))+H!!U***r4   r$   c                 D    | j                         }|j                  du sJ y )NTr?   )r$   rB   s     r   test_persistent_clientrE   J   s$    **,H!!T)))r4   r=   c                 f    | j                         }|j                  dk(  s|j                  dk(  sJ y y )Nchromadb.api.fastapi.FastAPIz'chromadb.api.async_fastapi.AsyncFastAPI)r@   chroma_api_impl)r=   rB   s     r   test_http_clientrI   O   sB    $$&H  $BB##'PP	QP 	Cr4   c                 x    	  | t        d             y # t        $ r}t        |      dk(  sJ Y d }~y d }~ww xY w)Nz	127.0.0.1)chroma_server_host)rB   znChroma server host provided in settings[127.0.0.1] is different to the one provided in HttpClient: [localhost]r   
ValueErrorstrr8   es     r   0test_http_client_with_inconsistent_host_settingsrQ   W   s?    
(k"JK 
F@	
@
s    	949c                 z    	  | dt        d             y # t        $ r}t        |      dk(  sJ Y d }~y d }~ww xY w)NiB  iA  )chroma_server_http_port)r;   rB   ziChroma server http port provided in settings[8001] is different to the one provided in HttpClient: [8002]rL   rO   s     r   0test_http_client_with_inconsistent_port_settingsrT   c   sJ    
(,	
  
Fz{	
{
s    	:5:c                  @    i dt         dt         dt         ffd} | fS )N_r+   r   c                  L    j                  |       t               }i |_        |S r-   )updater	   headers)rV   r+   sessioncaptureds      r   r3   z)make_sync_client_factory.<locals>.factoryx   s"    +r4   )r   )r3   r[   s    @r   make_sync_client_factoryr\   t   s/    !HC 3 3  Hr4   c            	         t        ddddddd      } t        |       }t               \  }}t        j                  t
        d	t               t               g
      5  t        d|
      5  t        |      }d d d        d d d        j                          |d   }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |d   J |d   du sJ y # 1 sw Y   jxY w# 1 sw Y   nxY w)NrG   	localhosti(#  Tg      )@@      )rH   rK   rS   chroma_server_ssl_verifychroma_http_keepalive_secschroma_http_max_connections%chroma_http_max_keepalive_connectionsrequire)side_effectz!chromadb.api.fastapi.httpx.Clientlimitstimeoutverify)r   r   r\   r
   objectr   r	   stopkeepalive_expirymax_connectionsmax_keepalive_connections)rB   systemr3   r[   apirg   s         r   +test_fastapi_uses_http_limits_from_settingsrq      s   6& $!%#'$&.0H HF02GX	gyy{IK6P	Q "6GL 	"&/C	"" HHJhF""d***!!R'''++r111I&&&H%%%	" 	"" "s$   C('C3C(C%	!C((C1)r   N)&r.   typingr   r   r   r   r   r   unittest.mockr	   r
   r   chromadb.configr   r   chromadb.apir   chromadb.server.fastapichromadb.api.fastapir   r   r"   r   fixturer   r$   r7   FixtureRequestr8   r=   rC   rE   rI   rQ   rT   rN   r\   rq    r4   r   <module>r{      s    > > *  , "  (   	  yD$!67      	)T4"78     #y.) ~674""4~tT)*4 84(  ~  )ItT<Q2R    + +t +
*9 * *
y T 	
$	
		

$
	
"
%c(:DcN(J"K 
&r4   