o
    Ph                     @   sB   d dl Z d dlZd dlmZmZmZmZmZmZ G dd dZ	dS )    N)DictIterableIteratorListOptionalTuplec                   @   s   e Zd ZU g Zee ed< ddee deddfddZ	d	eddfd
dZ
d	eddfddZdedee fddZdedeee ee f fddZdedeeee ee f  fddZdedee fddZdS )HashRingnodes    replicasreturnNc                 C   s*   || _ i | _g | _|D ]}| | qd S N)r   ringsorted_keysadd_node)selfr	   r   noder
   r
   b/var/www/html/Testing_prj/Navya-Bakers/venv/lib/python3.10/site-packages/django_redis/hash_ring.py__init__	   s   zHashRing.__init__r   c                 C   s`   | j | t| jD ]}| d| }t|  }|| j|< | j	| q| j	
  d S N:)r	   appendranger   hashlibsha256encode	hexdigestr   r   sort)r   r   x_key_hashr
   r
   r   r      s   
zHashRing.add_nodec                 C   sP   | j | t| jD ]}t| d|   }| j|= | j	| qd S r   )
r	   remover   r   r   r   r   r   r   r   )r   r   r   r!   r
   r
   r   remove_node   s   zHashRing.remove_nodekeyc                 C   s   |  |\}}|S r   )get_node_pos)r   r$   nir
   r
   r   get_node$   s   zHashRing.get_nodec                 C   sd   t | jdkr	dS t|  }t| j|}t|d | j	t | j
 d }| j| j|  |fS )Nr   NN   )lenr   r   r   r   r   bisectr   minr   r	   )r   r$   r!   idxr
   r
   r   r%   (   s   zHashRing.get_node_posc                 c   sL    t | jdkrdV  | |\}}| j|d  D ]
}|| j| fV  qd S )Nr   r)   )r+   r   r%   r   )r   r$   r   poskr
   r
   r   
iter_nodes1   s   zHashRing.iter_nodesc                 C   s
   |  |S r   )r(   )r   r$   r
   r
   r   __call__9   s   
zHashRing.__call__)r
   r   )__name__
__module____qualname__r	   r   str__annotations__r   intr   r   r#   r   r(   r   r%   r   r1   r2   r
   r
   r
   r   r      s   
 "&	r   )
r,   r   typingr   r   r   r   r   r   r   r
   r
   r
   r   <module>   s     