
    Feih                     *   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 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mZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$ d dl%m&Z&  e!       Z'dZ( G d d      Z) G d d      Z* G d d      Z+y)    )unquote)urls)settings)admin)PAGE_VAR)PermissionDenied)HttpRequest)TemplateResponse)pathreverse)NoReverseMatch)format_html)capfirst)is_aware	localtime)gettext_lazy)get_logentry_model)get_field_verbose_namerender_logentry_changes_html)accessedK   c                      e Zd ZU eed<    ed      Z ej                   ed            d        Z	 ej                   ed            d        Z
 ej                   ed            d	        Z ej                   ed
            d        Z ej                   ed
            d        Z ej                  d      d        ZdedefdZdefdZy)LogEntryAdminMixinrequestz3Click to filter by records with this correlation idCreateddescriptionc                 n    t        |j                        rt        |j                        S |j                  S N)r   	timestampr   selfobjs     M/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/auditlog/mixins.pycreatedzLogEntryAdminMixin.created   s'    CMM"S]]++}}    Userc                 R   |j                   r}t        j                  j                  d      \  }}d| d|j	                          d}	 t        j                  ||j                   j                  g      }t        d||j                         S y# t        $ r d|j                   z  cY S w xY w)	N.admin:__changeargsz%s<a href="{}">{}</a>system)
actorr   AUTH_USER_MODELsplitlowerurlresolversr   pkr   r   )r"   r#   	app_labelmodelviewnamelinks         r$   user_urlzLogEntryAdminMixin.user_url$   s    99'77==cBIu	{!EKKM?'BH*#++HCIILL>J 4dCIIFF	 " *syy))*s   ,B B&%B&Resourcec                 b   |j                   j                  |j                   j                  }}d| d| d}	 |j                  |j                  gn|j                  g}t        j                  ||      }t        d||j                   |j                        S # t        $ r |j                  cY S w xY w)Nr*   r+   r,   r-   z<a href="{}">{} - {}</a>)
content_typer7   r8   	object_id	object_pkr5   r   r   object_reprr   )r"   r#   r7   r8   r9   r.   r:   s          r$   resource_urlzLogEntryAdminMixin.resource_url1   s    ++55s7G7G7M7M5	I;awg6	&)mm&;CMM?#--D''t<D *D#2B2BCOO   	#??"	#s   =B B.-B.Changesc                    |j                   t        j                  j                  t        j                  j                  fv ry|j
                  }t        |      dk(  rdnd}dj                  |j                               }t        |      t        kD  r|j                  ddt              }|d | dz   }dt        |      ||fz  S )	N    sz,  r   z ..z%d change%s: %s)actionLogEntryActionDELETEACCESSchanges_dictlenjoinkeysMAXrfind)r"   r#   changesrG   fieldsis         r$   	msg_shortzLogEntryAdminMixin.msg_short?   s    ::(//00(//2H2HII""g,!#B7<<>*v;S!S)ABQZ%'F CL!V#<<<r&   c                     t        |      S r   )r   r!   s     r$   msgzLogEntryAdminMixin.msgK   s    +C00r&   zCorrelation IDc                 t    |j                   }|r*| j                  d|      }t        d|| j                  |      S y )Ncidz<a href="{}" title="{}">{}</a>)r[   _add_query_parameterr   	CID_TITLE)r"   r#   r[   urls       r$   cid_urlzLogEntryAdminMixin.cid_urlO   s?    gg++E37C0#t~~s  r&   keyvaluec                 \    | j                   j                         }d|v rdnd}| | | d| S )N?&=)r   get_full_path)r"   r`   ra   	full_path	delimiters        r$   r\   z'LogEntryAdminMixin._add_query_parameterX   s;    LL..0	)+C	YKuAeW55r&   
field_namec                     t        ||      S )z
        Use `auditlog.render.get_field_verbose_name` instead.
        This method is kept for backward compatibility.
        )r   )r"   r#   ri   s      r$   field_verbose_namez%LogEntryAdminMixin.field_verbose_name^   s    
 &c:66r&   N)__name__
__module____qualname__r	   __annotations__r+   r]   r   displayr%   r;   rB   rW   rY   r_   strr\   rk    r&   r$   r   r      s    GHIU]]q|, -
 U]]qy)
 *
 U]]q}- . U]]q|,	= -	= U]]q|,1 -1 U]]/0 16 6C 67# 7r&   r   c                        e Zd Z fdZ xZS )LogAccessMixinc                     | j                         }t        j                  |j                  |       t	        |   |fi |S )N)instance)
get_objectr   send	__class__superrender_to_response)r"   contextresponse_kwargsr#   ry   s       r$   r{   z!LogAccessMixin.render_to_responseg   s6    oocmmc2w)'E_EEr&   )rl   rm   rn   r{   __classcell__ry   s   @r$   rt   rt   f   s    F Fr&   rt   c                   ~     e Zd ZdZdZdZdZ fdZ fdZddZ	 e
j                   ed      	      d
        Z xZS )AuditlogHistoryAdminMixinz9
    Add an audit log history view to a model admin.
    zauditlog/object_history.htmlF
   c                 z    t        t        | 	  |            }| j                  rd|vr|j	                  d       |S )Nauditlog_link)listrz   get_list_displayshow_auditlog_history_linkappend)r"   r   list_displayry   s      r$   r   z*AuditlogHistoryAdminMixin.get_list_displayv   s;    EG4W=>**l/R0r&   c                     | j                   j                  }|j                  |j                  f}t	        d| j
                  j                  | j                        d|z        g}|t        | %         z   S )Nz<path:object_id>/auditlog/z%s_%s_auditlog)name)
r8   _metar7   
model_namer   
admin_site
admin_viewauditlog_history_viewrz   get_urls)r"   optsinfomy_urlsry   s       r$   r   z"AuditlogHistoryAdminMixin.get_urls}   sk    zz~~t.,**4+E+EF%,
 )+++r&   c           
         | j                  |t        |            }| j                  ||      st        t        j
                  j                  |      j                  d      j                  d      }| j                  ||| j                        }|j                  j                  t        d      }|j                  |      }|j                  |j                         }	i | j"                  j%                  |      t'        d      |z  t)        t+        | j,                  j.                  j0                              |	t        |j2                  | j                  kD  || j,                  j.                  |d|xs i }
t5        || j6                  |
      S )Nr1   z
-timestamprF   zAudit log: %s)titlemodule_name
page_rangepage_varpagination_requiredobjectr   log_entries)rw   r   has_view_permissionr   rJ   objectsget_for_objectselect_relatedorder_byget_paginatorauditlog_history_per_pageGETgetr   get_pageget_elided_page_rangenumberr   each_contextr+   rq   r   r8   r   verbose_name_pluralcountr
   auditlog_history_template)r"   r   r?   extra_contextr#   r   	paginatorpage_numberpage_objr   r|   s              r$   r   z/AuditlogHistoryAdminMixin.auditlog_history_view   sS   oogwy'9:''5"" ++C0^G$Xl# 	 &&[$"@"@
	 kkooh2%%k244X__E

oo**73
'#-x

(8(8(L(LMN$ #,??T5S5S#SJJ$$#
 "
  )G)GQQr&   z	Audit logr   c                     | j                   j                  }t        d|j                   d|j                   d|j
                  g      }t        d|t        d            S )Nr*   r+   	_auditlogr-   r/   View)r8   r   r   r7   r   r6   r   r+   )r"   r#   r   r^   s       r$   r   z'AuditlogHistoryAdminMixin.auditlog_link   sV    zzT^^$Adoo%6i@&&

 0#qyAAr&   r   )rl   rm   rn   __doc__r   r   r   r   r   r   r   rp   r+   r   r~   r   s   @r$   r   r   m   sR     !?!& ",RB U]]q~.B /Br&   r   N),urllib.parser   djangor   r5   django.confr   django.contribr   django.contrib.admin.views.mainr   django.core.exceptionsr   django.httpr	   django.template.responser
   django.urlsr   r   django.urls.exceptionsr   django.utils.htmlr   django.utils.textr   django.utils.timezoner   r   django.utils.translationr   r+   auditlogr   auditlog.renderr   r   auditlog.signalsr   rJ   rR   r   rt   r   rr   r&   r$   <module>r      sl      '     4 3 # 5 % 1 ) & 5 6 ' P %I7 I7XF FFB FBr&   