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 nØX || jjkr’| j| jj}	t|	ddƒr’|	 ||¡S |d krÊt|ddƒr°||ƒ}nt|dƒrÀ|}nt|ƒ}nlt|jtƒrô|d k	rôd 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rÎt
| 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 }xÈtt| jƒƒD ]¶\}}|rV|j	|krVq>| j
rf|| jkr®|| |¡p†t|| jj| j|d�ddid| |¡p¤t|| jjƒdœV  q>|j| }|j}|d krÜt|| 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