o
    [h4!                     @   s   d dl 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 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g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)RemovedInDjango60Warning)get_text_listgettext)gettext_lazy         ZAdditionZChangeZDeletionc                   @   s.   e Zd ZdZ	d
ddZ	d
ddddZd	S )LogEntryManagerT c                 C   sJ   t jdtdd t|trt|}| jjj	||t
||d d ||dS )NzFLogEntryManager.log_action() is deprecated. Use log_actions() instead.r   
stacklevel   user_idcontent_type_id	object_idobject_repraction_flagchange_message)warningswarnr	   
isinstancelistjsondumpsmodelobjectscreatestr)selfr   r   r   r   r   r    r(   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/django/contrib/admin/models.py
log_action   s   	


zLogEntryManager.log_actionF)single_objectc                   s   t jtjkrtjdtdd  fdd|D S ttr&t	 fdd|D }t
|dkrG|d }|  |rD|S |gS jj|S )	NzIThe usage of log_action() is deprecated. Implement log_actions() instead.r   r   c              
      s6   g | ]}j tjj|d dj|jt| dqS )FZfor_concrete_modelr   )r*   r   r$   get_for_modelidpkr&   .0objr   r   r'   r   r(   r)   
<listcomp>A   s    z/LogEntryManager.log_actions.<locals>.<listcomp>c              
      s>   g | ]}j tjj|d dj|jt|dd  dqS )Fr,   Nr   r   )r#   r   r$   r-   r.   r/   r&   r0   r3   r(   r)   r4   R   s    r   r   )typer*   r   r   r   r	   r   r    r!   r"   lensaver#   r$   Zbulk_create)r'   r   Zquerysetr   r   r+   Zlog_entry_listinstancer(   r3   r)   log_actions6   s*   

zLogEntryManager.log_actionsN)r   )__name__
__module____qualname__Zuse_in_migrationsr*   r9   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)rA   blanknullz	object id)rB   rC   zobject reprr   )
max_lengthzaction flag)choiceszchange message)rB   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<   _rA   Zverbose_name_pluralZdb_tableZorderingr(   r(   r(   r)   Meta   s
    
rG   c                 C   s
   t | jS N)r&   action_timer'   r(   r(   r)   __repr__      
zLogEntry.__repr__c                 C   s\   |   rtdd| ji S |  rtd| j|  d S |  r*tdd| ji S tdS )Nu   Added “%(object)s”.objectu(   Changed “%(object)s” — %(changes)s)rM   changesu   Deleted “%(object)s.”zLogEntry Object)is_additionr   r   	is_changeget_change_messageis_deletionrJ   r(   r(   r)   __str__   s   zLogEntry.__str__c                 C   
   | j tkS rH   )r   ADDITIONrJ   r(   r(   r)   rO      rL   zLogEntry.is_additionc                 C   rT   rH   )r   CHANGErJ   r(   r(   r)   rP      rL   zLogEntry.is_changec                 C   rT   rH   )r   DELETIONrJ   r(   r(   r)   rR      rL   zLogEntry.is_deletionc                 C   s  | j r| j d dkrzt| j }W n tjy   | j  Y S w g }|D ]}d|v rR|d rJt|d d |d d< |tdjdi |d  q$|td q$d|v rtdd	 |d d
 D td|d d
< d|d v rt|d d |d d< |tdjdi |d  q$|tdjdi |d  q$d|v rt|d d |d d< |tdjdi |d  q$ddd |D }|ptdS | j 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   )r1   
field_namer(   r(   r)   r4      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)r1   msgr(   r(   r)   	<genexpr>   s   & z.LogEntry.get_change_message.<locals>.<genexpr>zNo fields changed.Nr(   )	r   r!   loadsJSONDecodeErrorr   appendformatr
   join)r'   r   messagesZsub_messager(   r(   r)   rQ      sj   




zLogEntry.get_change_messagec                 C   s   | j j| jdS )z7Return the edited object represented by this log entry.)r/   )content_typeZget_object_for_this_typer   rJ   r(   r(   r)   get_edited_object   s   zLogEntry.get_edited_objectc                 C   sP   | j r&| jr&d| j j| j jf }zt|t| jfdW S  ty%   Y dS w dS )zX
        Return the admin URL to edit the object represented by this log entry.
        zadmin:%s_%s_change)argsN)ri   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DateTimeFieldrF   r   nowrI   Z
ForeignKeyr   ZAUTH_USER_MODELZCASCADEr@   r   ZSET_NULLri   Z	TextFieldr   Z	CharFieldr   ZPositiveSmallIntegerFieldACTION_FLAG_CHOICESr   r   r   r$   rG   rK   rS   rO   rP   rR   rQ   rj   rl   r(   r(   r(   r)   r=   j   sD    @r=   )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.deprecationr	   Zdjango.utils.textr
   Zdjango.utils.translationr   r   rF   rU   rV   rW   rn   Managerr   ZModelr=   r(   r(   r(   r)   <module>   s*    


P