U
    8ÄT_(  ã                   @   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mZ d
ZdZdZeedƒfeedƒfeedƒff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é   é   é   ZAdditionZChangeZ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!   ú?/tmp/pip-unpacked-wheel-dv63caxw/django/contrib/admin/models.pyÚ
log_action   s    


úzLogEntryManager.log_actionN)r   )Ú__name__Ú
__module__Ú__qualname__Z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)r+   ÚblankÚnullz	object id)r,   r-   zobject reprr   )Ú
max_lengthzaction flag)Úchoiceszchange message)r,   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 entriesZdjango_admin_logz-action_timeN)r$   r%   r&   Ú_r+   Zverbose_name_pluralZdb_tableZorderingr!   r!   r!   r"   ÚMetaA   s   r1   c                 C   s
   t | jƒS ©N)r   Úaction_time©r    r!   r!   r"   Ú__repr__G   s    zLogEntry.__repr__c                 C   s\   |   ¡ rtdƒd| ji S |  ¡ r:tdƒ| j|  ¡ dœ S |  ¡ rTtdƒd| ji S tdƒS )Nu   Added â€œ%(object)sâ€�.Úobjectu(   Changed â€œ%(object)sâ€� â€” %(changes)s)r6   Úchangesu   Deleted â€œ%(object)s.â€�zLogEntry Object)Úis_additionr
   r   Ú	is_changeÚget_change_messageÚis_deletionr4   r!   r!   r"   Ú__str__J   s    þzLogEntry.__str__c                 C   s
   | j tkS r2   )r   ÚADDITIONr4   r!   r!   r"   r8   W   s    zLogEntry.is_additionc                 C   s
   | j tkS r2   )r   ÚCHANGEr4   r!   r!   r"   r9   Z   s    zLogEntry.is_changec                 C   s
   | j tkS r2   )r   ÚDELETIONr4   r!   r!   r"   r;   ]   s    zLogEntry.is_deletionc                 C   s   | j �r–| j d dk�r–zt | j ¡}W n tjk
rD   | j  Y S X g }|D �]"}d|kr¨|d r˜t|d d ƒ|d d< | tdƒjf |d Ž¡ n| tdƒ¡ qNd|k�r8tdd	„ |d d
 D ƒtdƒƒ|d d
< d|d k�rt|d d ƒ|d d< | tdƒjf |d Ž¡ n| tdƒjf |d Ž¡ qNd|krNt|d d ƒ|d d< | tdƒjf |d Ž¡ qNd dd„ |D ƒ¡}|�p”tdƒS | j S d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>u   s     z/LogEntry.get_change_message.<locals>.<listcomp>ÚfieldsÚandu+   Changed {fields} for {name} â€œ{object}â€�.zChanged {fields}.Zdeletedu   Deleted {name} â€œ{object}â€�.ú c                 s   s&   | ]}|d    ¡ |dd…  V  qdS )r   r   N)Úupper)rD   Úmsgr!   r!   r"   Ú	<genexpr>ƒ   s     z.LogEntry.get_change_message.<locals>.<genexpr>zNo fields changed.N)	r   r   ÚloadsÚJSONDecodeErrorr
   ÚappendÚformatr	   Újoin)r    r   ÚmessagesZsub_messager!   r!   r"   r:   `   s:    

 ÿÿzLogEntry.get_change_messagec                 C   s   | j j| jd�S )z7Return the edited object represented by this log entry.)Úpk)Úcontent_typeZget_object_for_this_typer   r4   r!   r!   r"   Úget_edited_objectˆ   s    zLogEntry.get_edited_objectc                 C   sP   | j rL| jrLd| j j| j jf }zt|t| jƒfd�W S  tk
rJ   Y nX dS )zX
        Return the admin URL to edit the object represented by this log entry.
        zadmin:%s_%s_change)ÚargsN)rT   r   Z	app_labelr   r   r   r   )r    Zurl_namer!   r!   r"   Úget_admin_urlŒ   s    zLogEntry.get_admin_urlN)$r$   r%   r&   r   ZDateTimeFieldr0   r   Únowr3   Z
ForeignKeyr   ZAUTH_USER_MODELZCASCADEr*   r   ZSET_NULLrT   Z	TextFieldr   Z	CharFieldr   ZPositiveSmallIntegerFieldÚACTION_FLAG_CHOICESr   r   r   r   r1   r5   r<   r8   r9   r;   r:   rU   rW   r!   r!   r!   r"   r'   '   s>   ýý ü(r'   )r   Zdjango.confr   Zdjango.contrib.admin.utilsr   Z"django.contrib.contenttypes.modelsr   Z	django.dbr   Zdjango.urlsr   r   Zdjango.utilsr   Zdjango.utils.textr	   Zdjango.utils.translationr
   r   r0   r=   r>   r?   rY   ÚManagerr   ZModelr'   r!   r!   r!   r"   Ú<module>   s"   


ý