
    ]jS                        d dl mZ d dlmZ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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 dlm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1 ee
d               Z2ee
d               Z3ee
d               Z4ee
d               Z5ee
d               Z6ee
d               Z7ee
d               Z8ee
d               Z9ee
d               Z:ee
d               Z;ee
d               Z<ee
d                Z=ee
d!               Z>ee
d"               Z?ee
d#               Z@ee
d$               ZAee
d%               ZBee
ed&                      ZCee
d'               ZDy())    )ceil)AnycastTuple)adminmessages)staff_member_required)Http404)redirectrender)reverse)never_cache)require_POST)ResponseError)requeue_job)NoSuchJobError)Job	JobStatus)DeferredJobRegistryFailedJobRegistryFinishedJobRegistryScheduledJobRegistryStartedJobRegistry)Worker)clean_worker_registry   )get_queue_by_indexget_scheduler_by_index)
QUEUES_MAP)get_executionsget_jobs	stop_jobsc           	         t        |      }t        |      }d}|j                  }t        | j                  j	                  dd            }|dkD  rJt        t        ||z              }t        t        d|dz               }||dz
  z  }|j                  ||      }	ng }	g }i t        j                  j                  |       |||	|||dd}
t        | d|
      S )Nd   pager   r   Queued)queuequeue_indexjobsnum_jobsr%   
page_range
job_statuszdjango_rq/jobs.html)intr   countGETgetr   listranger!   r   siteeach_contextr   )requestr(   r'   items_per_pager*   r%   	last_pager+   offsetr)   context_datas              9/root/env/lib/python3.12/site-packages/django_rq/views.pyr)   r)      s     k"K{+EN{{Hw{{vq)*D!|X678	%9q=12
4!8,~~fn5
	
**
!
!'
*	" 	L '0,??    c           	      `   t        |      }t        |      }t        |j                  |j                        }d}t        |      }t        | j                  j                  dd            }| j                  j                  dd      dk(  rd}nd}g }|dkD  rbt        t        ||z              }	t        t        d|	dz               }
||dz
  z  }|j                  |||z   dz
  |dk(  	      }t        |||      }ng }
i t        j                  j                  |       ||||||
|d
}t!        | d|      S )Nr$   r%   r   desc1
descending	ascendingr   r=   r'   r(   r)   r*   r%   r+   sort_directionzdjango_rq/finished_jobs.html)r-   r   r   name
connectionlenr/   r0   r   r1   r2   get_job_idsr!   r   r3   r4   r   r5   r(   r'   registryr6   r*   r%   rC   r)   r7   r+   r8   job_idsr9   s                 r:   finished_jobsrK   >   s@    k"K{+E"5::u/?/?@HN8}Hw{{vq)*D{{vs#s*%$D!|X678	%9q=12
4!8,&&vv/F/JQ_coQo&pw1 
	
**
!
!'
*	" (	L '9<HHr;   c           	      `   t        |      }t        |      }t        |j                  |j                        }d}t        |      }t        | j                  j                  dd            }| j                  j                  dd      dk(  rd}nd}g }|dkD  rbt        t        ||z              }	t        t        d|	dz               }
||dz
  z  }|j                  |||z   dz
  |dk(  	      }t        |||      }ng }
i t        j                  j                  |       ||||||
|d
}t!        | d|      S )Nr$   r%   r   r=   r>   r?   r@   r   rA   rB   zdjango_rq/failed_jobs.html)r-   r   r   rD   rE   rF   r/   r0   r   r1   r2   rG   r!   r   r3   r4   r   rH   s                 r:   failed_jobsrM   h   s@    k"K{+E U-=-=>HN8}Hw{{vq)*D{{vs#s*%$D!|X678	%9q=12
4!8,&&vv/F/JQ_coQo&pw1 
	
**
!
!'
*	" (	L '7FFr;   c           	         t        |      }t        |      }t        |j                  |j                        }d}t        |      }t        | j                  j                  dd            }g }| j                  j                  dd      dk(  rd}nd}|dkD  rt        t        ||z              }	t        t        d|	dz               }
||dz
  z  }|j                  |||z   dz
  |dk(  	      }t        |||      }|D ]  }|j                  |      |_         ng }
i t        j                   j#                  |       ||||||
|d
}t%        | d|      S )Nr$   r%   r   r=   r>   r?   r@   r   rA   rB   zdjango_rq/scheduled_jobs.html)r-   r   r   rD   rE   rF   r/   r0   r   r1   r2   rG   r!   get_scheduled_timescheduled_atr   r3   r4   r   )r5   r(   r'   rI   r6   r*   r%   r)   rC   r7   r+   r8   rJ   jobr9   s                  r:   scheduled_jobsrR      sd    k"K{+E#EJJ0@0@AHN8}Hw{{vq)*DD{{vs#s*%$!|X678	%9q=12
4!8,&&vv/F/JQ_bnQn&ow1 	@C'::3?C	@ 
	
**
!
!'
*	" (	L ':LIIr;   c           
      "   t        |      }t        |      }t        |j                  |j                        }d}t        |      }t        | j                  j                  dd            }g }g }|dkD  r{t        t        ||z              }	t        t        d|	dz               }
||dz
  z  }	 |j                  |||z   dz
        }t%        ||D cg c]  }|d   	 c}|      }t'        ||      }ng }
i t(        j*                  j-                  |       ||||||
d|d}t/        | d|      S # t        $ rX |j                  |||z   dz
        D cg c].  }t        t        t         t         f   |j#                  d            0 nc c}w }}Y w xY wc c}w )	Nr$   r%   r   r   :Started)r'   r(   r)   r*   r%   r+   r,   
executionsz#django_rq/started_job_registry.html)r-   r   r   rD   rE   rF   r/   r0   r   r1   r2   get_job_and_execution_idsAttributeErrorrG   r   r   strsplitr!   r    r   r3   r4   r   )r5   r(   r'   rI   r6   r*   r%   r)   rV   r7   r+   r8   composite_keyskeyir9   s                   r:   started_jobsr^      s    k"K{+E!%**e.>.>?HN8}Hw{{vq)*DDJ!|X678	%9q=12
4!8,	%??Q_H_bcHcdN n=!=xH#E>:
 


**
!
!'
*
"  
L '@,OO/  	 $//8ORS8ST U38_ciin5 N 	  >s$   *D( F
(#F	3E?>F	F	c                 L   t        |      }t        |      }t        |       t        j                  |j
                        }|D cg c]!  }|j                  |j                         v s |# }}i t        j                  j                  |       |||d}t        | d|      S c c}w )N)r'   r(   workerszdjango_rq/workers.html)r-   r   r   r   allrE   rD   queue_namesr   r3   r4   r   )r5   r(   r'   all_workersworkerr`   r9   s          r:   r`   r`      s     k"K{+E% **U--.K$/V&5::ASASAU3UvVGV
**
!
!'
*"	L '3\BB Ws   !B!'B!c                    t        |      }t        |      }t        j                  ||j                        }|sJ |j
                  dz  |_        dj                  |j                               }i t        j                  j                  |       |||||j                         |j
                  dz  d}t        | d|      S )NrE   i  z, )r'   r(   rd   rb   rQ   total_working_timezdjango_rq/worker_details.html)r-   r   r   find_by_keyrE   rg   joinrb   r   r3   r4   get_current_jobr   )r5   r(   r\   r'   rd   rb   r9   s          r:   worker_detailsrk      s     k"K{+E0@0@AFM6 & 9 9D @F))F..01K
**
!
!'
*""%%'$77$>L ':LIIr;   c           
         t        |      }t        |      }t        |j                  |j                        }d}t        |      }t        | j                  j                  dd            }g }| j                  j                  dd      dk(  rd}nd}|dkD  rt        t        ||z              }	t        t        d|	dz               }
||dz
  z  }|j                  |||z   dz
  |dk(  	      }|D ]>  }	 |j                  t        j                  ||j                  |j                  
             @ ng }
i t"        j$                  j'                  |       ||||||
d|d}t)        | d|      S # t         $ r Y w xY w)Nr$   r%   r   r=   r>   r?   r@   r   rA   rE   
serializerDeferred)r'   r(   r)   r*   r%   r+   r,   rC   zdjango_rq/deferred_jobs.html)r-   r   r   rD   rE   rF   r/   r0   r   r1   r2   rG   appendr   fetchrn   r   r   r3   r4   r   )r5   r(   r'   rI   r6   r*   r%   r)   rC   r7   r+   r8   rJ   job_idr9   s                  r:   deferred_jobsrs     s    k"K{+E"5::u/?/?@HN8}Hw{{vq)*DD{{vs#s*%$!|X678	%9q=12
4!8,&&vv/F/JQ_coQo&p 	FCIIf9I9IV[VfVfgh	 


**
!
!'
*
"  (
L '9<HH# " s   .;E''	E32E3c                    t        |      }t        |      }	 t        j                  ||j                  |j
                        }	 |j                   d}|j                  j                  |j                  d      }| |j
                  j                  |      |_        	 |j                  }g }|j                  D ]B  }		 t        j                  |	|j                  |j
                        }
|j!                  |	|
f       D i t"        j$                  j'                  |       ||||||d}t)        | d|      S # t        $ r t        d|z        w xY w#  d}Y xY w# t        $ r d }Y w xY w# t        $ r d }
Y w xY w)Nrm   z"Couldn't find job with this ID: %sTFresult)r(   rQ   r'   data_is_validexc_infodependencieszdjango_rq/job_detail.html)r-   r   r   rq   rE   rn   r   r
   	func_namehgetr\   loadslegacy_result	_exc_inforX   _dependency_idsrp   r   r3   r4   r   )r5   r(   rr   r'   rQ   rv   rvrw   rx   dependency_id
dependencyr9   s               r:   
job_detailr   C  s    k"K{+EEii5+;+;HXHXY
 
		SWWh	/B	~NN004== L ,, 9	=U=M=MZ_ZjZjkJ 	]J789
**
!
!'
*"&$L '6EES  E:VCDDE    	J	s;   ,D2 E E :,E(2E
EE%$E%(E65E6c                    t        |      }t        |      }t        j                  ||j                  |j
                        }| j                  dk(  rp|j                  j                  |j                  d|j                         |j                          t        j                  | d|j                  z         t        d|      S i t        j                  j!                  |       |||d}t#        | d|      S )Nrm   POSTr   z You have successfully deleted %srq_jobsr(   rQ   r'   django_rq/delete_job.html)r-   r   r   rq   rE   rn   methodlremr\   iddeleter   infor   r   r3   r4   r   r5   r(   rr   r'   rQ   r9   s         r:   
delete_jobr   w  s     k"K{+E
))Fu'7'7EDTDT
UC~~eiiCFF3

gACFFJK	;//
**
!
!'
*"	L '6EEr;   c                    t        |      }t        |      }t        j                  ||j                  |j
                        }| j                  dk(  rRt        ||j                  |j
                         t        j                  | d|j                  z         t        d||      S i t        j                  j                  |       |||d}t        | d|      S )Nrm   r   z!You have successfully requeued %srq_job_detailr   r   )r-   r   r   rq   rE   rn   r   r   r   r   r   r   r   r3   r4   r   r   s         r:   requeue_job_viewr     s     k"K{+E
))Fu'7'7EDTDT
UC~~Fu'7'7EDTDTUgBSVVKLf==
**
!
!'
*"	L '6EEr;   c                    t        |      }t        |      }| j                  dk(  r@	 |j                          t	        j
                  | d|j                  z         t        d|      S i t        j                  j                  |       ||d}t!        | d|      S # t        $ rQ}	 d|j                  v }n# t        $ r dt        |      v }Y nw xY w|rt	        j                  | d       n|Y d }~d }~ww xY w)Nr   z*You have successfully cleared the queue %sEVALSHAzbThis action is not supported on Redis versions < 2.6.0, please use the bulk delete command insteadr   )r(   r'   zdjango_rq/clear_queue.html)r-   r   r   emptyr   r   rD   r   messagerX   rY   errorr   r   r3   r4   r   )r5   r(   r'   esuppressr9   s         r:   clear_queuer     s     k"K{+E~~	KKMMM'#ORWR\R\#\] 	;//
**
!
!'
*"L
 '7FF)  	/$		1! /$A./ x
 	s5   3B 	C3#B21C.2CC.
CC..C3c                    t        |      }t        |      }t        |      }| j                  dk(  rf|j	                         }d}|D ]*  }	 t        ||j                  |j                         |dz  }, t        j                  | d|z         t        d|      S i t        j                  j                  |       ||t        |      d}t!        | d	|      S # t        $ r Y w xY w)
Nr'   r   r   rm   r   z'You have successfully requeued %d jobs!r   r(   r'   
total_jobszdjango_rq/requeue_all.html)r-   r   r   r   rG   r   rE   rn   r   r   r   r   r   r3   r4   rF   r   )r5   r(   r'   rI   rJ   r.   rr   r9   s           r:   requeue_allr     s     k"K{+E u-H~~&&( 	FFu/?/?EL\L\]
	 	gH5PQ	;//
**
!
!'
*"(m	L '7FF " s   
'C	C! C!c                    t        |      }t        |      }t        |      }| j                  dk(  rv|j	                         }t        j                  ||j                        }d}|D ]  }|s|j                          |dz  } t        j                  | d|z         t        d      S i t        j                  j                  |       ||t        |      d}t!        | d	|      S )
Nr   r   rf   r   r   z&You have successfully deleted %d jobs!rq_homer   z!django_rq/clear_failed_queue.html)r-   r   r   r   rG   r   
fetch_manyrE   r   r   r   r   r   r3   r4   rF   r   )	r5   r(   r'   rI   rJ   r)   r.   rQ   r9   s	            r:   delete_failed_jobsr     s     k"K{+E u-H~~&&(~~g%2B2BC 	C


	
 	gG%OP	""
**
!
!'
*"(m	L '>MMr;   c                    t        |      }t        |      }| j                  j                  d      xs t	        d|g      }| j
                  dk(  r| j                  j                  dd      rx| j                  j                  dd      r\i t        j                  j                  |       || j                  d   | j                  j                  d      ||d}t        | d	|      S t        |      S )
NHTTP_REFERERr   argsr   actionF_selected_action)r(   r   rJ   r'   next_urlzdjango_rq/confirm_action.html)r-   r   METAr0   r   r   r   r   r3   r4   getlistr   r   )r5   r(   r'   r   r9   s        r:   confirm_actionr      s     k"K{+E||/Y79K=3YH~~GLL$4$4Xu$E<<.6**))'2*!,,x0"<<//0BC$L '#BLQQHr;   c                    t        |      }t        |      }| j                  j                  d      xs t	        d|g      }| j
                  dk(  r| j                  j                  dd      r| j                  j                  dd      r| j                  j                  d      }| j                  d   dk(  r|D ]o  }t        j                  ||j                  |j                  	      }|j                  j                  |j                  d
|j                         |j                          q t        j                   | dt#        |      z         t+        |      S | j                  d   dk(  rV|D ]$  }t%        ||j                  |j                  	       & t        j                   | dt#        |      z         t+        |      S | j                  d   dk(  rot'        ||      \  }}t#        |      d
kD  r"t        j                   | dt#        |      z         t#        |      d
kD  r"t        j(                  | dt#        |      z         t+        |      S )Nr   r   r   r   r   FrJ   r   rm   r   z&You have successfully deleted %s jobs!requeuez(You have successfully requeued %d  jobs!stopz&You have successfully stopped %d jobs!z%d jobs failed to stop!)r-   r   r   r0   r   r   r   r   rq   rE   rn   r   r\   r   r   r   r   rF   r   r"   r   r   )	r5   r(   r'   r   rJ   rr   rQ   stoppedfailed_to_stops	            r:   actionsr     s    k"K{+E||
+Uwy}/UH~~GLL$4$4Xu$E<<Iu-ll**95G||H%1% !F))Fu7G7GTYTdTdeC$$))%))Q?JJL	!
 g'ORUV]R^'^_ H h'94% bF53C3CPUP`P`abg'QTWX_T`'`a H h'61*3E7*C'w<!#MM'+SVYZaVb+bc~&*NN7,ENH[,[\Hr;   c                    t        |      }t        |      }t        j                  ||j                  |j
                        }| j                  dk(  r:	 |j                  |       |j                         t        j                  k(  r2t        |j                  |j                        }|j                  |       n|j                         t        j                   k(  r2t#        |j                  |j                        }|j                  |       nR|j                         t        j$                  k(  r1t'        |j                  |j                        }|j                  |       t)        j*                  | d|j,                  z         t/        d||      S i t0        j2                  j5                  |       |||d}t7        | d|      S # t        $ r |j                  |       Y yw xY w)zEnqueue deferred jobsrm   r   z!You have successfully enqueued %sr   r   r   )r-   r   r   rq   rE   rn   r   _enqueue_jobrX   enqueue_job
get_statusr   DEFERREDr   rD   removeFINISHEDr   	SCHEDULEDr   r   r   r   r   r   r3   r4   r   )r5   r(   rr   r'   rQ   rI   r9   s          r:   r   r   8  s    k"K{+E
))Fu'7'7EDTDT
UC~~	# s# >>y111*5::u7G7GHHOOC ^^!3!33*5::u7G7GHHOOC ^^!4!44+EJJ8H8HIHOOC gBSVVKLf==
**
!
!'
*"	L '6EE1  	#c"	#s   G GGc                     t        |      }t        |      }t        ||      \  }}t        |      dk(  r&t	        j
                  | d|z         t        d||      S t	        j                  | d|z         t        d||      S )zStop started jobr   z You have successfully stopped %sr   zFailed to stop %s)r-   r   r"   rF   r   r   r   r   )r5   r(   rr   r'   r   _s         r:   stop_jobr   `  sz    
 k"K{+E5&)JGQ
7|qgAFJKf==w 3f <=f==r;   c                 :   t        |      }d}|j                         }t        | j                  j	                  dd            }g }|dkD  rt        t        ||z              }t        t        d|dz               }||dz
  z  }	|j                  d|	|      }
|
D ]  \  }}||_	        t        j                  |j                  d      |_        d|j                  v rd|j                  d    d	|_        n`d
|j                  v rKd|j                  d
    |_        d|j                  v r-|xj                  d|j                  d    z  c_        nd|_        |j                  |        ng }i t         j"                  j%                  |       |||||d}t'        | d|      S )Nr$   r%   r   r   T)
with_timesr8   lengthcron_stringzcron: ''intervalz
interval: repeatz	 repeat: unknown)	schedulerr)   r*   r%   r+   zdjango_rq/scheduler.html)r   r.   r-   r/   r0   r   r1   r2   r!   next_runr   originr(   metaschedulerp   r   r3   r4   r   )r5   scheduler_indexr   r6   r*   r%   r)   r7   r+   r8   
jobs_timesrQ   timer9   s                 r:   scheduler_jobsr   p  s    '7IN Hw{{vq)*DD!|X678	%9q=12
4!8,''4~'^
# 	ICCL(nnSZZ;CO(!(-)@(ACsxx'!+CHHZ,@+ABsxx'LLi0B/C$DDL(KK	 

**
!
!'
* L '5|DDr;   N)Emathr   typingr   r   r   django.contribr   r   %django.contrib.admin.views.decoratorsr	   django.httpr
   django.shortcutsr   r   django.urlsr   django.views.decorators.cacher   django.views.decorators.httpr   redis.exceptionsr   rqr   rq.exceptionsr   rq.jobr   r   rq.registryr   r   r   r   r   	rq.workerr   rq.worker_registrationr   queuesr   r   settingsr   utilsr    r!   r"   r)   rK   rM   rR   r^   r`   rk   rs   r   r   r   r   r   r   r   r   r   r   r    r;   r:   <module>r      s    # # * G  -  5 5 *  ( !   8 >   6 6 @  @< %I  %IP %G  %GP %J  %JP *P  *PZ C  C  J  J, )I  )IX /F  /Fd F  F* F  F& G  G> G  G: N  N6   *   > #F  #FL 
>   
> $E  $Er;   