
    $gU                         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dS )    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    J/var/www/html/netbox-4.1.3/venv/lib/python3.11/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            Ze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dS )$Resultc                       e Zd ZdZdZdZdS )Result.Typer         N)__name__
__module____qualname__
SUCCESSFULFAILEDSTOPPEDr   r   r   Typer      s        
r   r$   Nr   type
connectionid
created_atreturn_value
exc_stringc	                     || _         || _        || _        |r|nt                      | _        t          |          | _        || _        || _        || _	        d S N)
r)   r*   r%   r   r(   r   
serializerr&   r   r'   )	selfr   r%   r&   r'   r(   r)   r*   r-   s	            r   __init__zResult.__init__   sV     )$	(2=**,Z88$r   c                 X    d| j          d|                     | j                  j         dS )Nz
Result(id=z, type=))r'   r$   r%   namer.   s    r   __repr__zResult.__repr__-   s.    HDGHHDIIdi,@,@,EHHHHr   c                 F    	 | j         |j         k    S # t          $ r Y dS w xY w)NF)r'   AttributeError)r.   others     r   __eq__zResult.__eq__0   s8    	7eh&& 	 	 	55	s    
  c                 *    t          | j                  S r,   )boolr'   r3   s    r   __bool__zResult.__bool__6   s    DG}}r   c                 t     | |j         ||j        |||j                  }|                    ||           |S )N)r   r%   r&   r)   r*   r-   ttlpipeline)r'   r&   r-   save)clsjobr%   r>   r)   r*   r?   results           r   createzResult.create9   sM    6~%!~
 
 
 	h///r   c                      | |j         | j        j        |j        ||j                  }|                    ||           |S )N)r   r%   r&   r*   r-   r=   )r'   r$   r"   r&   r-   r@   )rA   rB   r>   r*   r?   rC   s         r   create_failurezResult.create_failureF   sN    6~!~
 
 
 	h///r   rB   c           
         |j                             |                     |j                  dd          }g }|D ]N\  }}|                    |                     |j        |                                ||j         |                     O|S )zReturns all results for job+-r&   r-   )r&   	xrevranger   r'   appendrestoredecode)rA   rB   r-   responseresults	result_idpayloads          r   allz
Result.allR   s     >++CKK,?,?cJJ"* 	 	IwNNCFI$4$4$6$6CNgqrr    r   returnc                 f    |j                             |                     |j                            S )z!Returns the number of job results)r&   xlenr   r'   rA   rB   s     r   countzResult.count_   s(     ~""3;;sv#6#6777r   c                 j    |j                             |                     |j                             dS )zDelete all job resultsN)r&   deleter   r'   rW   s     r   
delete_allzResult.delete_alld   s.     	ckk#&1122222r   rQ   rR   c           	      |   t          j        t          |                    d          d                   dz  t          j                  }t          |          }t          |          }|                    d          }|4|	                    t          |                                                    }|                    d          }|r3t          j        t          |                                                    }t          |t                              t          |d                             |||||	          S )
z/Create a Result object from given Redis payloadrI   r     )tzr)   Nr*   r%   )r&   r'   r(   r)   r*   )r   fromtimestampintsplitr   utcr   r   getloadsr   rN   zlib
decompressr   r$   )	rA   r   rQ   rR   r&   r-   r(   r)   r*   s	            r   rM   zResult.restorei   s    +C	0D0DQ0G,H,H4,OT\T`aaa
#G,,
 (
33
{{>22#%++Il6I6I6K6K,L,LMML[[..
 	I:)>)>??FFHHJKKGFO,,--!!%!
 
 
 	
r   c                     dS )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   )rA   rB   r-   s      r   fetchzResult.fetch   s	     tr   r   timeoutc                    |r[|dz  }|j                             |                     |j                  di|          }|sdS |d         }|d         }|d         \  }}nE|j                             |                     |j                  dd	d
          }|sdS |d         \  }}|                     |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.
        r]   z0-0)blockNr   r   rH   rI   )rX   rJ   )r&   xreadr   r'   rK   rM   rN   )	rA   rB   r-   ri   
timeout_msrO   rQ   rR   ress	            r   fetch_latestzResult.fetch_latest   s      	- !4J~++S[[-@-@%,HPZ+[[H t{H{H!)"Iww ~//CF0C0CS#UV/WWH t!)!Iwkk#&)"2"2"4"4g#.eokpp
r   c                     d|z  S r   r   )rA   r   s     r   r   zResult.get_key   s    ''r   c                 L   |                      | j                  }||n| j        }|                    ||                                 d          }||                                | _        |2|dk    r|                    |           n|                    ||           | j        S )zSave result data to RedisN
   )maxlenrl   )	r   r   r&   xadd	serializerN   r'   persistexpire)r.   r>   r?   keyr&   rC   s         r   r@   zResult.save   s    ll4;''!)!5XX4?
dnn&6&6rBBmmooDG?byy""3''''!!#s+++wr   c                    d| j         j        i}| j        Mt          t	          j        | j                                                                                            |d<   	 | j        	                    | j
                  }n&#  | j        	                    t                    }Y nxY w| j
        $t          |                                          |d<   |S )Nr%   r*   r)   )r%   valuer*   r   re   compressencoderN   r-   dumpsr)   r   )r.   data
serializeds      r   rv   zResult.serialize   s    	(?&!*4=9O9O9Q9Q+R+R!S!S!Z!Z!\!\D	T..t/@AAJJ	T../RSSJJJ(#,Z#8#8#?#?#A#AD  s   $B !B')NNNNN)NNNr,   )Nr   )r   r   r    r   r$   strr
   r	   r   r   r/   r4   r8   r;   classmethodrD   rF   r   rS   r`   rX   r[   dictrM   rh   rp   r   r@   rv   r   r   r   r   r      s           t    !)-&*$(   	
 SM X& sm SM   (I I I     
 
 
 [
 	 	 	 [	 
 
c 
 
 
 [
 8 8 8 8 8 [8 3S 3T 3 3 3 [3 
 
S 
S 
4 
U 
hp 
 
 
 [
6 	 	 	(1C 	 	 	 [	  s c (S[J\    [4 ( ( [(   "    r   r   )re   base64r   r   r   r   enumr   typingr   r	   redisr
   defaultsr   rB   r   serializersr   utilsr   r   r   r   r   r   r   <module>r      s    ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '                             9 9 9 9 9 9       + + + + + + ) ) ) ) ) ) ) )$ $ $} } } } } } } } } }r   