o
    1Xxi+                     @   sD  d dl Z d dlmZmZmZ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 d dlmZ d d	lmZmZmZmZ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* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;Z;G dd deZ<dS )    N)ListOptionalSequenceTupleUnioncast)UUID)	overrides)CollectionConfigurationInternal)DEFAULT_DATABASEDEFAULT_TENANTSystemlogger)NotFoundErrorUniqueConstraintError)SysDB)from_proto_collectionfrom_proto_segmentto_proto_update_metadatato_proto_segmentto_proto_segment_scope)CreateCollectionRequestCreateDatabaseRequestCreateSegmentRequestCreateTenantRequestDeleteCollectionRequestDeleteSegmentRequestGetCollectionsRequestGetCollectionsResponseGetDatabaseRequestGetSegmentsRequestGetTenantRequestUpdateCollectionRequestUpdateSegmentRequest)	SysDBStub)OtelInterceptor)	
CollectionDatabaseMetadataOptionalArgumentSegmentSegmentScopeTenantUnspecifiedUpdateMetadata)Emptyc                       s  e Zd ZU dZeed< ejed< eed< e	ed< de
f fddZed: fddZed: fddZed: fddZeefdededed	d
fddZeefdeded	efddZeded	d
fddZeded	efddZeded	d
fddZeded	d
fdd Ze	
	
	
	
d;dee d!ee d"ee d#ee d	ee f
d$d%Zee e fded#e ee  d&e ee!  d	d
fd'd(Z"ed
d
d)ee#fdeded*e$d&ee% d+ee	 d,e&ded-ed	e'e(e&f fd.d/Z)eee#fdeded-ed	d
fd0d1Z*ed
d
ee#d
d
fdee dee ded-ed2ee	 d3ee	 d	ee( fd4d5Z+ee e e fdede e d+e ee	  d&e ee!  d	d
f
d6d7Z,d:d8d9Z-  Z.S )<	GrpcSysDBzA gRPC implementation of the SysDB. In the distributed system, the SysDB is also
    called the 'Coordinator'. This implementation is used by Chroma frontend servers
    to call a remote SysDB (Coordinator) service._sys_db_stub_channel_coordinator_url_coordinator_portsystemc                    s(   |j d| _|j d| _t |S )Nchroma_coordinator_hostchroma_server_grpc_port)settingsrequirer3   r4   super__init__)selfr5   	__class__ [/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/db/impl/grpc/client.pyr;   :   s   zGrpcSysDB.__init__returnNc                    sN   t | j d| j | _t g}t j| jg|R  | _t| j| _t	 
 S )N:)grpcinsecure_channelr3   r4   r2   r%   intercept_channelr$   r1   r:   start)r<   interceptorsr=   r?   r@   rF   @   s   
zGrpcSysDB.startc                    s   | j   t  S N)r2   closer:   stopr<   r=   r?   r@   rJ   K   s   

zGrpcSysDB.stopc                    s   | j t  t  S rH   )r1   
ResetStater/   r:   reset_staterK   r=   r?   r@   rM   P   s   
zGrpcSysDB.reset_stateidnametenantc                 C   s2   t |j||d}| j|}|jjdkrt d S )NrN   rO   rP     )r   hexr1   CreateDatabasestatuscoder   )r<   rN   rO   rP   requestresponser?   r?   r@   create_databaseU   s
   zGrpcSysDB.create_databasec                 C   sJ   t ||d}| j|}|jjdkrt tt|jj	d|jj
|jjdS )N)rO   rP     )rS   rQ   )r   r1   GetDatabaserU   rV   r   r'   r   databaserN   rO   rP   )r<   rO   rP   rW   rX   r?   r?   r@   get_database^   s   zGrpcSysDB.get_databasec                 C   s,   t |d}| j|}|jjdkrt d S )NrO   rR   )r   r1   CreateTenantrU   rV   r   r<   rO   rW   rX   r?   r?   r@   create_tenantj   s
   
zGrpcSysDB.create_tenantc                 C   s6   t |d}| j|}|jjdkrt t|jjdS )Nr^   rZ   )	r!   r1   	GetTenantrU   rV   r   r,   rP   rO   r`   r?   r?   r@   
get_tenantq   s   
zGrpcSysDB.get_tenantsegmentc                 C   s4   t |}t|d}| j|}|jjdkrt d S )N)rd   rR   )r   r   r1   CreateSegmentrU   rV   r   )r<   rd   proto_segmentrW   rX   r?   r?   r@   create_segment{   s   zGrpcSysDB.create_segmentc                 C   s.   t |jd}| j|}|jjdkrt d S )N)rN   rZ   )r   rS   r1   DeleteSegmentrU   rV   r   )r<   rN   rW   rX   r?   r?   r@   delete_segment   s   zGrpcSysDB.delete_segmenttypescope
collectionc           
      C   sb   t |r|jnd ||rt|nd |r|jnd d}| j|}g }|jD ]}t|}	||	 q#|S )N)rN   rj   rk   rl   )r    rS   r   r1   GetSegmentssegmentsr   append)
r<   rN   rj   rk   rl   rW   rX   resultsrf   rd   r?   r?   r@   get_segments   s   
zGrpcSysDB.get_segmentsmetadatac                 C   s   d }|t  krtttd f |}d }|t  kr tttd f |}t|j|r(|jnd |r/t|nd d}|d u r?|d d|_	|d u rK|d d|_
| j| d S )N)rN   rl   rr   rl   Trr   )r-   r   r   r   r.   r#   rS   r   
ClearFieldreset_collectionreset_metadatar1   UpdateSegment)r<   rN   rl   rr   write_collectionwrite_metadatarW   r?   r?   r@   update_segment   s(   




zGrpcSysDB.update_segmentFconfiguration	dimensionget_or_creater\   c	              
   C   sx   t |j|| |rt|nd ||||d}	| j|	}
|
jjdkr)t	d|
  |
jjdkr2t
 t|
j}||
jfS )N)rN   rO   configuration_json_strrr   r{   r|   rP   r\      z'failed to create collection, response: rR   )r   rS   to_json_strr   r1   CreateCollectionrU   rV   r   infor   r   rl   created)r<   rN   rO   rz   rr   r{   r|   rP   r\   rW   rX   rl   r?   r?   r@   create_collection   s"   


zGrpcSysDB.create_collectionc                 C   sB   t |j||d}| j|}td|  |jjdkrt d S )N)rN   rP   r\   zdelete_collection response: rZ   )	r   rS   r1   DeleteCollectionloggingdebugrU   rV   r   )r<   rN   rP   r\   rW   rX   r?   r?   r@   delete_collection   s   zGrpcSysDB.delete_collectionlimitoffsetc                 C   s   d }|d urt |j||d}|d ur'|d u r|d u rtdt |||||d}|d u r7|d u r7t ||||d}| j|}g }	|jD ]	}
|	t|
 qB|	S )N)rN   r   r   zmIf name is specified, tenant and database must also be specified in order to uniquely identify the collection)rO   rP   r\   r   r   )rP   r\   r   r   )r   rS   
ValueErrorr1   GetCollectionscollectionsro   r   )r<   rN   rO   rP   r\   r   r   rW   rX   rp   rl   r?   r?   r@   get_collections   s>   
zGrpcSysDB.get_collectionsc           
      C   s   d }|t  krtt|}d }|t  krtttd f |}d }|t  kr,tttd f |}t|j|||r7t|nd d}|d u rG|	d d|_
| j|}	|	jjdkrVt |	jjdkr_t d S )N)rN   rO   r{   rr   rr   TrZ   rR   )r-   r   strr   intr.   r"   rS   r   rs   ru   r1   UpdateCollectionrU   rV   r   r   )
r<   rN   rO   r{   rr   
write_namewrite_dimensionrx   rW   rX   r?   r?   r@   update_collection  s4   





zGrpcSysDB.update_collectionc                 C   s   | j jt dd d S )NT)wait_for_ready)r1   rL   r/   rK   r?   r?   r@   reset_and_wait_for_readyB  s   z"GrpcSysDB.reset_and_wait_for_ready)rA   N)NNNN)/__name__
__module____qualname____doc__r$   __annotations__rC   Channelr   r   r   r;   r	   rF   rJ   rM   r   r   rY   r'   r]   ra   r,   rc   r*   rg   ri   r   r+   r   rq   r-   r)   r.   ry   r   r
   r(   boolr   r&   r   r   r   r   r   __classcell__r?   r?   r=   r@   r0   0   s  
 

		

 	

*

%r0   )=r   typingr   r   r   r   r   r   uuidr   r	   chromadb.api.configurationr
   chromadb.configr   r   r   r   chromadb.db.baser   r   chromadb.db.systemr   chromadb.proto.convertr   r   r   r   r   chromadb.proto.coordinator_pb2r   r   r   r   r   r   r   r   r   r    r!   r"   r#   #chromadb.proto.coordinator_pb2_grpcr$   %chromadb.telemetry.opentelemetry.grpcr%   chromadb.typesr&   r'   r(   r)   r*   r+   r,   r-   r.   google.protobuf.empty_pb2r/   rC   r0   r?   r?   r?   r@   <module>   s      <,