U
    de                     @   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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-7vj2equ7/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#   MetaN   s   r2   c                 C   s
   t | jS N)r    action_timer!   r"   r"   r#   __repr__T   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)r7   changesu   Deleted “%(object)s.”zLogEntry Object)is_additionr   r   	is_changeget_change_messageis_deletionr5   r"   r"   r#   __str__W   s    zLogEntry.__str__c                 C   s
   | j tkS r3   )r   ADDITIONr5   r"   r"   r#   r9   d   s    zLogEntry.is_additionc                 C   s
   | j tkS r3   )r   CHANGEr5   r"   r"   r#   r:   g   s    zLogEntry.is_changec                 C   s
   | j tkS r3   )r   DELETIONr5   r"   r"   r#   r<   j   s    zLogEntry.is_deletionc                 C   s  | j r| j d dkrzt| j }W n tjk
rD   | j  Y S X g }|D ]"}d|kr|d rt|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 }|pt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>   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)rE   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;   m   sf    









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   r5   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)rU   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DateTimeFieldr1   r   nowr4   Z
ForeignKeyr   ZAUTH_USER_MODELZCASCADEr+   r   ZSET_NULLrU   Z	TextFieldr   Z	CharFieldr   ZPositiveSmallIntegerFieldACTION_FLAG_CHOICESr   r   r   r   r2   r6   r=   r9   r:   r<   r;   rV   rX   r"   r"   r"   r#   r(   0   sD    @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   r1   r>   r?   r@   rZ   Managerr   ZModelr(   r"   r"   r"   r#   <module>   s$   


