
    AHj*                        d dl mZ d dlZd dlmZmZ d dlmZ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dlmZ ddlmZmZ d Z G d d      Zy)    )annotationsN)	b64decode	b64encode)datetimetimezone)Enum)Any)Redis   )#UNSERIALIZABLE_RETURN_VALUE_PAYLOAD)Job)resolve_serializer)decode_redis_hashnowc                    d|  S Nzrq:results: )job_ids    B/root/tools/cai/cai_env/lib/python3.12/site-packages/rq/results.pyget_keyr      s    !!    c                     e Zd Z G d de      Z	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd Zd Zd Ze		 	 	 	 	 	 	 d	 	 	 	 	 	 	 dd       Z
e		 	 	 	 	 d	 	 	 	 	 	 	 dd	       Ze		 d	 	 	 	 	 	 	 dd
       Ze		 d	 	 	 	 	 	 	 dd       Ze	ddd       Ze	dd       Ze	dd       Ze	ddd       Ze	dd d       Ze	d!d"d       Ze	d        ZddZd#dZy)$Resultc                       e Zd ZdZdZdZdZdZy)Result.Typer               N)__name__
__module____qualname__
SUCCESSFULFAILEDSTOPPEDRETRIEDMAX_RETRIES_EXCEEDEDr   r   r   Typer      s    
 r   r(   Nc                    || _         || _        || _        |r|n	t               | _        t        |	      | _        || _        || _        || _	        || _
        |
| _        || _        || _        y N)return_value
exc_stringtyper   
created_atr   
serializer
connectionr   idworker_nameexecution_idexecution_started_atexecution_ended_at)selfr   r-   r0   r1   r.   r+   r,   r2   r/   r3   r4   r5   s                r   __init__zResult.__init__   sh     )$	(2*,Z8$&($8!"4r   c                n    d| j                    d| j                  | j                        j                   dS )Nz
Result(id=z, type=))r1   r(   r-   namer6   s    r   __repr__zResult.__repr__9   s/    DGG9GDIIdii,@,E,E+FaHHr   c                T    	 | j                   |j                   k(  S # t        $ r Y yw xY w)NF)r1   AttributeError)r6   others     r   __eq__zResult.__eq__<   s,    	77ehh&& 		s    	''c                ,    t        | j                        S r*   )boolr1   r;   s    r   __bool__zResult.__bool__B   s    DGG}r   c                     | |j                   ||j                  ||||j                  ||	|

      }|j                  ||       |S )N)
r   r-   r0   r+   r,   r2   r/   r3   r4   r5   ttlpipeline)r1   r0   r/   save)clsjobr-   rF   r+   r,   r2   rG   r3   r4   r5   results               r   createzResult.createE   sO     66~~%!#~~%!51
 	h/r   c	                     | |j                   | j                  j                  |j                  |||j                  |||	      }	|	j                  ||       |	S )N)	r   r-   r0   r,   r2   r/   r3   r4   r5   rE   )r1   r(   r$   r0   r/   rH   )
rI   rJ   rF   r,   r2   rG   r3   r4   r5   rK   s
             r   create_failurezResult.create_failureb   sT     66~~!#~~%!51

 	h/r   c	                ^    | j                  || j                  j                  |||||||	      S N)r+   r2   rG   r3   r4   r5   )rL   r(   r&   	rI   rJ   rF   r+   r2   r3   r4   r5   rG   s	            r   create_retriedzResult.create_retried|   s?     zzHH%#%!51  

 
	
r   c	                ^    | j                  || j                  j                  |||||||	      S rP   )rL   r(   r'   rQ   s	            r   create_max_retries_exceededz"Result.create_max_retries_exceeded   s?     zzHH))%#%!51  

 
	
r   c           
        |j                   j                  | j                  |j                        dd      }g }|D ]L  \  }}|j	                  | j                  |j                  |j                         ||j                   |             N |S )zReturns all results for job+-r0   r/   )r0   	xrevranger   r1   appendrestoredecode)rI   rJ   r/   responseresults	result_idpayloads          r   allz
Result.all   s}     >>++CKK,?cJ"* 	IwNNCFFI$4$4$6CNNgqr	
 r   c                j    |j                   j                  | j                  |j                              S )z!Returns the number of job results)r0   xlenr   r1   rI   rJ   s     r   countzResult.count   s&     ~~""3;;svv#677r   c                l    |j                   j                  | j                  |j                               y)zDelete all job resultsN)r0   deleter   r1   rd   s     r   
delete_allzResult.delete_all   s#     	ckk#&&12r   c                   t        j                  t        |j                  d      d         dz  t        j
                        }t        |      }t        |      }|j                  d      }|(|j                  t        |j                                     }|j                  d      }|r,t        j                  t        |            j                         }|j                  d      r |j                  dd      j                         nd	}	|j                  d
      }
|
r|
j                         }
|j                  d      }|r.t        j                  t        |      t        j
                        }|j                  d      }|r.t        j                  t        |      t        j
                        }t        |t        j!                  t        |d               ||||||	|
||      S )z/Create a Result object from given Redis payloadrW   r     )tzr+   r,   r2   r    r3   r4   r5   r-   )	r0   r1   r.   r+   r,   r2   r3   r4   r5   )r   fromtimestampintsplitr   utcr   r   getloadsr   r\   zlib
decompressfloatr   r(   )rI   r   r_   r`   r0   r/   r.   r+   r,   r2   r3   r4   r5   s                r   r[   zResult.restore   s    ++C	0DQ0G,H4,OT\T`T`a
#G,
 (
3
{{>2#%++Il6I6I6K,LML[[.
:)>?FFHJBI++mB\gkk-5<<>bd{{>2'..0L&{{+AB#+#9#9%@T:UZbZfZf#g $[[)=>!)!7!7>P8QV^VbVb!cKKGFO,-!!%!#%!51
 	
r   c                     y)af  Fetch a result that matches a given job ID. The current sorted set
        based implementation does not allow us to fetch a given key by ID
        so we need to iterate through results, deserialize the payload and
        look for a matching ID.

        Future Redis streams based implementation may make this more efficient
        and scalable.
        Nr   )rI   rJ   r/   s      r   fetchzResult.fetch   s     r   c                   |rS|dz  }|j                   j                  | j                  |j                        di|      }|sy|d   }|d   }|d   \  }}nC|j                   j	                  | j                  |j                        dd	d
      }|sy|d   \  }}| j                  |j                  |j                         ||j                   |      }|S )zReturns the latest result for given job instance or ID.

        If a non-zero timeout is provided, block for a result until timeout is reached.
        rj   z0-0)blockNr   r   rV   rW   )re   rX   )r0   xreadr   r1   rY   r[   r\   )	rI   rJ   r/   timeout
timeout_msr]   r_   r`   ress	            r   fetch_latestzResult.fetch_latest   s      !4J~~++S[[-@%,HPZ+[H{H{H!)"Iw ~~//CFF0CS#UV/WH!)!Iwkk#&&)"2"2"4g#..eokp
r   c                    d| S r   r   )rI   r   s     r   r   zResult.get_key  s    VH%%r   c                N   | j                  | j                        }||n| j                  }|j                  || j	                         d      }||j                         | _        |4|dk(  r|j                  |       | j                  S |j                  ||       | j                  S )zSave result data to Redis
   )maxlenrz   )	r   r   r0   xadd	serializer\   r1   persistexpire)r6   rF   rG   keyr0   rK   s         r   rH   zResult.save  s    ll4;;'!)!5X4??
dnn&6rBmmoDG?by""3' ww !!#s+wwr   c                   | j                   j                  | j                  d}| j                  Gt	        t        j                  | j                  j                                     j                         |d<   	 | j                  j                  | j                        }| j                  t	        |      j                         |d<   | j                  r| j                  |d<   | j                  r| j                  j                         |d<   | j                   r| j                   j                         |d<   |S #  | j                  j                  t              }Y xY w)N)r-   r2   r,   r+   r3   r4   r5   )r-   valuer2   r,   r   rs   compressencoder\   r/   dumpsr+   r   r3   r4   	timestampr5   )r6   data
serializeds      r   r   zResult.serialize-  s   (,		HXHXY??&!*4==9O9O9Q+R!S!Z!Z!\D	T..t/@/@AJ (#,Z#8#?#?#AD #'#4#4D $$+/+D+D+N+N+PD'("")-)@)@)J)J)LD%& !	T../RSJs   8%D4 4!E)	NNNNrl   NNNN)r   strr-   r(   r0   r
   r1   
str | Noner.   datetime | Noner+   z
Any | Noner,   r   r2   r   r3   r   r4   r   r5   r   )NNrl   NNNN)r3   r   r4   r   r5   r   returnr   )rl   NNNNr*   )r3   r   r4   r   r5   r   r   r   )rJ   r   )rJ   r   r   rn   )rJ   r   r   None)
r   r   r_   r   r`   dictr0   r
   r   r   )rJ   r   r   Result | None)Nr   )rJ   r   r|   rn   r   r   )r   zdict[str, Any])r    r!   r"   r   r(   r7   r<   r@   rC   classmethodrL   rN   rR   rT   ra   re   rh   r[   rw   r   r   rH   r   r   r   r   r   r      se   !t ! &*#'!%#'04.255 5 	5
 5 $5 !5 5 5 !5 .5 ,58I  #'04.2 ! . , 
 8  #'04.2 ! . , 
 2  
 
 '
 %
 

 
.  
 
 '
 %
 

 
. 
 
 8 8 3 3 +
 +
Z 	 	  4 & &"r   r   )
__future__r   rs   base64r   r   r   r   enumr   typingr	   redisr
   defaultsr   rJ   r   serializersr   utilsr   r   r   r   r   r   r   <module>r      s7    "  ' '    9  + )"p pr   