
    @i                         d 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  ej                  e       G d d	ej                               Zy
)z-
Django admin integration for cronjob utils.
    )admin)format_html)reverse)timezone)	timedelta)CronExecutionc                        e Zd ZdZg dZg dZg dZg dZdddifd	dd
ifdddiffZd Z	de	_
        d Zde_
        d Zde_
         fdZd ZddgZd Zde_
        d Zde_
         xZS )CronExecutionAdminz(Admin interface for CronExecution model.)task_name_codeexecution_datestatus_displaystartedduration_displayretry_count
error_code)success	completed	task_coder   r   )	task_namer   messager   )
r   r   r   endedr   r   r   r   pidr   zTask Informationfields)r   r   r   zExecution Status)r   r   r   r   r   r   r   Resultsr   r   c                 :    |j                    d|j                   dS )zDisplay task name and code.z ())r   r   selfobjs     N/home/cursorai/projects/django-cronjob-utils/src/django_cronjob_utils/admin.pyr   z!CronExecutionAdmin.task_name_codeG   s    --3==/33    Taskc                 t    |j                   st        d      S |j                  rt        d      S t        d      S )z+Display execution status with color coding.u/   <span style="color: orange;">→ Running</span>u.   <span style="color: green;">✓ Success</span>u+   <span style="color: red;">✗ Failed</span>)r   r   r   r   s     r!   r   z!CronExecutionAdmin.status_displayL   sD    }}A  [[@  = r"   Statusc                 d    |j                   }|y|dk  r|ddS |dk  r	|dz  ddS |dz  ddS )zDisplay execution duration.-<   z.1fsi  mh)duration)r   r    r,   s      r!   r   z#CronExecutionAdmin.duration_display\   sY    <<b=s^1%%_mC(**oc*!,,r"   Durationc                 >    t         |   |      j                         S )zOptimize queryset.)superget_querysetselect_related)r   request	__class__s     r!   r0   zCronExecutionAdmin.get_querysetj   s    w#G,;;==r"   c                      y)z-Disable manual creation of execution records.F )r   r2   s     r!   has_add_permissionz%CronExecutionAdmin.has_add_permissionn   s    r"   mark_as_successmark_as_failedc                     d}|D ]'  }|j                   r|j                  dd       |dz  }) | j                  || d       y)z'Mark selected executions as successful.r   TzManually marked as success)r   r      z# execution(s) marked as successful.N)r   mark_completedmessage_userr   r2   querysetcount	executions        r!   r7   z"CronExecutionAdmin.mark_as_successt   sU    !I&&((?[(\
 "
 	g89	
r"   zMark selected as successfulc                     d}|D ]'  }|j                   r|j                  dd       |dz  }) | j                  || d       y)z#Mark selected executions as failed.r   zManually marked as failedMANUALr   r:   z execution(s) marked as failed.N)r   mark_failedr<   r=   s        r!   r8   z!CronExecutionAdmin.mark_as_failed   sV    !I&&%%.IV^%_
 "
 	g45	
r"   zMark selected as failed)__name__
__module____qualname____doc__list_displaylist_filtersearch_fieldsreadonly_fields	fieldsetsr   short_descriptionr   r   r0   r6   actionsr7   r8   __classcell__)r3   s   @r!   r
   r
      s    2LKMO 
B
 	 
 

 
	 
/
 	I(4 (.N$ (0N$- *4&> !"23G
 )FO%
 (AN$$r"   r
   N)rG   django.contribr   django.utils.htmlr   django.urlsr   django.utilsr   datetimer   django_cronjob_utils.modelsr   register
ModelAdminr
   r5   r"   r!   <module>rX      sP    ! )  !  5 @A)) @A @Ar"   