
    AHjI                        d dl mZ d dl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ZdddZdddZddZy)    )annotations)TYPE_CHECKING)Redis)Pipeline   )Queue)
BaseWorker)
split_list)as_textzrq:workers:%sz
rq:workersi  Nc                    ||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workerpipeliner   name	redis_keys        N/root/tools/cai/cai_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   c                    | |t        d      | r | j                  }t        | j                  z  }n|J |}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   )queuer   redisr   r   s        r   get_keysr%   9   sm     }+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_registryr2   T   s      D				"	"	$ # 	!COOC 	!""$&w/ 	-MAz##DG,	- ",\8"D #2UZZ?Q.Q/A.A  "## # #s   >C/.A8C//C8)N)r   r	   r   zPipeline | None)NN)r#   zQueue | Noner   zRedis | Nonereturnzset[str])r#   r   )
__future__r   typingr   r$   r   redis.clientr   r#   r   r   r	   rq.utilsr
   utilsr   r   r!   r+   r   r   r%   r2    r   r   <module>r:      sE    "  %"  &   /*?6#r   