
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 Gd d   d e j  Z Gd 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   sb   t  | t  r t j |  } |  j j j d | d | d t |  d | 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createstr)selfr   r   r   r   r   r    r!   =/tmp/pip-build-8lau8j11/django/django/contrib/admin/models.py
log_action   s    zLogEntryManager.log_actionN)__name__
__module____qualname__Zuse_in_migrationsr#   r!   r!   r!   r"   r      s   r   c            	   @   ss  e  Z d  Z e j e d  d e j d d Z e j	 e
 j e j d e d  Z e j	 e e j d e d  d d	 d
 d	 Z e j e d  d d	 d
 d	 Z e j e d  d d Z e j e d  d e Z e j e d  d d	 Z e   Z Gd 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 timedefaulteditableFverbose_nameuserzcontent typeZblankTnullz	object idzobject repr
max_lengthr   zaction flagchoiceszchange messagec               @   s4   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)r/   )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   |  j    r# t d  d |  j i S|  j   rR t d  d |  j d |  j   i S|  j   ru t d  d |  j i St d  S)Nu   Added “%(object)s”.objectu(   Changed “%(object)s” — %(changes)sZ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"   r5   W   s    zLogEntry.is_additionc             C   s   |  j  t k S)N)r   CHANGE)r    r!   r!   r"   r6   Z   s    zLogEntry.is_changec             C   s   |  j  t k S)N)r   DELETION)r    r!   r!   r"   r8   ]   s    zLogEntry.is_deletionc             C   s  |  j  r|  j  d d k ry t j |  j   } Wn t j k
 rP |  j  SYn Xg  } xq| D]i} d | k r | d r t | d d  | d d <| j t d  j | d    q| j t d   q^ d | k rt d d	   | d d
 D t d   | d d
 <d | d k r\t | d d  | d d <| j t d  j | d    q| j t d  j | d    q^ d | k r^ t | d d  | d d <| j t d  j | d    q^ Wd j d d   | D  } | pt d  S|  j  Sd 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 Sr!   )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  j    | d d  Vq d S)r   r   N)upper)rA   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"   r7   `   s4    
#/#$zLogEntry.get_change_messagec             C   s   |  j  j d |  j  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   sg   |  j  rc |  j rc d |  j  j |  j  j f } y  t | d t |  j  f SWn t k
 rb Yn Xd S)zX
        Return 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DateTimeFieldr0   r   nowr2   Z
ForeignKeyr   ZAUTH_USER_MODELZCASCADEr+   r   ZSET_NULLrQ   Z	TextFieldr   Z	CharFieldr   ZPositiveSmallIntegerFieldACTION_FLAG_CHOICESr   r   r   r   r1   r3   r9   r5   r6   r8   r7   rR   rT   r!   r!   r!   r"   r'   '   s6   				!	(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<   rV   Managerr   ZModelr'   r!   r!   r!   r"   <module>   s    