
    Wwg                         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mZ d dlmZ d dlmZ d dlmZ d dlmZ dZ  G d d      Z! G d d      Z"y)    )urls)settings)admin)FieldDoesNotExist)pretty_name)HttpRequest)NoReverseMatch)format_htmlformat_html_join)	mark_safe)is_aware	localtime)gettext_lazy)LogEntry)auditlog)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 Zd ZdefdZde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     F/var/www/horilla/myenv/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%sz<a href="{}">{}</a>system)
actorr   AUTH_USER_MODELsplitlowerurlresolversreverse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_typer0   r1   	object_id	object_pkr-   r.   r
   object_reprr	   )r   r   r0   r1   r2   r'   r3   s          r   resource_urlzLogEntryAdminMixin.resource_url+   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)actionr   ActionDELETEACCESSchanges_dictlenjoinkeysMAXrfind)r   r   changesr@   fieldsis         r   	msg_shortzLogEntryAdminMixin.msg_short9   s    ::(//00(//2H2HII""g,!#B7<<>*v;S!S)ABQZ%'F CL!V#<<<r   c                    |j                   }i }i }|j                         D ]/  \  }}t        |t              r|d   dk(  sJ d       |||<   +|||<   1 g }|r|j	                  d       |j	                  | j                  dddd             t        t        |j                               d	      D ]F  \  }\  }}|| j                  ||      g|d
k(  rddgn|z   }	|j	                   | j                  |	        H |j	                  d       |r|j	                  d       |j	                  | j                  dddd             t        t        |j                               d	      D ]a  \  }\  }}t        t        d      d|d   D 	cg c]  }	|	f c}	      }
|j	                  t        d|| j                  ||      |d   |
             c |j	                  d       t        dj                  |            S c c}	w )Ntypem2mz<Only m2m operations are expected to produce dict changes nowz<table>#FieldFromTor?   passwordz***z</table>RelationshiprC   Objectsz<br>z{}objectsz5<tr><td>{}</td><td>{}</td><td>{}</td><td>{}</td></tr>	operationr>   )rF   items
isinstancedictappend_format_header	enumeratesortedfield_verbose_name_format_liner   r   r
   rH   )r   r   rL   atom_changesm2m_changesfieldchangemsgrN   valuechange_htmls              r   ri   zLogEntryAdminMixin.msgE   s   ""$]]_ 	-ME6&$'6Ne+RQR+%+E"&,U#	- JJy!JJt**3FG&/|7I7I7K0La&P 6"?E6D33C?@&+z&9UENv 

,4,,e45	6
 JJz"JJy!JJt**3)TU&/{7H7H7J0KQ&O "?E6.f%+1)+<=%eX= 

O//U;{+#" JJz"&& >s   
G0zCorrelation IDc                 t    |j                   }|r*| j                  d|      }t        d|| j                  |      S y )Ncidz<a href="{}" title="{}">{}</a>)rm   _add_query_parameterr
   	CID_TITLE)r   r   rm   urls       r   cid_urlzLogEntryAdminMixin.cid_urly   s?    gg++E37C0#t~~s  r   c           	      V    t        dj                  ddt        |      z  dg      g| S )Nr>   <tr>z<th>{}</th></tr>r
   rH   rG   )r   labelss     r   r`   z!LogEntryAdminMixin._format_header   3    GGV]S[8'BC
FL
 	
r   c           	      V    t        dj                  ddt        |      z  dg      g| S )Nr>   rs   z<td>{}</td>rt   ru   )r   valuess     r   rd   zLogEntryAdminMixin._format_line   rw   r   
field_namec                 z   |j                   j                         }||S 	 t        j                  |j                  j
                        }|d   j                  |      }|r|S 	 	 |j                  j                  |      }t        t        |d|            S # t        $ r Y =w xY w# t        $ r t        |      cY S w xY w)Nmapping_fieldsverbose_name)r7   model_classr   get_model_fields_metar1   getKeyError	get_fieldr   getattrr   )r   r   rz   r1   model_fieldsmapping_field_namerg   s          r   rc   z%LogEntryAdminMixin.field_verbose_name   s      ,,.=	#44U[[5F5FGL!-.>!?!C!CJ!O!)) "
	+KK))*5EwunjIJJ  		 ! 	+z**	+s$   A B #0B# 	B B #B:9B:keyrj   c                 \    | j                   j                         }d|v rdnd}| | | d| S )N?&=)r   get_full_path)r   r   rj   	full_path	delimiters        r   rn   z'LogEntryAdminMixin._add_query_parameter   s;    LL..0	)+C	YKuAeW55r   N)__name__
__module____qualname__r   __annotations__r$   ro   r   displayr   r4   r;   rO   ri   rq   r`   rd   strrc   rn    r   r   r   r      s
   GHIU]]q|, -
 U]]qy)
 *
 U]]q}- . U]]q|,	= -	= U]]q|,1' -1'f U]]/0 1



+# +$6 6C 6r   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   r   s       r   r   z!LogAccessMixin.render_to_response   s6    oocmmc2w)'E_EEr   )r   r   r   r   __classcell__)r   s   @r   r   r      s    F Fr   r   N)#djangor   r-   django.confr   django.contribr   django.core.exceptionsr   django.forms.utilsr   django.httpr   django.urls.exceptionsr	   django.utils.htmlr
   r   django.utils.safestringr   django.utils.timezoner   r   django.utils.translationr   r$   auditlog.modelsr   auditlog.registryr   auditlog.signalsr   rJ   r   r   r   r   r   <module>r      sM    '     4 * # 1 ; - 5 6 $ & %N6 N6bF Fr   