o
    ÔèFhe  ã                   @   sÎ   d dl 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 dZdZdZeedƒfeedƒfeedƒfgZG dd„ dejƒZG dd„ dejƒZdS )é    N)Úsettings)Úquote)ÚContentType)Úmodels)ÚNoReverseMatchÚreverse)Útimezone)Úget_text_list©Úgettext)Úgettext_lazyé   é   é   ÚAdditionÚChangeÚDeletionc                   @   s   e Zd ZdZ	ddd„ZdS )ÚLogEntryManagerTÚ c                 C   s:   t |tƒr
t |¡}| jjj||t|ƒ|d d… ||d�S )NéÈ   )Úuser_idÚcontent_type_idÚ	object_idÚobject_reprÚaction_flagÚchange_message)Ú
isinstanceÚlistÚjsonÚdumpsÚmodelÚobjectsÚcreateÚstr)Úselfr   r   r   r   r   r   © r%   úT/var/www/html/loop/nvenv/lib/python3.10/site-packages/django/contrib/admin/models.pyÚ
log_action   s   
	

úzLogEntryManager.log_actionN)r   )Ú__name__Ú
__module__Ú__qualname__Úuse_in_migrationsr'   r%   r%   r%   r&   r      s    	ùr   c                   @   sò   e Zd Zejedƒejdd�Zej	e
jejedƒd�Zej	eejedƒddd�Zejed	ƒddd
�Zejedƒdd�Zejedƒed�Zejedƒdd�Zeƒ ZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!d d!„ Z"d"d#„ Z#d$S )%ÚLogEntryzaction timeF)ÚdefaultÚeditableÚuser)Úverbose_namezcontent typeT)r0   ÚblankÚnullz	object id)r1   r2   zobject reprr   )Ú
max_lengthzaction flag)Úchoiceszchange message)r1   c                   @   s&   e Zd ZedƒZedƒZdZdgZdS )zLogEntry.Metaz	log entryzlog entriesÚdjango_admin_logz-action_timeN)r(   r)   r*   Ú_r0   Úverbose_name_pluralÚdb_tableÚorderingr%   r%   r%   r&   ÚMetaN   s
    
r:   c                 C   s
   t | jƒS ©N)r#   Úaction_time©r$   r%   r%   r&   Ú__repr__T   ó   
zLogEntry.__repr__c                 C   s\   |   ¡ rtdƒd| ji S |  ¡ rtdƒ| j|  ¡ dœ S |  ¡ r*tdƒd| ji S tdƒS )Nu   Added â€œ%(object)sâ€�.Úobjectu(   Changed â€œ%(object)sâ€� â€” %(changes)s)r@   Úchangesu   Deleted â€œ%(object)s.â€�zLogEntry Object)Úis_additionr   r   Ú	is_changeÚget_change_messageÚis_deletionr=   r%   r%   r&   Ú__str__W   s   þzLogEntry.__str__c                 C   ó
   | j tkS r;   )r   ÚADDITIONr=   r%   r%   r&   rB   d   r?   zLogEntry.is_additionc                 C   rG   r;   )r   ÚCHANGEr=   r%   r%   r&   rC   g   r?   zLogEntry.is_changec                 C   rG   r;   )r   ÚDELETIONr=   r%   r%   r&   rE   j   r?   zLogEntry.is_deletionc                 C   sž  | j rÌ| j d dkrÌzt | j ¡}W n tjy   | j  Y S w g }|D ]—}d|v rR|d rJt|d d ƒ|d d< | tdƒjdi |d ¤Ž¡ q$| tdƒ¡ q$d|v rœtdd	„ |d d
 D ƒtdƒƒ|d d
< d|d v rŒt|d d ƒ|d d< | tdƒjdi |d ¤Ž¡ q$| tdƒjdi |d ¤Ž¡ q$d|v r»t|d d ƒ|d d< | tdƒjdi |d ¤Ž¡ q$d dd„ |D ƒ¡}|pËtdƒS | j S )z{
        If self.change_message is a JSON structure, interpret it as a change
        string, properly translated.
        r   ú[ÚaddedÚnameu   Added {name} â€œ{object}â€�.zAdded.Úchangedc                 S   s   g | ]}t |ƒ‘qS r%   r
   )Ú.0Ú
field_namer%   r%   r&   Ú
<listcomp>ˆ   s    ÿÿz/LogEntry.get_change_message.<locals>.<listcomp>ÚfieldsÚandu+   Changed {fields} for {name} â€œ{object}â€�.zChanged {fields}.Údeletedu   Deleted {name} â€œ{object}â€�.ú c                 s   s(   � | ]}|d    ¡ |dd…  V  qdS )r   r   N)Úupper)rO   Úmsgr%   r%   r&   Ú	<genexpr>¨   s   €& z.LogEntry.get_change_message.<locals>.<genexpr>zNo fields changed.Nr%   )	r   r   ÚloadsÚJSONDecodeErrorr   ÚappendÚformatr	   Újoin)r$   r   ÚmessagesÚsub_messager%   r%   r&   rD   m   sj   
ÿ
ÿÿÿ
þû
ÿÿÿÿÿ
ÿÿÿ€zLogEntry.get_change_messagec                 C   s   | j j| jd�S )z7Return the edited object represented by this log entry.)Úpk)Úcontent_typeÚget_object_for_this_typer   r=   r%   r%   r&   Úget_edited_object­   s   zLogEntry.get_edited_objectc                 C   sP   | j r&| jr&d| j j| j jf }zt|t| jƒfd�W S  ty%   Y dS w dS )zX
        Return the admin URL to edit the object represented by this log entry.
        zadmin:%s_%s_change)ÚargsN)ra   r   Ú	app_labelr    r   r   r   )r$   Úurl_namer%   r%   r&   Úget_admin_url±   s   þþzLogEntry.get_admin_urlN)$r(   r)   r*   r   ÚDateTimeFieldr6   r   Únowr<   Ú
ForeignKeyr   ÚAUTH_USER_MODELÚCASCADEr/   r   ÚSET_NULLra   Ú	TextFieldr   Ú	CharFieldr   ÚPositiveSmallIntegerFieldÚACTION_FLAG_CHOICESr   r   r   r!   r:   r>   rF   rB   rC   rE   rD   rc   rg   r%   r%   r%   r&   r,   0   sD    ýýûÿ@r,   )r   Údjango.confr   Údjango.contrib.admin.utilsr   Ú"django.contrib.contenttypes.modelsr   Ú	django.dbr   Údjango.urlsr   r   Údjango.utilsr   Údjango.utils.textr	   Údjango.utils.translationr   r   r6   rH   rI   rJ   rq   ÚManagerr   ÚModelr,   r%   r%   r%   r&   Ú<module>   s&    


ý