
    s,g                      v    d dl m Z mZmZ d dlmZmZmZ d dlmZ d dl	m
Z
 erddlmZ ddlmZ  G d d	e      Zy
)    )datetime	timedeltatimezone)TYPE_CHECKINGListOptional)Redis)now   )Queue)
BaseWorkerc                       e Zd ZdedefdZededefd       ZdedefdZdede	fdZ
dedee   fd	Zdede	fd
Zdee   fdZdeddfdZddZy)IntermediateQueue	queue_key
connectionc                 L    || _         | j                  |      | _        || _        y )N)r   get_intermediate_queue_keykeyr   )selfr   r   s      o/var/www/trellinator.diamondhoofcare.com/public_html/venv/lib/python3.12/site-packages/rq/intermediate_queue.py__init__zIntermediateQueue.__init__   s"    "229=$    returnc                     | dS )zReturns the intermediate queue key for a given queue key.

        Args:
            key (str): The queue key

        Returns:
            str: The intermediate queue key
        z:intermediate )clsr   s     r   r   z,IntermediateQueue.get_intermediate_queue_key   s     M**r   job_idc                 $    | j                    d| S )zReturns the first seen key for a given job ID.

        Args:
            job_id (str): The job ID

        Returns:
            str: The first seen key
        z:first_seen:)r   r   r   s     r   get_first_seen_keyz$IntermediateQueue.get_first_seen_key   s     ((<x00r   c                     t        | j                  j                  | j                  |      t	               j                         dd            S )zSets the first seen timestamp for a job.

        Args:
            job_id (str): The job ID
            timestamp (float): The timestamp
        TiQ )nxex)boolr   setr    r
   	timestampr   s     r   set_first_seenz IntermediateQueue.set_first_seen*   s=     DOO''(?(?(GIZ_chq'rssr   c                     | j                   j                  | j                  |            }|r.t        j                  t        |      t        j                        S y)zReturns the first seen timestamp for a job.

        Args:
            job_id (str): The job ID

        Returns:
            Optional[datetime]: The timestamp
        )tzN)r   getr    r   fromtimestampfloatr   utc)r   r   r&   s      r   get_first_seenz IntermediateQueue.get_first_seen4   sE     OO''(?(?(GH	))%	*:x||LLr   c                 ^    | j                  |      }|syt               |z
  t        d      kD  S )a  Returns whether a job should be cleaned up.
        A job in intermediate queue should be cleaned up if it has been there for more than 1 minute.

        Args:
            job_id (str): The job ID

        Returns:
            bool: Whether the job should be cleaned up
        Fr   )minutes)r.   r
   r   )r   r   
first_seens      r   should_be_cleaned_upz&IntermediateQueue.should_be_cleaned_upB   s1     ((0
uz!Ia$888r   c                     | j                   j                  | j                  dd      D cg c]  }|j                          c}S c c}w )zlReturns the job IDs in the intermediate queue.

        Returns:
            List[str]: The job IDs
        r   )r   lranger   decoder   s     r   get_job_idszIntermediateQueue.get_job_idsR   s6     /3oo.D.DTXXqRT.UVFVVVs   ANc                 R    | j                   j                  | j                  d|       y)zgRemoves a job from the intermediate queue.

        Args:
            job_id (str): The job ID
        r   N)r   lremr   r   s     r   removezIntermediateQueue.removeZ   s     	TXXq&1r   c                 ,   | j                         }|D ]  }|j                  |      }||j                  vs#|s| j                  |       7| j	                  |      rI| j                  |      s[|j                  ||d       | j                  |        y )Nz$Job was stuck in intermediate queue.)
exc_string)r7   	fetch_jobstarted_job_registryr:   r'   r2   handle_job_failure)r   workerqueuejob_idsr   jobs         r   cleanupzIntermediateQueue.cleanupb   s    ""$ 	(F//&)CU777KK' &&v.,,V4--c5Ek-lKK'!	(r   )r@   r   rA   r   r   N)__name__
__module____qualname__strr	   r   classmethodr   r    r$   r'   r   r   r.   r2   r   r7   r:   rD   r   r   r   r   r      s    %# %5 %
 	+3 	+3 	+ 	+	1 	1 	1tS tT tS Xh-? 93 94 9 WT#Y W2S 2T 2(r   r   N)r   r   r   typingr   r   r   redisr	   rq.utilsr
   rA   r   r@   r   objectr   r   r   r   <module>rN      s.    2 2 0 0  "h( h(r   