
    Ig	                         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e   Z G d d	e	e      Zy
)    )abstractmethod)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     b/var/www/html/answerous/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 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   r+   s     r   set_memberlist_namez&MemberlistProvider.set_memberlist_name,   r*   r   c                     g | _         y)zStops watching the memberlistN)r!   r(   s    r   stopzMemberlistProvider.stop1   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_callback6   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_callback>   s(    
 t~~%NN!!(+r   )r   N)r   r   r   r   r   r   
Memberlistr   __annotations__r
   r%   r   r)   r   r-   r   r/   r2   boolr5   __classcell__)r&   s   @r   r    r       s    " Hj\3./00!v ! 
   c d    ( *s!23(	( *s!23	r   r    N)abcr   typingr   r   r   r   r   chromadb.configr	   r
   chromadb.typesr   r   r   r6   r    r   r   r   <module>r>      s=     & & 1 - "y   #Y
*$4 *r   