o
    /i3                     @   s   d dl mZmZ er"d dlmZ d dlmZ ddlmZ ddl	m
Z
 d dlmZ ddlmZ d	Zd
ZdZdddded fddZdddded fddZdded ded dee fddZd ddZdS )!    )TYPE_CHECKINGOptional)Redis)Pipeline   )Queue)
BaseWorker)
split_listas_textzrq:workers:%sz
rq:workersi  Nworkerr   pipeliner   c                 C   sJ   |dur|n| j }|| j| j |  D ]}t| }||| j qdS )z
    Store worker key in Redis so we can easily discover active workers.

    Args:
        worker (Worker): The Worker
        pipeline (Optional[Pipeline], optional): The Redis Pipeline. Defaults to None.
    N)
connectionsaddredis_workers_keyskeyqueue_namesWORKERS_BY_QUEUE_KEYr   r   r   name	redis_key r   V/var/www/html/flask_server/venv/lib/python3.10/site-packages/rq/worker_registration.pyregister   s   r   c                 C   sd   |du r
| j  }n|}|| j| j |  D ]}t| }||| j q|du r0|  dS dS )zRemove Worker key from Redis

    Args:
        worker (Worker): The Worker
        pipeline (Optional[Pipeline], optional): Redis Pipeline. Defaults to None.
    N)r   r   sremr   r   r   r   executer   r   r   r   
unregister"   s   r   queuer   r   r   returnc                 C   sJ   | du r|du rt d| r| j}t| j }n|}t}dd ||D S )ah  Returns a list of worker keys for a given queue.

    Args:
        queue (Optional[&#39;Queue&#39;], optional): The Queue. Defaults to None.
        connection (Optional[&#39;Redis&#39;], optional): The Redis Connection. Defaults to None.

    Raises:
        ValueError: If no Queue or Connection is provided.

    Returns:
        set: A Set with keys.
    Nz,"Queue" or "connection" argument is requiredc                 S   s   h | ]}t |qS r   r
   ).0r   r   r   r   	<setcomp>N   s    zget_keys.<locals>.<setcomp>)
ValueErrorr   r   r   REDIS_WORKER_KEYSsmembers)r   r   redisr   r   r   r   get_keys7   s   r%   c           	      C   s   t t| }| j V}|D ]}|| q| }g }t|D ]\}}|s-|||  q |rQt|t	D ]#}|j
t| j g|R   |j
tg|R   |  q5W d   dS W d   dS 1 sdw   Y  dS )zXDelete invalid worker keys in registry.

    Args:
        queue (Queue): The Queue
    N)listr%   r   r   existsr   	enumerateappendr	   MAX_KEYSr   r   r   r"   )	r   keysr   r   resultsinvalid_keysi
key_existsinvalid_subsetr   r   r   clean_worker_registryQ   s&   
"r1   )N)NN)r   r   )typingr   r   r$   r   redis.clientr   r   r   r   r   rq.utilsr	   utilsr   r   r"   r*   r   r   setstrr%   r1   r   r   r   r   <module>   s    $