Ë
    lQêj³$  ã                   óT  — 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%d!d„Z&d!d„Z'd!d„Z(d!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    ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/test/test_client.pyÚephemeral_apir      sC   è ø€ ä	‡z�z‡~�~Ð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   è ø€ ä	‡z�z‡~�~Ð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)   r4   s     r   Úhttp_api_factoryr9   %   sÌ   è ø€ ð ‡}�}˜Ò%ÜÐIÓJñ 	*ÜÐEÓFñ *Ü×)Ñ)Ò)÷*÷	*ð 	*ô ÐTÓUñ 		4ÜÐPÓQñ 4ð¤3ð ´#ð ¼#ó ô œ>¨7Ó3Ò3÷4÷		4ð 		4÷*ð *ú÷	*ð 	*ú÷
4ð 4ú÷		4ð 		4üsb   ‚C�B*©B¼B*ÁCÁCÁ$)B6ÂCÂ	CÂB'	Â#B*Â*B3Â/CÂ6B?	Â;CÃCÃCr9   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   )r9   r<   r   s      r   Úhttp_apir>   :   sU   è ø€ ä	‡z�z‡~�~Ð/Ó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_clientrD   E   s$   € Ø×)Ñ)Ó+€HØ×!Ñ! UÑ*Ð*Ñ*r5   r%   c                 óD   — | j                  «       }|j                  du sJ ‚y )NTr@   )r%   rC   s     r   Útest_persistent_clientrF   J   s$   € Ø×*Ñ*Ó,€HØ×!Ñ! TÑ)Ð)Ñ)r5   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)rA   Úchroma_api_impl)r>   rC   s     r   Útest_http_clientrJ   O   sB   € Ø×$Ñ$Ó&€Hà× Ñ Ð$BÒBØ×#Ñ#Ð'PÒPðð	QØPð 	Cr5   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)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Ö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<   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   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)rW   r,   ÚsessionÚcaptureds      €r   r4   z)make_sync_client_factory.<locals>.factoryx   s"   ø€ Ø�‰˜ÔÜ“+ˆØˆŒØˆr5   )r   )r4   r\   s    @r   Úmake_sync_client_factoryr]   t   s/   ø€ Ø!€Hð”Cð ¤3ð ¬3õ ð �HÐÐr5   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)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   Úsystemr4   r\   Úapirh   s         r   Ú+test_fastapi_uses_http_limits_from_settingsrr   �   s  € ÜØ6Ø&Ø $Ø!%Ø#'Ø$&Ø.0ô€Hô �HÓ€Fä0Ó2Ñ€GˆXä	�‰”g˜y´y³{ÄIÃKÐ6PÔ	Qñ "ÜÐ6ÀGÔLñ 	"Ü˜&“/ˆC÷	"÷"ð ‡H�H„JØ�hÑ€FØ×"Ñ" dÒ*Ð*Ð*Ø×!Ñ! RÒ'Ð'Ð'Ø×+Ñ+¨rÒ1Ð1Ð1Ø�IÑÐ&Ð&Ð&Ø�HÑ Ñ%Ð%Ñ%÷	"ð 	"ú÷"ð "ús$   ÁC(Á'CÁ3C(ÃC%	Ã!C(Ã(C1c                  ó¸  — t         j                  j                  d«      rt        j                  d«       t        j                  «       5 } t        j                  | ¬«      }|j                  d«      }|j                  ddgddgd	d
id	dig¬«       |j                  }|j                  «        |j                  du sJ ‚t        j                  | ¬«      }|j                  d«      }|j                  «       }t        |d   «      dk(  sJ ‚d|d   v sJ ‚d|d   v sJ ‚|j                  «        |j!                  «        |j!                  «        ddd«       y# 1 sw Y   yxY w)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Ž   œ   sK  € ä	‡z�z‡~�~Ð4Ô5Ü�‰Ð+Ô,ä	×	$Ñ	$Ó	&ð %¨&ä×*Ñ*°Ô7ˆØ×-Ñ-Ð.?Ó@ˆ
Ø�‰Ø˜�Ø˜vÐ&Ø˜xÐ(¨5°(Ð*;Ð<ð 	ô 	
ð —‘ˆð 	�‰Œð �‰ %Ñ'Ð'Ð'ô ×+Ñ+°Ô8ˆØ×,Ñ,Ð->Ó?ˆØ—/‘/Ó#ˆÜ�7˜5‘>Ó" aÒ'Ð'Ð'Ø˜ ™Ñ&Ð&Ð&Ø˜ ™Ñ&Ð&Ð&à�‰ŒØ×!Ñ!Ô#Ø×"Ñ"Ô$÷;%÷ %ñ %ús   Á	C>EÅEc            	      óª  — t         j                  j                  d«      rt        j                  d«       t        j                  «       5 } t        j                  | ¬«      5 }|j                  }|j                  d«      }|j                  ddgddgd	d
id	dig¬«       ddd«       j                  du sJ ‚t        j                  | ¬«      5 }|j                  d«      }|j                  «       }t        |d   «      dk(  sJ ‚	 ddd«       j                  «        j                  «        ddd«       y# 1 sw Y   Œ–xY w# 1 sw Y   Œ>xY w# 1 sw Y   yxY w)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�   Á   sB  € ä	‡z�z‡~�~Ð4Ô5Ü�‰Ð+Ô,ä	×	$Ñ	$Ó	&ð %¨&ä×&Ñ&¨FÔ3ð 	°và—^‘^ˆFØ×1Ñ1Ð2CÓDˆJØ�N‰NØ˜E�NØ! 6Ð*Ø! 8Ð,¨u°hÐ.?Ð@ð ô ÷		ð �‰ %Ñ'Ð'Ð'ô ×&Ñ&¨FÔ3ð 	,°wØ!×0Ñ0Ð1BÓCˆKØ!—o‘oÓ'ˆGÜ�w˜u‘~Ó&¨!Ò+Ð+Ñ+÷	,ð
 	×!Ñ!Ô#Ø×"Ñ"Ô$÷-%ð %÷	ð 	ú÷	,ð 	,ú÷!%ð %ús<   Á	E	Á <D1Â.E	Ã
5D=Ä (E	Ä1D:	Ä6E	Ä=E	ÅE	Å	Ec                  óX  — t         j                  j                  d«      rt        j                  d«       t        j                  «       } | j                  }| j                  d«      }|j                  dgdg¬«       | j                  «        |j                  du sJ ‚| j                  «        y)	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�z‡~�~Ð4Ô5Ü�‰Ð+Ô,ä×%Ñ%Ó'€Fà�^‰^€FØ×)Ñ)Ð*;Ó<€JØ‡N�N˜�w¨6¨(€NÔ3ð ‡L�L„Nð �?‰?˜eÑ#Ð#Ð#à
×ÑÕr5   c                  ó„  — t         j                  j                  d«      rt        j                  d«       t        j                  «       5 } | j                  }| j                  d«      }|j                  dgdg¬«       |j                  du sJ ‚	 ddd«       j                  d	u sJ ‚ j                  «        y# 1 sw Y   Œ*xY w)
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�z‡~�~Ð4Ô5Ü�‰Ð+Ô,ä	×	!Ñ	!Ó	#ð ' và—‘ˆØ×-Ñ-Ð.?Ó@ˆ
Ø�‰˜E˜7¨v¨hˆÔ7Ø�‰ $Ñ&Ð&Ñ&÷'ð �?‰?˜eÑ#Ð#Ð#à
×ÑÕ÷'ð 'ús   Á	AB6Â6B?c                  ó¶  — t         j                  j                  d«      rt        j                  d«       t        j                  «       5 } t        j                  | ¬«      }|j                  d«      }|j                  dgdg¬«       |j                  «        |j                  «        |j                  «        |j                  «        ddd«       y# 1 sw Y   yxY w)	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�z‡~�~Ð4Ô5Ü�‰Ð+Ô,ä	×	$Ñ	$Ó	&ð $¨&Ü×*Ñ*°Ô7ˆØ×-Ñ-Ð.?Ó@ˆ
Ø�‰˜E˜7¨v¨hˆÔ7ð 	�‰Œð 	�‰Œð 	�‰Œà×!Ñ!Ô#÷$÷ $ñ $ús   Á	A=CÃC)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%   r8   ÚFixtureRequestr9   r>   rD   rF   rJ   rR   rU   rO   r]   rr   rŽ   r�   r”   r–   r˜   © r5   r   ú<module>r¢      sµ  ðÛ ß >× >ß *Û ß ,Ý "Û Ý (Û Û Û 	ð ‡�ð �y ¨D°$Ð!6Ñ7ò  ó ð ð ‡�ð ˜	 )¨T°4Ð"7Ñ8ò  ó ð ð ˜#˜y˜.Ñ)€ð €‡�˜ ~Ð6Ô7ð4Ø×"Ñ"ð4àˆ~˜t TÐ)Ñ*ò4ó 8ð4ð( €‡�Óð ˜~ð  °)¸IÀtÈTÐ<QÑ2Rò  ó ð ð+¨ð +°tó +ð
*¨9ð *¸ó *ð
˜yð ¨Tó ð	
Ø$ð	
à	ó	
ð
Ø$ð
à	ó
ð"
 %¨°°c°Ñ(:¸DÀÀcÀ¹NÐ(JÑ"Kó 
ó&ó6"%óJ%ó< ó( ô$$r5   