
    s,g                         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	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)    N)	b64decode	b64encode)datetimetimezone)Enum)AnyOptional)Redis   )#UNSERIALIZABLE_RETURN_VALUE_PAYLOAD)Job)resolve_serializer)decode_redis_hashnowc                     d| z  S Nzrq:results:%s )job_ids    d/var/www/trellinator.diamondhoofcare.com/public_html/venv/lib/python3.12/site-packages/rq/results.pyget_keyr      s    V##    c                      e Zd Z G d de      Z	 	 	 	 	 d dedededee   dee   d	ee	   d
ee   f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efd       Zededefd       Zededdfd       Zed#dededededd f
d       Zed#deded    fd       Zed$dededed    fd       Zed        Zd#dZd Zy)%Resultc                       e Zd ZdZdZdZdZy)Result.Typer            N)__name__
__module____qualname__
SUCCESSFULFAILEDSTOPPEDRETRIEDr   r   r   Typer      s    
r   r&   Nr   type
connectionid
created_atreturn_value
exc_stringc	                     || _         || _        || _        |r|n	t               | _        t        |      | _        || _        || _        || _	        y N)
r+   r,   r'   r   r*   r   
serializerr(   r   r)   )	selfr   r'   r(   r)   r*   r+   r,   r/   s	            r   __init__zResult.__init__   sH     )$	(2*,Z8$r   c                 n    d| j                    d| j                  | j                        j                   dS )Nz
Result(id=z, type=))r)   r&   r'   namer0   s    r   __repr__zResult.__repr__.   s/    DGG9GDIIdii,@,E,E+FaHHr   c                 T    	 | j                   |j                   k(  S # t        $ r Y yw xY w)NF)r)   AttributeError)r0   others     r   __eq__zResult.__eq__1   s,    	77ehh&& 		s    	''c                 ,    t        | j                        S r.   )boolr)   r5   s    r   __bool__zResult.__bool__7   s    DGG}r   returnc                      | |j                   ||j                  |||j                        }|j                  ||       |S )N)r   r'   r(   r+   r,   r/   ttlpipeline)r)   r(   r/   save)clsjobr'   rA   r+   r,   rB   results           r   createzResult.create:   sA    66~~%!~~
 	h/r   c                      | |j                   | j                  j                  |j                  ||j                        }|j                  ||       |S )N)r   r'   r(   r,   r/   r@   )r)   r&   r#   r(   r/   rC   )rD   rE   rA   r,   rB   rF   s         r   create_failurezResult.create_failureG   sF    66~~!~~
 	h/r   c                      | |j                   | j                  j                  |j                  |j                        }|j                  ||       |S )N)r   r'   r(   r/   r@   )r)   r&   r%   r(   r/   rC   )rD   rE   rA   rB   rF   s        r   create_retriedzResult.create_retriedS   sE    66!!~~~~	
 	h/r   rE   c           
         |j                   j                  | j                  |j                        dd      }g }|D ]L  \  }}|j	                  | j                  |j                  |j                         ||j                   |             N |S )zReturns all results for job+-r(   r/   )r(   	xrevranger   r)   appendrestoredecode)rD   rE   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)r(   xlenr   r)   rD   rE   s     r   countzResult.countk   s&     ~~""3;;svv#677r   c                 l    |j                   j                  | j                  |j                               y)zDelete all job resultsN)r(   deleter   r)   r[   s     r   
delete_allzResult.delete_allp   s#     	ckk#&&12r   rV   rW   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                         }t        |t        j                  t        |d               |||||      S )	z/Create a Result object from given Redis payloadrN   r     )tzr+   r,   r'   )r(   r)   r*   r+   r,   )r   fromtimestampintsplitr   utcr   r   getloadsr   rS   zlib
decompressr   r&   )	rD   r   rV   rW   r(   r/   r*   r+   r,   s	            r   rR   zResult.restoreu   s     ++C	0DQ0G,H4,OT\T`T`a
#G,
 (
3
{{>2#%++Il6I6I6K,LML[[.
:)>?FFHJKKGFO,-!!%!
 	
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   )rD   rE   r/   s      r   fetchzResult.fetch   s     r   timeoutc                    |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.
        ra   z0-0)blockNr   r   rM   rN   )r\   rO   )r(   xreadr   r)   rP   rR   rS   )	rD   rE   r/   rm   
timeout_msrT   rV   rW   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|z  S r   r   )rD   r   s     r   r   zResult.get_key   s    ''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
   )maxlenrp   )	r   r   r(   xadd	serializerS   r)   persistexpire)r0   rA   rB   keyr(   rF   s         r   rC   zResult.save   s    ll4;;'!)!5X4??
dnn&6rBmmoDG?by""3' ww !!#s+wwr   c                    d| j                   j                  i}| j                  Gt        t	        j
                  | j                  j                                     j                         |d<   	 | j                  j                  | j                        }| j                  t        |      j                         |d<   |S #  | j                  j                  t              }Y MxY w)Nr'   r,   r+   )r'   valuer,   r   ri   compressencoderS   r/   dumpsr+   r   )r0   data
serializeds      r   rz   zResult.serialize   s    		(??&!*4==9O9O9Q+R!S!Z!Z!\D	T..t/@/@AJ (#,Z#8#?#?#AD  	T../RSJs   -%B< <!C)NNNNN)NNN)r>   r   r.   )Nr   )r   r    r!   r   r&   strr
   r	   r   r   r1   r6   r:   r=   classmethodrG   rI   rK   r   rX   rd   r\   r_   dictrR   rl   rt   r   rC   rz   r   r   r   r   r      s   t  !)-&*$(  	
 SM X& sm SM(I 
 
 	 	   
c 
 
 8 8 8 8 3S 3T 3 3 
S 
S 
4 
U 
hp 
 
6 	 	(1C 	 	 s c (S[J\  4 ( ("r   r   )ri   base64r   r   r   r   enumr   typingr   r	   redisr
   defaultsr   rE   r   serializersr   utilsr   r   r   r   r   r   r   <module>r      s4     ' '     9  + )$I Ir   