o
    g                     @   s   d dl Z d dlZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlZd dlmZ e ZdddZdddZdeddfddZdedededdfddZdeddfddZ dS )    N)Event)	CliRunner)Client)
Collection)appset_log_file_path)SettingsSystem)get_sql)SqliteDB)Table)
invariantsreturnc                  C   s0   t tg d} d| jv sJ d| jv sJ d S )N)run--pathchroma_test_dataz--port8001z--testr   r   )runnerinvoker   stdout)result r   M/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/test/test_cli.pytest_app   s   r   c                  C   s&   t dd} | d d d dksJ d S )Nzchromadb/log_config.ymlztest.loghandlersfilefilenamer   )
log_configr   r   r   test_utils_set_log_file_path&   s   
r   sqlite_persistentc                 C   s  | }| t}|j}|dd || t|}|d}|d}dtdt	dd fdd	}||d
 ||d |
 *}td}	| |	d}
t|
\}}||| | g ks`J W d    n1 sjw   Y  tjtddd|jjgdd}|jdksJ |
 8}td}	| |	d}
t|
\}}||| | }t|dksJ |d d dksJ W d    n1 sw   Y  |`|jdjsJ t|||gd d S )Nautomatically_purgeFcollection1collection2
collectionnumr   c                 S   s2   dd t |D }tj|d}| j||d d S )Nc                 S   s   g | ]}t |qS r   )str).0ir   r   r   
<listcomp>:   s    z4test_vacuum.<locals>.add_records.<locals>.<listcomp>   )ids
embeddings)rangenprandomrandadd)r$   r%   r+   r,   r   r   r   add_records9   s   z test_vacuum.<locals>.add_recordsd   i  maintenance_log*utilsvacuumr   zy
)inputr      r*   T)instancer   configset_parameter
set_configr   from_systemcreate_collectionr   inttxr   querybuilderfrom_selectr   executefetchallr   r   r   settingspersist_directory	exit_codelenget_parametervaluer   log_size_below_max)r    systemsqliter;   clientr"   r#   r2   curtqsqlparamsr   rowsr   r   r   test_vacuum+   sH   








rW   rG   ready_eventshutdown_eventc                 C   sj   t | d}|  |t}| }|d |  |  W d    n1 s*w   Y  |  d S )N)rG   z"INSERT INTO tenants DEFAULT VALUES)	r
   startr:   r   rA   rE   setwaitstop)rG   rX   rY   rN   rO   rQ   r   r   r   simulate_transactional_writed   s   




r^   c                 C   s   t d}| }| }|jt| j||fd}|  |  z&t	t
ddd| jjdg}|jdks5J d|jv s<J W |  |  d	S |  |  w )
zVVacuum command should fail with details if there is a long-lived lock on the database.spawn)targetargsr6   r7   r   z--forcer9   zdatabase is lockedN)multiprocessingget_contextr   Processr^   rG   rZ   r\   r   r   r   rH   rI   r   r[   join)r    ctxrX   rY   processr   r   r   r   test_vacuum_errors_if_lockeds   s2   



rh   )r   N)!rb   multiprocessing.contextmultiprocessing.synchronizer   typer.testingr   chromadb.api.clientr   chromadb.api.models.Collectionr   chromadb.cli.clir   chromadb.cli.utilsr   chromadb.configr	   r
   chromadb.db.baser   chromadb.db.impl.sqliter   pypikar   numpyr.   chromadb.test.propertyr   r   r   r   rW   r^   rh   r   r   r   r   <module>   s8    

9
