
    LKi                     4   S SK r S SKr S SKrS SKrS SKJr  S SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKrS SKJr   SS\S\S\S\S\4
S jjr S\!\   SS4S jr"SS jr#S\SS4S jr$S\S\S\SS4S jr%S\SS4S jr&g)    N)Event)Client)
Collection)cli)build_cli_args)SettingsSystem)get_sql)SqliteDB)Table)
invariantshostportmax_retriesinitial_delayreturnc                    Un[        U5       HV  n [        R                  " XS9nUR                  5       nUS:  a    g XRS-
  :  d  M;  [        R                  " U5        US-  nMX     g! [         a    [        S5         NAf = f)a  Wait for server to be ready using exponential backoff.
Args:
    client: ChromaDB client instance
    max_retries: Maximum number of retry attempts
    initial_delay: Initial delay in seconds before first retry
Returns:
    bool: True if server is ready, False if max retries exceeded
r   r   r   Tz!Heartbeat failed, trying again...      F)rangechromadb
HttpClient	heartbeat	Exceptionprinttimesleep)r   r   r   r   delayattemptclientr   s           X/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/chromadb/test/test_cli.pywait_for_serverr#      s     E%	((d>F((*I1}  1_$JJuQJE &   	56	s   *A))B Bargsc                 D    U [         l        [        R                  " 5         g )N)sysargvr   app)r$   s    r"   	start_appr)   2   s    CHGGI    c                  L   SSS.n SS/nUR                  [        S0 U D65        [        U5        [        R                  " [
        U4S9nUR                  5         [        R                  " S5        [        SSS	9(       d   S
5       eUR                  5         UR                  5         g )Nchroma_test_dataiA  )pathr   chromaruntargetr$      	localhostr   z4Server failed to start within maximum retry attempts )extendr   r   multiprocessingProcessr)   startr   r   r#   	terminatejoin)kwargsr$   server_processs      r"   test_appr=   6   s    ($7FeDKK(()	$K$,,ITGLNJJqM$7o9oo7r*   sqlite_persistentc                     U nUR                  [        5      nUR                  nUR                  SS5        UR	                  U5        [
        R                  " U5      nUR                  S5      nUR                  S5      nS[        S[        SS 4S jnU" US	5        U" US
5        UR                  5        n[        S5      n	UR                  5       R                  U	5      R                  S5      n
[        U
5      u  pUR!                  X5        UR#                  5       / :X  d   e S S S 5        SSSUR$                  R&                  S/[(        l        [,        R.                  " 5         UR                  5        n[        S5      n	UR                  5       R                  U	5      R                  S5      n
[        U
5      u  pUR!                  X5        UR#                  5       n[1        U5      S:X  d   eUS   S   S:X  d   e S S S 5        [3        US5      (       a  U?UR                  R5                  S5      R6                  (       d   e[8        R:                  " XU/S5        g ! , (       d  f       GNA= f! , (       d  f       Ny= f)Nautomatically_purgeFcollection1collection2
collectionnumr   c                     [        U5       Vs/ s H  n[        U5      PM     nn[        R                  R	                  US5      nU R                  X4S9  g s  snf )Nr   )ids
embeddings)r   strnprandomrandadd)rC   rD   irF   rG   s        r"   add_records test_vacuum.<locals>.add_recordsS   sE    $Sz*z!s1vz*YY^^C+
36 +s   Ad   i  maintenance_log*r.   vacuum--path--forcer   r   r   configT)instancer   rV   set_parameter
set_configr   from_systemcreate_collectionr   inttxr   querybuilderfrom_selectr
   executefetchallsettingspersist_directoryr&   r'   r   r(   lenhasattrget_parametervaluer   log_size_below_max)r>   systemsqliterV   r!   rA   rB   rN   curtqsqlparamsrowss                 r"   test_vacuumrr   E   s   F__X&F ]]F
.6
f 'F**=9K**=9K7
 7 7 7
 S!U# 
#$!''*11#6ajC ||~### 
 (Hfoo.O.OQZ[CHGGI 
#$!''*11#6ajC ||~4yA~~AwqzX%%% 
 vx  M==&&'<=CCCC !!&*DdK9 
 
s   4A.I4BI/
I,/
I=rc   ready_eventshutdown_eventc                 6   [        U S9nUR                  5         UR                  [        5      nUR	                  5        nUR                  S5        UR                  5         UR                  5         S S S 5        UR                  5         g ! , (       d  f       N= f)N)rc   z"INSERT INTO tenants DEFAULT VALUES)	r	   r8   rW   r   r]   ra   setwaitstop)rc   rs   rt   rj   rk   rl   s         r"   simulate_transactional_writery   {   sk     X&F
LLN__X&F	89 

 KKM 
s   2B


Bc                 T   [         R                  " S5      nUR                  5       nUR                  5       nUR                  [        U R
                  X44S9nUR                  5         UR                  5          SSSU R
                  R                  SSS/[        l
        [        R                  " 5         UR                  5       nS	UR                  R                  5       ;   d   e UR!                  5         UR#                  5         g
! UR!                  5         UR#                  5         f = f)zVVacuum command should fail with details if there is a long-lived lock on the database.spawnr0   r.   rS   rT   rU   z	--timeout10zFailed to vacuum ChromaN)r6   get_contextr   r7   ry   rc   r8   rw   rd   r&   r'   r   r(   
readouterrerrstriprv   r:   )r>   capfdctxrs   rt   processcaptureds          r"   test_vacuum_errors_if_lockedr      s    

%
%g
.C))+KYY[Nkk+((+F  G MMOh2C2L2L2^2^`ikvx|}	##%(HLL,>,>,@@@@ 	s   8A+D "D')r2   g      ?)r   N)'r6   multiprocessing.contextr&   r   multiprocessing.synchronizer   r   chromadb.api.clientr   chromadb.api.models.Collectionr   chromadb.clir   chromadb.cli.clir   chromadb.configr   r	   chromadb.db.baser
   chromadb.db.impl.sqliter   pypikar   numpyrI   chromadb.test.propertyr   rH   r\   floatboolr#   listr)   r=   rr   ry   r   r4   r*   r"   <module>r      s      
  -  & 5  + , $ ,   -
 25). 
:DI $ 3L6 3Ld 3Ll%*<A	F d r*   