
    _j
                         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dS )    )abstractmethod)	dataclass)AnyCallableList)EnforceOverrides	overrides)	ComponentSystem)Segmentc                   t    e Zd ZdZedededee         fd            Z	ede
egdf         ddfd            ZdS )	SegmentDirectoryzA segment directory is a data interface that manages the location of segments. Concretely, this
    means that for distributed chroma, it provides the grpc endpoint for a segment.segmentnreturnc                     dS )zReturn the segment residences for a given segment ID. Will return at most n residences.
        Should only return less than n residences if there are less than n residences available.
        N )selfr   r   s      b/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/segment/distributed/__init__.pyget_segment_endpointsz&SegmentDirectory.get_segment_endpoints   s          callbackNc                     dS )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   intr   strr   r   r   r   r   r   r   r   
   s        W W W  c    ^
  'D1	   ^  r   r   c                   .    e Zd ZU eed<   eed<   eed<   dS )MemberidipnodeN)r   r   r   r!   __annotations__r   r   r   r#   r#      s+         GGGGGG
IIIIIr   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                 X    g | _         t                                          |           d S )N)r*   super__init__)r   r+   	__class__s     r   r.   zMemberlistProvider.__init__-   s(         r   r   c                     dS )zReturns the latest memberlistNr   r   s    r   get_memberlistz!MemberlistProvider.get_memberlist1   	     	r   
memberlistNc                     dS )z1Sets the memberlist that this provider will watchNr   )r   r4   s     r   set_memberlist_namez&MemberlistProvider.set_memberlist_name6   r3   r   c                     g | _         dS )zStops watching the memberlistN)r*   r1   s    r   stopzMemberlistProvider.stop;   s     r   r   c                 :    | j                             |           dS )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                 P    || j         v r| j                             |           dS dS )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_callbackH   s1    
 t~%%N!!(+++4ur   )r   N)r   r   r   r   r   r   
Memberlistr   r'   r   r.   r   r2   r!   r6   r	   r8   r;   boolr>   __classcell__)r/   s   @r   r)   r)   &   sD        " " Hj\3./0000!v ! ! ! ! ! ! 
    ^ c d    ^    Y( *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>rG      s)         ! ! ! ! ! ! & & & & & & & & & & 1 1 1 1 1 1 1 1 - - - - - - - - " " " " " "    y   $         &\
* * * * *$4 * * * * *r   