o
    1XxiI                     @   sH  d dl mZ d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZmZmZmZmZmZ d dlm  mZ d d	lmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d d
l4m5Z5m6Z6 d dl7Z7d dl8m9Z9 d dl:m;Z;m<Z<m=Z= G dd de5eZ>dS )    )futures)AnyDictcast)UUID)	overrides)CollectionConfigurationInternal)DEFAULT_DATABASEDEFAULT_TENANT	ComponentSystem)from_proto_metadatafrom_proto_update_metadatafrom_proto_segmentfrom_proto_segment_scopeto_proto_collectionto_proto_segmentN)CreateCollectionRequestCreateCollectionResponseCreateDatabaseRequestCreateDatabaseResponseCreateSegmentRequestCreateSegmentResponseCreateTenantRequestCreateTenantResponseDeleteCollectionRequestDeleteCollectionResponseDeleteSegmentRequestDeleteSegmentResponseGetCollectionsRequestGetCollectionsResponseGetDatabaseRequestGetDatabaseResponseGetSegmentsRequestGetSegmentsResponseGetTenantRequestGetTenantResponseResetStateResponseUpdateCollectionRequestUpdateCollectionResponseUpdateSegmentRequestUpdateSegmentResponse)SysDBServiceradd_SysDBServicer_to_server)Empty)
CollectionMetadataSegmentc                       s  e Zd ZU dZejed< eed< i Ze	e
ef ed< i Ze	e
e	e
e	e
ef f f ed< i Ze	e
e	e
ef f ed< def fdd	Zed4 fddZed4 fddZed4 fddZedddedejd
efddZedddedejd
efddZedddedejd
efddZeddde dejd
e!fddZ"eddde#dejd
e$fddZ%eddde&dejd
e'fd d!Z(eddde)dejd
e*fd"d#Z+eddde,dejd
e-fd$d%Z.eddde/dejd
e0fd&d'Z1eddde2dejd
e3fd(d)Z4eddde5dejd
e6fd*d+Z7eddde8dejd
e9fd,d-Z:eddde;dejd
e<fd.d/Z=d0e>d1e?j@d
dfd2d3ZA  ZBS )5GrpcMockSysDBzA mock sysdb implementation that can be used for testing the grpc client. It stores
    state in simple python data structures instead of a database._server_server_port	_segments$_tenants_to_databases_to_collections_tenants_to_database_to_idsystemc                    s   |j d| _t |S )Nchroma_server_grpc_port)settingsrequirer4   super__init__)selfr8   	__class__ [/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/db/impl/grpc/server.pyr=   @   s   zGrpcMockSysDB.__init__returnNc                    sH   t tjdd| _t| | j | jd| j  | j  t	  S )N
   )max_workersz[::]:)
grpcserverr   ThreadPoolExecutorr3   r-   add_insecure_portr4   startr<   r>   r?   rA   rB   rJ   D   s
   

zGrpcMockSysDB.startc                    s   | j d  t  S N)r3   stopr<   rK   r?   rA   rB   rM   L   s   
zGrpcMockSysDB.stopc                    sL   i | _ i | _i | jt< i | jt t< i | jt< tdd| jt t< t  S )Nr   )int)r5   r6   r
   r	   r7   r   r<   reset_staterK   r?   rA   rB   rO   Q   s   


zGrpcMockSysDB.reset_stateF)check_signaturerequestcontextc                 C   s   |j }|j}|| jvrttjdd| dddS || j| v r.ttjdd| dddS i | j| |< t|jd	| j| |< ttjd
ddS )N  Tenant 
 not foundcodereasonstatus  	Database  already existshex   rW   )	tenantnamer6   r   protoStatusr   idr7   )r>   rQ   rR   rb   databaserA   rA   rB   CreateDatabase\   s   
zGrpcMockSysDB.CreateDatabasec                 C   s   |j }|j}|| jvrttjdd| dddS || j| vr.ttjdd| dddS | j| | }ttjddtj|j||d	d
S )NrS   rT   rU   rV   rY   r\   r`   ra   )rf   rc   rb   )rZ   rg   )	rb   rc   r6   r"   rd   re   r7   Databaser_   )r>   rQ   rR   rb   rg   rf   rA   rA   rB   GetDatabasep   s   

zGrpcMockSysDB.GetDatabasec                 C   sR   |j }|| jv rttjdd| dddS i | j|< i | j|< ttjdddS )Nr[   rT   r]   rV   rY   r`   ra   )rc   r6   r   rd   re   r7   r>   rQ   rR   rb   rA   rA   rB   CreateTenant   s   


zGrpcMockSysDB.CreateTenantc                 C   sH   |j }|| jvrttjdd| dddS ttjddtj|dd	S )
NrS   rT   rU   rV   rY   r`   ra   rc   )rZ   rb   )rc   r6   r&   rd   re   Tenantrk   rA   rA   rB   	GetTenant   s   


zGrpcMockSysDB.GetTenantc                 C   s\   t |j}|d j| jv rttjdd|d  dddS || j|d j< ttjdddS )	Nrf   r[   Segment r]   rV   rY   r`   ra   )r   segmentr_   r5   r   rd   re   )r>   rQ   rR   rq   rA   rA   rB   CreateSegment   s   

zGrpcMockSysDB.CreateSegmentc                 C   sF   |j }|| jv r| j|= ttjdddS ttjdd| dddS )Nr`   ra   rY   rS   rp   rU   rV   )rf   r5   r   rd   re   )r>   rQ   rR   id_to_deleterA   rA   rB   DeleteSegment   s   
zGrpcMockSysDB.DeleteSegmentc           	      C   s   | drt|jdnd }| dr|jnd }| dr!t|jnd }| dr.t|jdnd }g }| j D ]+}|rB|d |krBq7|rK|d |krKq7|rT|d |krTq7|r]|d |kr]q7|	| q7t
dd |D dS )	Nrf   r^   typescope
collectionc                 S      g | ]}t |qS rA   )r   ).0rq   rA   rA   rB   
<listcomp>   s    z-GrpcMockSysDB.GetSegments.<locals>.<listcomp>)segments)HasFieldr   rf   ru   r   rv   rw   r5   valuesappendr$   )	r>   rQ   rR   	target_idtarget_typetarget_scopetarget_collectionfound_segmentsrq   rA   rA   rB   GetSegments   s,   zGrpcMockSysDB.GetSegmentsc                 C   s   t |j}|j| jvrttjdd| dddS | j|j }|dr,t |jd|d< |dr8|j	r8d |d< |d	rYt
tttf |d	 }|d	 d u rRi |d	< | ||j |d
re|jrei |d	< ttjdddS )NrS   rp   rU   rV   rY   rw   r^   reset_collectionmetadatareset_metadatar`   ra   )r   rf   r_   r5   r+   rd   re   r|   rw   r   r   r   strr   _merge_metadatar   r   )r>   rQ   rR   id_to_updaterq   targetrA   rA   rB   UpdateSegment   s(   


zGrpcMockSysDB.UpdateSegmentc                    s  |j  |j}|j}|| jvrttjdd| dddS || j| vr1ttjdd| dddS | j D ]O\}}| D ]F\}}|j|v r||jksQ||jkrittjdd|j d	| d
| dd    S |j	sttjdd|j d	| d
| dd    S q>q6| j| | }	 fdd|	
 D }
t|
dksJ t|
dkr|j	r|
d }|drt|j|d< ttjddt|ddS ttjdd|j  dddS t|j}t|jd}t||j |t|j|j||dd}||	|j< ttjddt|ddS )NrS   rT   rU   rV   rY   r\   r[   Collection z already exists in tenant z
 database c                    s   g | ]
}|d   kr|qS rm   rA   )ry   ccollection_namerA   rB   rz   &  s    z2GrpcMockSysDB.CreateCollection.<locals>.<listcomp>   r   r   r`   ra   F)rZ   rw   createdr]   r^   )rf   rc   configurationr   	dimensionrg   rb   versionT)rc   rb   rg   r6   r   rd   re   itemsrf   get_or_creater}   lenr|   r   r   r   r   from_json_strconfiguration_json_strr   r/   r   )r>   rQ   rR   rb   rg   search_tenant	databasessearch_databasesearch_collectionscollectionsmatchesexisting_collectionr   rf   new_collectionrA   r   rB   CreateCollection   s   








zGrpcMockSysDB.CreateCollectionc                 C   s   |j }|j}|j}|| jvrttjdd| dddS || j| vr1ttjdd| dddS | j| | }||v rH||= ttjdddS ttjdd	| dddS )
NrS   rT   rU   rV   rY   r\   r`   ra   r   )rf   rb   rg   r6   r   rd   re   )r>   rQ   rR   collection_idrb   rg   r   rA   rA   rB   DeleteCollectionP  s(   
zGrpcMockSysDB.DeleteCollectionc              	   C   s   | drt|jdnd }| dr|jnd }i }| j D ]5\}}| D ],\}}	|jdkr5||jkr5q&|jdkr@||jkr@q&||	 t	d| d| d|	  q&qg }
|
 D ]}|re|d |kreqZ|rn|d |krnqZ|
| qZtdd	 |
D d
S )Nrf   r^   rc    zTenant: z, Database: z, Collections: c                 S   rx   rA   )r   )ry   rw   rA   rA   rB   rz     s    z0GrpcMockSysDB.GetCollections.<locals>.<listcomp>)r   )r|   r   rf   rc   r6   r   rb   rg   updateprintr}   r~   r    )r>   rQ   rR   r   target_nameallCollectionsrb   r   rg   r   found_collectionsrw   rA   rA   rB   GetCollectionsj  s4   
	zGrpcMockSysDB.GetCollectionsc                 C   s  t |j}i }| j D ]\}}| D ]\}}|j|v r|}qq|j|vr4ttjdd| dddS ||j }	|drC|j	|	d< |drM|j
|	d< |drut|j}
d }|
d urpi }|
 D ]\}}|d uro|||< qc||	d< n|d	r|jri |	d< ttjd
ddS )NrS   r   rU   rV   rY   rc   r   r   r   r`   ra   )r   rf   r6   r   r_   r)   rd   re   r|   rc   r   r   r   r   )r>   rQ   rR   r   r   rb   r   rg   maybe_collectionsrw   update_metadatacleaned_metadatakeyvaluerA   rA   rB   UpdateCollection  sB   











zGrpcMockSysDB.UpdateCollectionc                 C   s   |    ttjdddS )Nr`   ra   rY   )rO   r'   rd   re   )r>   rQ   rR   rA   rA   rB   
ResetState  s   zGrpcMockSysDB.ResetStater   sourcec                 C   s^   t tttf |}t tttf t|}|| | D ]\}}|d u r,||v r,||= qd S rL   )r   r   r   r   r   r   r   )r>   r   r   target_metadatasource_metadatar   r   rA   rA   rB   r     s   
zGrpcMockSysDB._merge_metadata)rC   N)C__name__
__module____qualname____doc__rF   Server__annotations__rN   r5   r   r   r1   r6   r/   r7   r   r   r=   r   rJ   rM   rO   r   ServicerContextr   rh   r!   r"   rj   r   r   rl   r%   r&   ro   r   r   rr   r   r   rt   r#   r$   r   r*   r+   r   r   r   r   r   r   r   r   r    r   r(   r)   r   r.   r'   r   r0   rd   UpdateMetadatar   __classcell__rA   rA   r?   rB   r2   4   s   
 

V+ r2   )?
concurrentr   typingr   r   r   uuidr   r   chromadb.api.configurationr   chromadb.configr	   r
   r   r   chromadb.proto.convertr   r   r   r   r   r   chromadb.proto.chroma_pb2rd   
chroma_pb2chromadb.proto.coordinator_pb2r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   #chromadb.proto.coordinator_pb2_grpcr,   r-   rF   google.protobuf.empty_pb2r.   chromadb.typesr/   r0   r1   r2   rA   rA   rA   rB   <module>   s     l