
    s,g8                         d dl mZ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Set)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        p/var/www/trellinator.diamondhoofcare.com/public_html/venv/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_registryr4   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&   r   redis.clientr   r    r	   r   r
   rq.utilsr   utilsr   r   r$   r-   r   r   strr'   r4    r   r   <module>r;      s    / /%"  &   /\ /Xj-A /| x
/C *?HW% ?(7:K ?WZ[^W_ ?4#r   