B
    CVvg?                 @   sb  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d d	lmZmZ d d
lmZ d dlmZmZ  dZ!G dd dej"Z#e$ddidd Z%G dd dZ&G dd dZ'G dd dZ(G dd dZ)G dd dZ*G dd dZ+G dd  d e&Z,G d!d" d"e'Z-G d#d$ d$ej.j/Z0dS )%    N)forms)display_for_fieldflatten_fieldsetshelp_text_for_fieldlabel_for_fieldlookup_fieldquote)ObjectDoesNotExist)ForeignObjectRelManyToManyRelOneToOneField)flatatt)capfirstlinebreaksbr)NoReverseMatchreverse)conditional_escapeformat_html)	mark_safe)gettextgettext_lazyZ_selected_actionc               @   s8   e Zd ZejeddZejdddeddidZ	d	S )

ActionFormzAction:)label Fr   classzselect-across)r   requiredinitialwidgetN)
__name__
__module____qualname__r   ZChoiceField_actionZBooleanFieldZHiddenInputZselect_across r#   r#   @/tmp/pip-install-o3oxmrkh/Django/django/contrib/admin/helpers.pyr      s   r   r   zaction-selectc             C   s   dS )NFr#   )valuer#   r#   r$   <lambda>        r&   c               @   sB   e Zd ZdddZdd Zedd Zedd	 Zed
d ZdS )	AdminFormNc                sB    | | _ | _ fdd| D | _|| _|d kr8d}|| _d S )Nc                s,   g | ]$\}} |  fd d|D dqS )c                s   g | ]} | qS r#   r#   ).0f)formr#   r$   
<listcomp>(   s    z1AdminForm.__init__.<locals>.<listcomp>.<listcomp>)fielddependenciesr#   )r)   
field_namer.   )r+   r#   r$   r,   &   s   z&AdminForm.__init__.<locals>.<listcomp>r#   )r+   	fieldsetsitemsprepopulated_fieldsmodel_adminreadonly_fields)selfr+   r0   r2   r4   r3   r#   )r+   r$   __init__$   s    
zAdminForm.__init__c             c   s8   x2| j D ](\}}t| j|f| j| jd|V  qW d S )N)r4   r3   )r0   Fieldsetr+   r4   r3   )r5   nameoptionsr#   r#   r$   __iter__/   s    zAdminForm.__iter__c             C   s   | j jS )N)r+   errors)r5   r#   r#   r$   r;   8   s    zAdminForm.errorsc             C   s   | j jS )N)r+   non_field_errors)r5   r#   r#   r$   r<   <   s    zAdminForm.non_field_errorsc             C   s$   | j j}x| D ]}||j }qW |S )N)r+   media)r5   r=   fsr#   r#   r$   r=   @   s    
zAdminForm.media)NN)	r   r   r    r6   r:   propertyr;   r<   r=   r#   r#   r#   r$   r(   #   s
   
	r(   c               @   s*   e Zd Zd	ddZedd Zdd ZdS )
r7   Nr#   c             C   s6   || _ || | _| _d|| _|| _|| _|| _d S )N )r+   r8   fieldsjoinclassesdescriptionr3   r4   )r5   r+   r8   r4   rA   rC   rD   r3   r#   r#   r$   r6   I   s    zFieldset.__init__c             C   s    d| j krtjdgdS t S )NZcollapsezadmin/js/collapse.js)Zjs)rC   r   ZMedia)r5   r#   r#   r$   r=   R   s    
zFieldset.mediac             c   s,   x&| j D ]}t| j|| j| jdV  qW d S )N)r3   )rA   	Fieldliner+   r4   r3   )r5   r-   r#   r#   r$   r:   X   s    zFieldset.__iter__)Nr#   r#   r#   NN)r   r   r    r6   r?   r=   r:   r#   r#   r#   r$   r7   H   s    
r7   c               @   s&   e Zd ZdddZdd Zdd ZdS )	rE   Nc                sb   | _ t|drt|tr$|g _n| _t fdd jD   _| _|d krXd}| _d S )Nr:   c             3   s*   | ]"}| j jko  j j| jjV  qd S )N)r+   rA   r   	is_hidden)r)   r-   )r5   r#   r$   	<genexpr>e   s   z%Fieldline.__init__.<locals>.<genexpr>r#   )	r+   hasattr
isinstancestrrA   allZhas_visible_fieldr3   r4   )r5   r+   r-   r4   r3   r#   )r5   r$   r6   ^   s    

zFieldline.__init__c             c   sX   xRt | jD ]D\}}|| jkr:t| j||dk| jdV  qt| j||dkdV  qW d S )Nr   )is_firstr3   )rL   )	enumeraterA   r4   AdminReadonlyFieldr+   r3   
AdminField)r5   ir-   r#   r#   r$   r:   m   s    
zFieldline.__iter__c                s$   t d fdd jD dS )N
c             3   s(   | ] }| j kr j| j V  qd S )N)r4   r+   r;   as_ul)r)   r*   )r5   r#   r$   rG   w   s    z#Fieldline.errors.<locals>.<genexpr>)r   rB   rA   strip)r5   r#   )r5   r$   r;   t   s    zFieldline.errors)NN)r   r   r    r6   r:   r;   r#   r#   r#   r$   rE   ]   s   
rE   c               @   s$   e Zd Zdd Zdd Zdd ZdS )rO   c             C   s.   || | _ || _t| j j jtj| _d| _d S )NF)r-   rL   rI   r   r   CheckboxInputis_checkboxis_readonly)r5   r+   r-   rL   r#   r#   r$   r6   }   s    
zAdminField.__init__c             C   sz   g }t | jj}| jr |d | jjjr4|d | jsD|d |rVdd|ini }| jjt	||| jrrdnd dS )NZvCheckboxLabelr   inliner   r@   r   )contentsattrslabel_suffix)
r   r-   r   rU   appendr   rL   rB   	label_tagr   )r5   rC   rX   rY   r#   r#   r$   r\      s    



zAdminField.label_tagc             C   s   t | jj S )N)r   r-   r;   rR   )r5   r#   r#   r$   r;      s    zAdminField.errorsN)r   r   r    r6   r\   r;   r#   r#   r#   r$   rO   |   s   rO   c               @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )rN   Nc             C   s   t |r|jdkr|jnd}n|}|jjrD||jjkrD|jj| }nt||jj||d}|jjrz||jjkrz|jj| }nt||jj}||||d| _|| _	|| _
|| _d| _d| _| | _d S )Nz<lambda>r   )r+   )r8   r   	help_textr-   FT)callabler   _metalabelsr   model
help_textsr   r-   r+   r3   rL   rU   rV   Zget_empty_value_displayempty_value_display)r5   r+   r-   rL   r3   
class_namer   r]   r#   r#   r$   r6      s&    
zAdminReadonlyField.__init__c             C   s6   i }| j sd|d< | jd }tdt|t|| jjS )NrW   r   r   z<label{}>{}{}</label>)rL   r-   r   r   r   r+   rZ   )r5   rY   r   r#   r#   r$   r\      s
    
zAdminReadonlyField.label_tagc             C   s^   d|j jj|j jjf }y(t|t|jg| jjj	d}t
d||S  tk
rX   t|S X d S )Nzadmin:%s_%s_change)argsZcurrent_appz<a href="{}">{}</a>)ra   r_   Z	app_labelZ
model_namer   r   pkr3   Z
admin_siter8   r   r   rJ   )r5   remote_fieldZ
remote_objZurl_nameurlr#   r#   r$   get_admin_url   s    
z AdminReadonlyField.get_admin_urlc       
   
   C   s>  ddl m} | jd | jj| j  }}}yt|||\}}}W n  ttt	fk
r^   | j
}Y nX || jjkr| j| jj}	t|	ddr|	||S |d krt|ddr||}nt|dr|}nt|}nlt|jtr|d k	rdtt| }n:t|jttfr |d k	r | |j|}nt||| j
}t|}t|S )	Nr   )_boolean_iconr-   Z	read_onlyFbooleanZ__html__z, )Z,django.contrib.admin.templatetags.admin_listrj   r-   r+   instancer3   r   AttributeError
ValueErrorr	   rc   rA   r   getattrrenderrH   r   rI   rg   r   rB   maprJ   rK   r
   r   ri   r   r   )
r5   rj   r-   objr3   r*   attrr%   Zresult_reprr   r#   r#   r$   rX      s0    



zAdminReadonlyField.contents)N)r   r   r    r6   r\   ri   rX   r#   r#   r#   r$   rN      s   
 rN   c               @   sV   e Zd ZdZdddZdd Zdd	 Zd
d Zedd Z	edd Z
edd ZdS )InlineAdminFormSetzI
    A wrapper around an inline formset for use in the admin system.
    NTc             C   sp   || _ || _|| _|| _|d kr$d}|| _|d kr6i }|| _|jrNd|jnd| _|| _|| _	|	| _
|
| _d S )Nr#   r@   r   )optsformsetr0   r3   r4   r2   rC   rB   has_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission)r5   rW   rv   r0   r2   r4   r3   rw   rx   ry   rz   r#   r#   r$   r6      s    zInlineAdminFormSet.__init__c             c   s   | j r| j}n| jt| j }xNt| jj| j D ]6\}}| j	|}t
| j|| j| j||| j|dV  q4W x2| jjD ]&}t
| j|| j| jd | j| jdV  qxW | jrt
| j| jj| j| jd | j| jdV  d S )N)r3   view_on_site_url)r3   )rx   r4   r   r0   ziprv   Zinitial_formsZget_querysetru   Zget_view_on_site_urlInlineAdminFormr2   Zextra_formsrw   
empty_form)r5   Zreadonly_fields_for_editingr+   originalr{   r#   r#   r$   r:     s$    

zInlineAdminFormSet.__iter__c       	      c   s   t | jdd }| jj}|jjp i }|jjp,i }xtt| jD ]\}}|rV|j	|krVq>| j
rf|| jkr|||pt|| jj| j|dddid||pt|| jjdV  q>|j| }|j}|d krt|| jj| j|d}|||j|j|jdV  q>W d S )Nfk)r+   rF   F)r8   r   r   r   r]   )ro   rv   r~   r_   r`   rb   rM   r   r0   r8   rx   r4   getr   ru   ra   r   rA   r   r   r   r]   )	r5   r   r~   Zmeta_labelsZmeta_help_textsrP   r/   Z
form_fieldr   r#   r#   r$   rA   %  s4     
zInlineAdminFormSet.fieldsc             C   s@   | j j}td| jj | jjtddt|i tdddS )Nz#%szAdd another %(verbose_name)sverbose_nameZRemove)prefixZaddTextZ
deleteText)r8   r9   )ru   r   jsondumpsrv   r   r   r   )r5   r   r#   r#   r$   inline_formset_dataG  s    
z&InlineAdminFormSet.inline_formset_datac             C   s   | j jS )N)rv   r   )r5   r#   r#   r$   r   T  s    zInlineAdminFormSet.formsc             C   s   | j jS )N)rv   non_form_errors)r5   r#   r#   r$   r   X  s    z"InlineAdminFormSet.non_form_errorsc             C   s,   | j j| jj }x| D ]}||j }qW |S )N)ru   r=   rv   )r5   r=   r>   r#   r#   r$   r=   \  s    
zInlineAdminFormSet.media)NNNTTTT)r   r   r    __doc__r6   r:   rA   r   r?   r   r   r=   r#   r#   r#   r$   rt      s      
"rt   c                   sR   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )r}   zF
    A wrapper around an inline form for use in the admin system.
    Nc	       	         s>   || _ || _|| _|o|d k	| _|| _t ||||| d S )N)rv   r3   r   show_urlZabsolute_urlsuperr6   )	r5   rv   r+   r0   r2   r   r4   r3   r{   )	__class__r#   r$   r6   h  s    zInlineAdminForm.__init__c             c   s<   x6| j D ],\}}t| j| j|| jfd| ji|V  qW d S )Nr3   )r0   InlineFieldsetrv   r+   r4   r3   )r5   r8   r9   r#   r#   r$   r:   q  s    zInlineAdminForm.__iter__c             C   s>   | j jjjjp<| j jjjjj p<tdd | j jjj D S )Nc             s   s&   | ]}|j jp|j jj jj V  qd S )N)r_   
auto_fieldra   rf   editable)r)   parentr#   r#   r$   rG     s   z:InlineAdminForm.needs_explicit_pk_field.<locals>.<genexpr>)r+   r_   ra   r   rf   r   anyZget_parent_list)r5   r#   r#   r$   needs_explicit_pk_fieldx  s     z'InlineAdminForm.needs_explicit_pk_fieldc             C   s   t | j| jjjdS )NF)rO   r+   rv   Z	_pk_fieldr8   )r5   r#   r#   r$   pk_field  s    zInlineAdminForm.pk_fieldc             C   s*   t | jdd }|r"t| j|jdS dS d S )Nr   Fr   )ro   rv   rO   r+   r8   )r5   r   r#   r#   r$   fk_field  s    zInlineAdminForm.fk_fieldc             C   s   ddl m} t| j|dS )Nr   )DELETION_FIELD_NAMEF)django.forms.formsetsr   rO   r+   )r5   r   r#   r#   r$   deletion_field  s    zInlineAdminForm.deletion_fieldc             C   s   ddl m} t| j|dS )Nr   )ORDERING_FIELD_NAMEF)r   r   rO   r+   )r5   r   r#   r#   r$   ordering_field  s    zInlineAdminForm.ordering_field)NNN)r   r   r    r   r6   r:   r   r   r   r   r   __classcell__r#   r#   )r   r$   r}   d  s   r}   c                   s$   e Zd Z fddZdd Z  ZS )r   c                s   || _ t j|| d S )N)rv   r   r6   )r5   rv   re   kwargs)r   r#   r$   r6     s    zInlineFieldset.__init__c             c   sH   t | jdd }x4| jD ]*}|r(|j|krt| j|| j| jdV  qW d S )Nr   )r3   )ro   rv   rA   r8   rE   r+   r4   r3   )r5   r   r-   r#   r#   r$   r:     s    zInlineFieldset.__iter__)r   r   r    r6   r:   r   r#   r#   )r   r$   r     s   r   c                   s    e Zd ZdZ fddZ  ZS )AdminErrorListz9Store errors for the form/formsets in an add/change view.c                s^   t    |jrZ| |j  x8|D ]0}| |  x|jD ]}| |  q@W q&W d S )N)r   r6   Zis_boundextendr;   valuesr   )r5   r+   Zinline_formsetsZinline_formsetZerrors_in_inline_form)r   r#   r$   r6     s    

zAdminErrorList.__init__)r   r   r    r   r6   r   r#   r#   )r   r$   r     s   r   )1r   Zdjangor   Zdjango.contrib.admin.utilsr   r   r   r   r   r   Zdjango.core.exceptionsr	   Zdjango.db.models.fields.relatedr
   r   r   Zdjango.forms.utilsr   Zdjango.template.defaultfiltersr   r   Zdjango.urlsr   r   Zdjango.utils.htmlr   r   Zdjango.utils.safestringr   Zdjango.utils.translationr   r   r!   ZACTION_CHECKBOX_NAMEZFormr   rT   Zcheckboxr(   r7   rE   rO   rN   rt   r}   r   utilsZ	ErrorListr   r#   r#   r#   r$   <module>   s,    
%[p2