3
u^)                 @   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Addition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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"   ?/usr/lib/python3.6/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)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ZdS )zLogEntry.Metaz	log entryzlog entriesZdjango_admin_log-action_timeN)r2   )r%   r&   r'   _r-   verbose_name_pluraldb_tableorderingr"   r"   r"   r#   MetaA   s   r7   c             C   s
   t | jS )N)r    action_time)r!   r"   r"   r#   __repr__G   s    zLogEntry.__repr__c             C   s\   | j  rtdd| ji S | j r:td| j| j d S | j rTtdd| ji S tdS )Nu   Added “%(object)s”.objectu(   Changed “%(object)s” — %(changes)s)r:   Zchangesu   Deleted “%(object)s.”zLogEntry Object)is_additionr
   r   	is_changeget_change_messageis_deletion)r!   r"   r"   r#   __str__J   s    zLogEntry.__str__c             C   s
   | j tkS )N)r   ADDITION)r!   r"   r"   r#   r;   W   s    zLogEntry.is_additionc             C   s
   | j tkS )N)r   CHANGE)r!   r"   r"   r#   r<   Z   s    zLogEntry.is_changec             C   s
   | j tkS )N)r   DELETION)r!   r"   r"   r#   r>   ]   s    zLogEntry.is_deletionc             C   s  | j o| j d dkrytj| j }W n tjk
r>   | j S X g }x,|D ]"}d|kr|d rt|d d |d d< |jtdjf |d  n|jtd qLd|kr6tdd	 |d d
 D td|d d
< d|d krt|d d |d d< |jtdjf |d  n|jtdjf |d  qLd|krLt|d d |d d< |jtdjf |d  qLW dj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>u   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  j  |dd  V  qdS )r   r   N)upper)rG   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=   `   s4    
&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   )r!   r"   r"   r#   get_edited_object   s    zLogEntry.get_edited_objectc             C   sN   | j rJ| jrJd| j j| j jf }yt|t| jfdS  tk
rH   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)rX   r   	app_labelr   r   r   r   )r!   url_namer"   r"   r#   get_admin_url   s    zLogEntry.get_admin_urlN)$r%   r&   r'   r   DateTimeFieldr3   r   nowr8   
ForeignKeyr   AUTH_USER_MODELCASCADEr,   r   SET_NULLrX   	TextFieldr   	CharFieldr   PositiveSmallIntegerFieldACTION_FLAG_CHOICESr   r   r   r   r7   r9   r?   r;   r<   r>   r=   rY   r]   r"   r"   r"   r#   r)   '   s6   
(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   r3   r@   rA   rB   rg   Managerr   Modelr)   r"   r"   r"   r#   <module>   s    

