
    ug	                         d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	mZ d dl
mZmZ d dlmZ  G d de      Ze G d	 d
             Zee   Z G d dee	      Zy)    )abstractmethod)	dataclass)AnyCallableList)EnforceOverrides	overrides)	ComponentSystem)Segmentc                   P    e Zd ZdZededefd       Zedeegdf   ddfd       Z	y)SegmentDirectoryzA segment directory is a data interface that manages the location of segments. Concretely, this
    means that for clustered chroma, it provides the grpc endpoint for a segment.segmentreturnc                      y)z3Return the segment residence for a given segment IDN )selfr   s     Z/var/www/openai/venv/lib/python3.12/site-packages/chromadb/segment/distributed/__init__.pyget_segment_endpointz%SegmentDirectory.get_segment_endpoint   s        callbackNc                      y)zARegister a callback that will be called when a segment is updatedNr   r   r   s     r   !register_updated_segment_callbackz2SegmentDirectory.register_updated_segment_callback   s    
 	r   )
__name__
__module____qualname____doc__r   r   strr   r   r   r   r   r   r   r   
   s]    U BG B B B  'D1	 r   r   c                   "    e Zd ZU eed<   eed<   y)MemberidipN)r   r   r   r   __annotations__r   r   r   r!   r!      s    GGr   r!   c                        e Zd ZU dZeeegef      ed<   de	f fdZ
edefd       Zededdfd	       Zedd
       Zdeegef   ddfdZdeegef   defdZ xZS )MemberlistProviderzReturns the latest memberlist and provdes a callback for when it changes. This
    callback may be called from a different thread than the one that called. Callers should ensure
    that they are thread-safe.	callbackssystemc                 2    g | _         t        | 	  |       y )N)r'   super__init__)r   r(   	__class__s     r   r+   zMemberlistProvider.__init__*   s     r   r   c                      y)zReturns the latest memberlistNr   r   s    r   get_memberlistz!MemberlistProvider.get_memberlist.        	r   
memberlistNc                      y)z1Sets the memberlist that this provider will watchNr   )r   r1   s     r   set_memberlist_namez&MemberlistProvider.set_memberlist_name3   r0   r   c                     g | _         y)zStops watching the memberlistN)r'   r.   s    r   stopzMemberlistProvider.stop8   s     r   r   c                 :    | j                   j                  |       y)zRegisters a callback that will be called when the memberlist changes. May be called many times
        with the same memberlist, so callers should be idempotent. May be called from a different thread.
        N)r'   appendr   s     r   $register_updated_memberlist_callbackz7MemberlistProvider.register_updated_memberlist_callback=   s     	h'r   c                 X    || j                   v r| j                   j                  |       yy)zUnregisters a callback that was previously registered. Returns True if the callback was
        successfully unregistered, False if it was not ever registered.TF)r'   remover   s     r   &unregister_updated_memberlist_callbackz9MemberlistProvider.unregister_updated_memberlist_callbackE   s(    
 t~~%NN!!(+r   )r   N)r   r   r   r   r   r   
Memberlistr   r$   r   r+   r   r/   r   r3   r	   r5   r8   boolr;   __classcell__)r,   s   @r   r&   r&   #   s    " Hj\3./00!v ! 
   c d    ( *s!23(	( *s!23	r   r&   N)abcr   dataclassesr   typingr   r   r   r	   r   chromadb.configr
   r   chromadb.typesr   r   r!   r<   r&   r   r   r   <module>rD      sY     ! & & 1 - "y     
 &\
*$4 *r   