
    ]j3                         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Zdddded   fdZdded   ded   dee   fdZddZy)    )TYPE_CHECKINGOptional)Redis)Pipeline   )Queue)
BaseWorker)
split_list)as_textzrq:workers:%sz
rq:workersi  Nworkerr	   pipeliner   c                     ||n| j                   }|j                  | j                  | j                         | j	                         D ]'  }t
        |z  }|j                  || j                         ) y)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_keys        @/root/env/lib/python3.12/site-packages/rq/worker_registration.pyregisterr      sb     &1v7H7HJOOF--vzz:""$ /(4/		6::./    c                 (   || j                   j                         }n|}|j                  | j                  | j                         | j                         D ]'  }t        |z  }|j                  || j                         ) ||j                          yy)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   s        r   
unregisterr   "   s     &&//1

OOF--vzz:""$ /(4/		6::./  r   queuer   r   r   returnc                     | |t        d      | r | j                  }t        | j                  z  }n|}t        }|j                  |      D ch c]  }t        |       c}S c c}w )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.
    z,"Queue" or "connection" argument is required)
ValueErrorr   r   r   REDIS_WORKER_KEYSsmembersr   )r   r   redisr   r   s        r   get_keysr&   7   sa     }+GHH  (5::5	%	$)NN9$=>SGCL>>>s   A"c                    t        t        |             }| j                  j                         5 }|D ]  }|j	                  |        |j                         }g }t        |      D ]  \  }}|r	|j                  ||           |r`t        |t              D ]M  } |j                  t        | j                  z  g|   |j                  t        g|  |j                          O ddd       y# 1 sw Y   yxY w)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_subsets	            r   clean_worker_registryr3   Q   s      D				"	"	$ # 	!COOC 	!""$&w/ 	-MAz##DG,	- ",\8"D #2UZZ?Q.Q/A.A  "## # #s   >C/.A8C//C8)N)NN)r   r   )typingr   r   r%   r   redis.clientr   r   r   r   r	   rq.utilsr
   utilsr   r   r#   r,   r   r   setstrr&   r3    r   r   <module>r;      s    *%"  &   /\ /Xj-A /| x
/C *?HW% ?(7:K ?WZ[^W_ ?4#r   