3
(h                 @   s   d dl mZ 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mZ d d
lmZ d dlmZmZ dZdZdZG dd de
jZeG dd de
jZdS )    )unicode_literalsN)settings)quote)ContentType)models)NoReverseMatchreverse)timezone)python_2_unicode_compatible
smart_text)get_text_list)ugettextugettext_lazy         c               @   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 d S )N   )user_idcontent_type_id	object_idobject_repraction_flagchange_message)
isinstancelistjsondumpsmodelobjectscreater   )selfr   r   r   r   r   r    r#   ?/tmp/pip-install-q3hcpn_q/Django/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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 flagz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)r1   )r&   r'   r(   _r-   Zverbose_name_pluralZdb_tableZorderingr#   r#   r#   r$   Meta?   s   r3   c             C   s
   t | jS )N)r   action_time)r"   r#   r#   r$   __repr__E   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 )NzAdded "%(object)s".objectz"Changed "%(object)s" - %(changes)s)r6   ZchangeszDeleted "%(object)s."zLogEntry Object)is_additionr   r   	is_changeget_change_messageis_deletion)r"   r#   r#   r$   __str__H   s    zLogEntry.__str__c             C   s
   | j tkS )N)r   ADDITION)r"   r#   r#   r$   r7   U   s    zLogEntry.is_additionc             C   s
   | j tkS )N)r   CHANGE)r"   r#   r#   r$   r8   X   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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 qJd|kr*t|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  qJd|krJt|d d |d d< |jtdjf |d  qJW 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namezAdded {name} "{object}".zAdded.changedfieldsandz'Changed {fields} for {name} "{object}".zChanged {fields}.ZdeletedzDeleted {name} "{object}". c             s   s&   | ]}|d  j  |dd  V  qdS )r   r   N)upper).0msgr#   r#   r$   	<genexpr>   s    z.LogEntry.get_change_message.<locals>.<genexpr>zNo fields changed.N)	r   r   loads
ValueErrorr   appendformatr   join)r"   r   messagesZsub_messager#   r#   r$   r9   ^   s4    
zLogEntry.get_change_messagec             C   s   | j j| jdS )z7Returns 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 )zY
        Returns the admin URL to edit the object represented by this log entry.
        zadmin:%s_%s_change)argsN)rQ   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DateTimeFieldr2   r	   nowr4   Z
ForeignKeyr   ZAUTH_USER_MODELZCASCADEr,   r   ZSET_NULLrQ   Z	TextFieldr   Z	CharFieldr   ZPositiveSmallIntegerFieldr   r   r   r    r3   r5   r;   r7   r8   r:   r9   rR   rT   r#   r#   r#   r$   r)   $   s6   
(r)   ) 
__future__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.encodingr
   r   Zdjango.utils.textr   Zdjango.utils.translationr   r   r2   r<   r=   r>   Managerr   ZModelr)   r#   r#   r#   r$   <module>   s    