o
    žº¥gâ	  ã                   @   s˜   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„ deƒZeG d	d
„ d
ƒƒZee ZG dd„ dee	ƒZdS )é    )Úabstractmethod)Ú	dataclass)ÚAnyÚCallableÚList)ÚEnforceOverridesÚ	overrides)Ú	ComponentÚSystem)ÚSegmentc                   @   sF   e Zd ZdZededefdd„ƒZedeegdf ddfdd	„ƒZ	dS )
ÚSegmentDirectoryz±A 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                 C   ó   dS )z3Return the segment residence for a given segment IDN© )Úselfr   r   r   ú\/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/segment/distributed/__init__.pyÚget_segment_endpoint   s    z%SegmentDirectory.get_segment_endpointÚcallbackNc                 C   r   )zARegister a callback that will be called when a segment is updatedNr   ©r   r   r   r   r   Ú!register_updated_segment_callback   s   z2SegmentDirectory.register_updated_segment_callback)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ústrr   r   r   r   r   r   r   r   
   s    ÿþr   c                   @   s   e Zd ZU eed< eed< dS )ÚMemberÚidÚipN)r   r   r   r   Ú__annotations__r   r   r   r   r      s   
 r   c                       s¬   e Zd ZU dZeeegef  ed< de	f‡ fdd„Z
edefdd„ƒZed	edd
fdd„ƒZeddd„ƒZdeegef dd
fdd„Zdeegef defdd„Z‡  ZS )ÚMemberlistProviderzÐReturns 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                    s   g | _ tƒ  |¡ d S )N)r!   ÚsuperÚ__init__)r   r"   ©Ú	__class__r   r   r$   *   s   zMemberlistProvider.__init__r   c                 C   r   )zReturns the latest memberlistNr   ©r   r   r   r   Úget_memberlist.   ó   z!MemberlistProvider.get_memberlistÚ
memberlistNc                 C   r   )z1Sets the memberlist that this provider will watchNr   )r   r*   r   r   r   Úset_memberlist_name3   r)   z&MemberlistProvider.set_memberlist_namec                 C   s
   g | _ dS )zStops watching the memberlistN)r!   r'   r   r   r   Ústop8   s   
zMemberlistProvider.stopr   c                 C   s   | j  |¡ dS )zÑRegisters 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   r   r   r   Ú$register_updated_memberlist_callback=   s   z7MemberlistProvider.register_updated_memberlist_callbackc                 C   s   || j v r| j  |¡ dS dS )zŸUnregisters a callback that was previously registered. Returns True if the callback was
        successfully unregistered, False if it was not ever registered.TF)r!   Úremover   r   r   r   Ú&unregister_updated_memberlist_callbackE   s   
z9MemberlistProvider.unregister_updated_memberlist_callback)r   N)r   r   r   r   r   r   Ú
Memberlistr   r   r
   r$   r   r(   r   r+   r   r,   r.   Úboolr0   Ú__classcell__r   r   r%   r   r    #   s(   
 ÿ
þÿþr    N)Úabcr   Údataclassesr   Útypingr   r   r   r   r   Úchromadb.configr	   r
   Úchromadb.typesr   r   r   r1   r    r   r   r   r   Ú<module>   s    