3
(h:                 @   s  d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZ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 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j*ddidd Z+G dd de,Z-G dd de,Z.G dd de,Z/G dd de,Z0G dd  d e,Z1G d!d" d"e,Z2G d#d$ d$e-Z3G d%d& d&e.Z4G d'd( d(ej5j6Z7dS ))    )unicode_literalsN)forms)settings)display_for_fieldflatten_fieldsetshelp_text_for_fieldlabel_for_fieldlookup_field)ObjectDoesNotExist)ManyToManyRel)flatatt)capfirstlinebreaksbr)six)RemovedInDjango20Warning)
force_text
smart_text)conditional_escapeformat_html)	mark_safe)ugettextugettext_lazyZ_selected_actionc               @   s8   e Zd ZejeddZejdddej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-q3hcpn_q/Django/django/contrib/admin/helpers.pyr      s   r   r   zaction-selectc             C   s   dS )NFr$   )valuer$   r$   r%   <lambda>#   s    r'   c               @   s.   e Zd ZdddZdd Zdd ZeeZdS )		AdminFormNc                sB    | | _ | _ fdd|j D | _|| _|d kr8f }|| _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+   	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__2   s    zAdminForm.__iter__c             C   s$   | j j}x| D ]}||j }qW |S )N)r+   media)r5   r;   fsr$   r$   r%   _media;   s    
zAdminForm._media)NN)r   r    r!   r6   r:   r=   propertyr;   r$   r$   r$   r%   r(   &   s   
	r(   c               @   s:   e Zd Zdf f f ddfddZdd ZeeZdd ZdS )r7   Nc             C   s6   || _ || | _| _dj|| _|| _|| _|| _d S )N )r+   r8   fieldsjoinclassesdescriptionr3   r4   )r5   r+   r8   r4   r@   rB   rC   r3   r$   r$   r%   r6   D   s    zFieldset.__init__c             C   sH   d| j kr@tjrdnd}d| dd| g}tjdd |D d	S tj S )
NZcollapser   z.minzvendor/jquery/jquery%s.jszjquery.init.jszcollapse%s.jsc             S   s   g | ]}d | qS )zadmin/js/%sr$   )r)   urlr$   r$   r%   r,   U   s    z#Fieldset._media.<locals>.<listcomp>)js)rB   r   DEBUGr   ZMedia)r5   extrarE   r$   r$   r%   r=   M   s    

zFieldset._mediac             c   s,   x&| j D ]}t| j|| j| jdV  qW d S )N)r3   )r@   	Fieldliner+   r4   r3   )r5   r-   r$   r$   r%   r:   Y   s    zFieldset.__iter__)r   r    r!   r6   r=   r>   r;   r:   r$   r$   r$   r%   r7   C   s
   
r7   c               @   s&   e Zd ZdddZdd Zdd ZdS )	rH   Nc                sf   | _ t|d st|tjr(|g _n| _t fdd jD   _| _|d kr\f }| _	d S )Nr:   c             3   s*   | ]"}| j jko  j j| jjV  qd S )N)r+   r@   r   	is_hidden)r)   r-   )r5   r$   r%   	<genexpr>f   s   z%Fieldline.__init__.<locals>.<genexpr>)
r+   hasattr
isinstancer   	text_typer@   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   )rO   )	enumerater@   r4   AdminReadonlyFieldr+   r3   
AdminField)r5   ir-   r$   r$   r%   r:   n   s    
zFieldline.__iter__c                s$   t dj fdd jD jdS )N
c             3   s(   | ] }| j kr j| jj V  qd S )N)r4   r+   errorsas_ul)r)   r*   )r5   r$   r%   rJ   x   s    z#Fieldline.errors.<locals>.<genexpr>)r   rA   r@   strip)r5   r$   )r5   r%   rU   u   s    zFieldline.errors)NN)r   r    r!   r6   r:   rU   r$   r$   r$   r%   rH   ^   s   
rH   c               @   s$   e Zd Zdd Zdd Zdd ZdS )rR   c             C   s.   || | _ || _t| j j jtj| _d| _d S )NF)r-   rO   rL   r   r   CheckboxInputis_checkboxis_readonly)r5   r+   r-   rO   r$   r$   r%   r6   ~   s    
zAdminField.__init__c             C   s~   g }t t| jj}| jr$|jd | jjjr8|jd | jsH|jd |rZddj|ini }| jj	t
||| jrvdnd dS )NZvCheckboxLabelr   inliner   r?   r   )contentsattrsZlabel_suffix)r   r   r-   r   rY   appendr   rO   rA   	label_tagr   )r5   rB   r\   r]   r$   r$   r%   r_      s    



zAdminField.label_tagc             C   s   t | jjj S )N)r   r-   rU   rV   )r5   r$   r$   r%   rU      s    zAdminField.errorsN)r   r    r!   r6   r_   rU   r$   r$   r$   r%   rR   }   s   rR   c               @   s&   e Zd ZdddZdd Zdd ZdS )	rQ   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|}|jjrv||jjkrv|jj| }nt||jj}||||d| _|| _	|| _
|| _d| _d| _|j | _d S )Nz<lambda>r   )r8   r   	help_textr-   FT)callabler   _metalabelsr   modelZ
help_textsr   r-   r+   r3   rO   rY   rZ   Zget_empty_value_displayempty_value_display)r5   r+   r-   rO   r3   
class_namer   r`   r$   r$   r%   r6      s&    
zAdminReadonlyField.__init__c             C   s4   i }| j sd|d< | jd }tdt|tt|S )Nr[   r   r   z<label{}>{}:</label>)rO   r-   r   r   r   r   )r5   r]   r   r$   r$   r%   r_      s    
zAdminReadonlyField.label_tagc       
      C   s  ddl m} | jd | jj| j  }}}yt|||\}}}W n  ttt	fk
r^   | j
}Y nX |d krt|dd}	|	r||}nFt|dr|}n6t|}t|ddrtjd| t t|}nt|}nBt|jtr|d k	rd	jttj|j }nt||| j
}t|}t|S )
Nr   )_boolean_iconr-   booleanFZ__html__Z
allow_tagszDeprecated allow_tags attribute used on %s. Use django.utils.html.format_html(), format_html_join(), or django.utils.safestring.mark_safe() instead.z, )Z,django.contrib.admin.templatetags.admin_listrg   r-   r+   instancer3   r	   AttributeError
ValueErrorr
   re   getattrrK   r   warningswarnr   r   r   rL   Zremote_fieldr   rA   mapr   rM   rN   r   r   )
r5   rg   r-   objr3   r*   attrr&   Zresult_reprrh   r$   r$   r%   r\      s2    



zAdminReadonlyField.contents)N)r   r    r!   r6   r_   r\   r$   r$   r$   r%   rQ      s   
 	rQ   c               @   sB   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Ze	eZ
dS )InlineAdminFormSetzI
    A wrapper around an inline formset for use in the admin system.
    Nc             C   sX   || _ || _|| _|| _|d kr$f }|| _|d kr6i }|| _|jrNdj|jnd| _d S )Nr?   r   )optsformsetr0   r3   r4   r2   rB   rA   )r5   r[   rt   r0   r2   r4   r3   r$   r$   r%   r6      s    zInlineAdminFormSet.__init__c             c   s   xPt | jj| jj D ]8\}}| jj|}t| j|| j| j|| j	| j|dV  qW x2| jj
D ]&}t| j|| j| jd | j	| jdV  q\W t| j| jj| j| jd | j	| jdV  d S )N)r3   view_on_site_url)r3   )ziprt   Zinitial_formsZget_querysetrs   Zget_view_on_site_urlInlineAdminFormr0   r2   r4   Zextra_forms
empty_form)r5   r+   originalru   r$   r$   r%   r:      s    


zInlineAdminFormSet.__iter__c             c   s   t | jdd }xtt| jD ]\}}|r6|j|kr6q|| jkrnt|| jj	| jddidt
|| jj	dV  q| jjj| }|j}|d krt|| jj	| j}||j|j|jdV  qW d S )NfkrI   F)r   r   r   r`   )rl   rt   rP   r   r0   r8   r4   r   rs   rd   r   rx   r@   r   r   r   r`   )r5   rz   rS   r/   Z
form_fieldr   r$   r$   r%   r@     s"    
zInlineAdminFormSet.fieldsc             C   s@   | j j}tj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   )rs   r{   jsondumpsrt   r|   r   r   )r5   r{   r$   r$   r%   inline_formset_data%  s    
z&InlineAdminFormSet.inline_formset_datac             C   s,   | j j| jj }x| D ]}||j }qW |S )N)rs   r;   rt   )r5   r;   r<   r$   r$   r%   r=   2  s    
zInlineAdminFormSet._media)NNN)r   r    r!   __doc__r6   r:   r@   r   r=   r>   r;   r$   r$   r$   r%   rr      s    
rr   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 )rw   zF
    A wrapper around an inline form for use in the admin system.
    Nc	       	         sB   || _ || _|| _|o|d k	| _|| _tt| j||||| d S )N)rt   r3   ry   show_urlZabsolute_urlsuperrw   r6   )	r5   rt   r+   r0   r2   ry   r4   r3   ru   )	__class__r$   r%   r6   >  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   InlineFieldsetrt   r+   r4   r3   )r5   r8   r9   r$   r$   r%   r:   G  s    zInlineAdminForm.__iter__c             C   sN   | j jjjjs | j jjjjj r$dS x$| j jjjj D ]}|jjr6dS q6W dS )NTF)r+   rb   rd   Zhas_auto_fieldpkeditableZget_parent_list)r5   parentr$   r$   r%   needs_explicit_pk_fieldN  s     z'InlineAdminForm.needs_explicit_pk_fieldc             C   s   t | j| jjjdS )NF)rR   r+   rt   Z	_pk_fieldr8   )r5   r$   r$   r%   pk_fieldY  s    zInlineAdminForm.pk_fieldc             C   s*   t | jdd }|r"t| j|jdS dS d S )Nrz   Fr   )rl   rt   rR   r+   r8   )r5   rz   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   rR   r+   )r5   r   r$   r$   r%   deletion_fieldc  s    zInlineAdminForm.deletion_fieldc             C   s   ddl m} t| j|dS )Nr   )ORDERING_FIELD_NAMEF)r   r   rR   r+   )r5   r   r$   r$   r%   ordering_fieldg  s    zInlineAdminForm.ordering_field)NNN)r   r    r!   r   r6   r:   r   r   r   r   r   __classcell__r$   r$   )r   r%   rw   :  s   rw   c                   s$   e Zd Z fddZdd Z  ZS )r   c                s   || _ tt| j|| d S )N)rt   r   r   r6   )r5   rt   argskwargs)r   r$   r%   r6   m  s    zInlineFieldset.__init__c             c   sJ   t | jdd }x6| jD ],}|r*|j|kr*qt| j|| j| jdV  qW d S )Nrz   )r3   )rl   rt   r@   r8   rH   r+   r4   r3   )r5   rz   r-   r$   r$   r%   r:   q  s
    zInlineFieldset.__iter__)r   r    r!   r6   r:   r   r$   r$   )r   r%   r   l  s   r   c                   s    e Zd ZdZ fddZ  ZS )AdminErrorListzN
    Stores all errors for the form/formsets in an add/change stage view.
    c                sb   t t| j  |jr^| j|jj  x8|D ]0}| j|j  x|jD ]}| j|j  qDW q*W d S )N)r   r   r6   Zis_boundextendrU   valuesZnon_form_errors)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   y  s   r   )8
__future__r   r}   rm   Zdjangor   Zdjango.confr   Zdjango.contrib.admin.utilsr   r   r   r   r	   Zdjango.core.exceptionsr
   Zdjango.db.models.fields.relatedr   Zdjango.forms.utilsr   Zdjango.template.defaultfiltersr   r   Zdjango.utilsr   Zdjango.utils.deprecationr   Zdjango.utils.encodingr   r   Zdjango.utils.htmlr   r   Zdjango.utils.safestringr   Zdjango.utils.translationr   r   r"   ZACTION_CHECKBOX_NAMEZFormr   rX   Zcheckboxobjectr(   r7   rH   rR   rQ   rr   rw   r   utilsZ	ErrorListr   r$   r$   r$   r%   <module>   s6   	NR2