
    Zi$                     x   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j        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%d!dZ&d!dZ'd!dZ(d!dZ)d!d Z*dS )"    N)AnyCallable	GeneratorcastDictTuple)	MagicMockpatch)SettingsSystem)	ClientAPI)FastAPIreturnc               #      K   t           j                            d          rt          j        d           t          j                    } | V  |                                  d S )NCHROMA_INTEGRATION_TEST_ONLYIntegration test only)osenvirongetpytestskipchromadbEphemeralClientclear_system_cacheclients    V/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/test/test_client.pyephemeral_apir      s]      	z~~455 -+,,,%''F
LLL
    c               #      K   t           j                            d          rt          j        d           t          j        t          j                    dz             } | V  | 	                                 d S )Nr   r   z/test_serverpath)
r   r   r   r   r   r   PersistentClienttempfile
gettempdirr   r   s    r   persistent_apir&      sy      	z~~455 -+,,,& ""^3  F LLL
r   .sync_clientasync_client)paramsrequestc              #     K   | j         dk    r_t          d          5  t          d          5  t          j        V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S t          d          5  t          d          5  dt          dt          dt          fd	}t          t          |          V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
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                  p    t          j                                        t          j        | i |          }|S N)asyncioget_event_looprun_until_completer   AsyncHttpClient)r,   r-   clss      r   factoryz!http_api_factory.<locals>.factory1   s:    !022EE 0$A&AA C Jr   )paramr
   r   
HttpClientr   r   HttpAPIFactory)r*   r5   s     r   http_api_factoryr9   %   s      }%%IJJ 	* 	*EFF * *))))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* TUU 		4 		4PQQ 4 43 # #     >7333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4 		4si   A AA A	A A	A  A$'A$<C!1C	=C!	C	C!C	C!!C%(C%r9   c              #      K   t           j                            d          9t          t           j                            d                    } | |          }n
 |             }|V  |                                 d S )NCHROMA_SERVER_HTTP_PORT)port)r   r   r   intr   )r9   r<   r   s      r   http_apir>   :   s{      	z~~/00<2:>>";<<==!!t,,,!!##
LLL
r   r   c                 D    |                                  }|j        du sJ d S )NFget_settingsis_persistent)r   settingss     r   test_ephemeral_clientrD   E   s-    ))++H!U******r   r&   c                 D    |                                  }|j        du sJ d S )NTr@   )r&   rC   s     r   test_persistent_clientrF   J   s-    **,,H!T))))))r   r>   c                 b    |                                  }|j        dk    s|j        dk    sJ d S d S )Nchromadb.api.fastapi.FastAPIz'chromadb.api.async_fastapi.AsyncFastAPI)rA   chroma_api_impl)r>   rC   s     r   test_http_clientrJ   O   sF    $$&&H $BBB#'PPPPP 	CBPPr   c                     	  | t          d                     d S # t          $ r }t          |          dk    sJ Y d }~d S d }~ww xY w)Nz	127.0.0.1)chroma_server_host)rC   znChroma server host provided in settings[127.0.0.1] is different to the one provided in HttpClient: [localhost]r   
ValueErrorstrr9   es     r   0test_http_client_with_inconsistent_host_settingsrR   W   s    
(k"J"J"JKKKKKK 
 
 
FF@ @ @ @ @ @ @ @ @ @
s    
AAAc                     	  | dt          d                     d S # t          $ r }t          |          dk    sJ Y d }~d S d }~ww xY w)NiB  iA  )chroma_server_http_port)r<   rC   ziChroma server http port provided in settings[8001] is different to the one provided in HttpClient: [8002]rM   rP   s     r   0test_http_client_with_inconsistent_port_settingsrU   c   s    
(,  	
 	
 	
 	
 	
 	
  
 
 
FFz{ { { { { { { { { {
s    
A	AA	c                  F    i dt           dt           dt           ffd} | fS )N_r-   r   c                  \                         |           t                      }i |_        |S r/   )updater	   headers)rW   r-   sessioncaptureds      r   r5   z)make_sync_client_factory.<locals>.factoryx   s*    ++r   )r   )r5   r\   s    @r   make_sync_client_factoryr]   t   sH    !HC 3 3       Hr   c            	      0   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            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                 |d         }|j        dk    sJ |j	        dk    sJ |j
        dk    sJ |d         J |d         du sJ d S )NrH   	localhosti(#  Tg      )@@      )rI   rL   rT   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)rC   systemr5   r\   apirh   s         r   +test_fastapi_uses_http_limits_from_settingsrr      s   6& $!%#'$&.0  H HF022GX	gyy{{IKK6P	Q	Q	Q " "6GLLL 	" 	"&//C	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " HHJJJhF"d****!R''''+r1111I&&&H%%%%%%s6   -B2?BB2B	B2"B	#B22B69B6c                     t           j                            d          rt          j        d           t          j                    5 } t          j        |           }|	                    d          }|
                    ddgddgd	d
id	dig           |j        }|                                 |j        du sJ t          j        |           }|                    d          }|                                }t          |d                   dk    sJ d|d         v sJ d|d         v sJ |                                 |                                 |                                 ddd           dS # 1 swxY w Y   dS )zBTest that close() properly releases resources in PersistentClient.r   r   r!   test_collectionid1id2doc1doc2keyvalue1value2ids	documents	metadatasFr}      N)r   r   r   r   r   r$   TemporaryDirectoryr   r#   create_collectionadd_systemclose_runningget_collectionlenr   )tmpdirr   
collectionrp   client2collection2resultss          r   test_persistent_client_closer      s   	z~~455 -+,,,		$	&	& %&*777--.?@@
v&x(5(*;< 	 	
 	
 	
  	 %'''' +888,,->??//##75>""a''''&&&&&&&&!!###""$$$;% % % % % % % % % % % % % % % % % %s   D E44E8;E8c            	         t           j                            d          rt          j        d           t          j                    5 } t          j        |           5 }|j	        }|
                    d          }|                    ddgddgd	d
id	dig           ddd           n# 1 swxY w Y   |j        du sJ t          j        |           5 }|                    d          }|                                }t          |d                   dk    sJ 	 ddd           n# 1 swxY w Y   |                                 |                                 ddd           dS # 1 swxY w Y   dS )z6Test that PersistentClient works as a context manager.r   r   r!   rt   ru   rv   rw   rx   ry   rz   r{   r|   NFr}   r   )r   r   r   r   r   r$   r   r   r#   r   r   r   r   r   r   r   )r   r   rp   r   r   r   r   s          r   &test_persistent_client_context_managerr      s=   	z~~455 -+,,,		$	&	& %&&F333 	v^F112CDDJNNEN!6*!8,uh.?@    		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 %'''' &F333 	,w!001BCCK!oo''Gwu~&&!+++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,
 	!!###""$$$-% % % % % % % % % % % % % % % % % %s[   E%?B(E%(B,	,E%/B,	0#E%AD%E%%D)	)E%,D)	-+E%%E),E)c                  b   t           j                            d          rt          j        d           t          j                    } | j        }|                     d          }|	                    dgdg           | 
                                 |j        du sJ |                                  dS )	z-Test that close() works with EphemeralClient.r   r   rt   ru   rw   r}   r~   FN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   r   s      r   test_ephemeral_client_closer      s    	z~~455 -+,,,%''F^F))*;<<JNNw6(N333 LLNNN ?e####
r   c                     t           j                            d          rt          j        d           t          j                    5 } | j        }|                     d          }|	                    dgdg           |j
        du sJ 	 ddd           n# 1 swxY w Y   |j
        d	u sJ |                                  dS )
z5Test that EphemeralClient works as a context manager.r   r   rt   ru   rw   r   TNF)r   r   r   r   r   r   r   r   r   r   r   r   r   s      r   %test_ephemeral_client_context_managerr      s   	z~~455 -+,,,		!	#	# 'v--.?@@
E7vh777$&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ?e####
s   ABBBc                     t           j                            d          rt          j        d           t          j                    5 } t          j        |           }|	                    d          }|
                    dgdg           |                                 |                                 |                                 |                                 ddd           dS # 1 swxY w Y   dS )	z9Test that calling close() multiple times is a safe no-op.r   r   r!   rt   ru   rw   r   N)r   r   r   r   r   r$   r   r   r#   r   r   r   r   )r   r   r   s      r   test_client_close_idempotentr     s   	z~~455 -+,,,		$	&	& $&*777--.?@@
E7vh777 	 	 	!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   BC((C,/C,)r   N)+r0   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&   r8   FixtureRequestr9   r>   rD   rF   rJ   rR   rU   rO   r]   rr   r   r   r   r   r    r   r   <module>r      s<    > > > > > > > > > > > > > > > > * * * * * * * *  , , , , , , , , " " " " " "     ( ( ( ( ( (   				  yD$!67          	)T4"78         #y.) ~67774"4~tT)*4 4 4 874(  ~  )ItT<Q2R        + +t + + + +
*9 * * * * *
y T    	
$	
		
 	
 	
 	

$
	
 
 
 
"
%c(:DcN(J"K 
 
 
 
& & & &6"% "% "% "%J% % % %<       (       $$ $ $ $ $ $r   