U
    HaZ?                     @   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-unpacked-wheel-3jxiddxt/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_namer1   r-   r#   r$   r/   &   s   z&AdminForm.__init__.<locals>.<listcomp>r#   )r.   	fieldsetsitemsprepopulated_fieldsmodel_adminreadonly_fields)selfr.   r3   r5   r7   r6   r#   r-   r$   __init__$   s    
zAdminForm.__init__c                 c   s4   | j D ](\}}t| j|f| j| jd|V  qd S )N)r7   r6   )r3   Fieldsetr.   r7   r6   r8   nameoptionsr#   r#   r$   __iter__/   s     zAdminForm.__iter__c                 C   s   | j jS N)r.   errorsr8   r#   r#   r$   r@   8   s    zAdminForm.errorsc                 C   s   | j jS r?   )r.   non_field_errorsrA   r#   r#   r$   rB   <   s    zAdminForm.non_field_errorsc                 C   s    | j j}| D ]}||j }q|S r?   )r.   mediar8   rC   fsr#   r#   r$   rC   @   s    zAdminForm.media)NN)	r   r   r    r9   r>   propertyr@   rB   rC   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 )
r:   Nr#   c                 C   s6   || _ || | _| _d|| _|| _|| _|| _d S )N )r.   r<   fieldsjoinclassesdescriptionr6   r7   )r8   r.   r<   r7   rH   rJ   rK   r6   r#   r#   r$   r9   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)rJ   r   ZMediarA   r#   r#   r$   rC   R   s    
zFieldset.mediac                 c   s(   | j D ]}t| j|| j| jdV  qd S )Nr6   )rH   	Fieldliner.   r7   r6   )r8   r0   r#   r#   r$   r>   X   s    
zFieldset.__iter__)Nr#   r#   r#   NN)r   r   r    r9   rF   rC   r>   r#   r#   r#   r$   r:   H   s       
	
r:   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	rM   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 r?   )r.   rH   r   	is_hidden)r+   r0   rA   r#   r$   	<genexpr>d   s   z%Fieldline.__init__.<locals>.<genexpr>r#   )	r.   hasattr
isinstancestrrH   allZhas_visible_fieldr6   r7   )r8   r.   r0   r7   r6   r#   rA   r$   r9   ^   s    
zFieldline.__init__c                 c   sT   t | jD ]D\}}|| jkr8t| j||dk| jdV  q
t| j||dkdV  q
d S )Nr   )is_firstr6   )rT   )	enumeraterH   r7   AdminReadonlyFieldr.   r6   
AdminField)r8   ir0   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 r?   )r7   r.   r@   as_ulr*   rA   r#   r$   rO   v   s    
 z#Fieldline.errors.<locals>.<genexpr>)r   rI   rH   striprA   r#   rA   r$   r@   t   s    zFieldline.errors)NN)r   r   r    r9   r>   r@   r#   r#   r#   r$   rM   ]   s   
rM   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )rW   c                 C   s.   || | _ || _t| j j jtj| _d| _d S r%   )r0   rT   rQ   r   r   CheckboxInputis_checkboxis_readonly)r8   r.   r0   rT   r#   r#   r$   r9   }   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   rG   r   )contentsattrslabel_suffix)
r   r0   r   r]   appendr   rT   rI   	label_tagr   )r8   rJ   r`   ra   r#   r#   r$   rd      s    



 zAdminField.label_tagc                 C   s   t | jj S r?   )r   r0   r@   rZ   rA   r#   r#   r$   r@      s    zAdminField.errorsN)r   r   r    r9   rd   r@   r#   r#   r#   r$   rW   |   s   rW   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )rV   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 )Nr'   r   r-   )r<   r   	help_textr0   FT)callabler   _metalabelsr   model
help_textsr   r0   r.   r6   rT   r]   r^   Zget_empty_value_displayempty_value_display)r8   r.   r0   rT   r6   
class_namer   re   r#   r#   r$   r9      s(    zAdminReadonlyField.__init__c                 C   s6   i }| j sd|d< | jd }tdt|t|| jjS )Nr_   r   r   z<label{}>{}{}</label>)rT   r0   r   r   r   r.   rb   )r8   ra   r   r#   r#   r$   rd      s
    
zAdminReadonlyField.label_tagc                 C   s\   d|j jj|j jjf }z"t|t|jgd}td||W S  tk
rV   t	| Y S X d S )Nzadmin:%s_%s_change)argsz<a href="{}">{}</a>)
ri   rg   Z	app_labelZ
model_namer   r   pkr   r   rR   )r8   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  }}}z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_iconr0   Z	read_onlyFbooleanZ__html__z, )Z,django.contrib.admin.templatetags.admin_listrr   r0   r.   instancer6   r   AttributeError
ValueErrorr	   rk   rH   r   getattrrenderrP   r   rQ   ro   r   rI   maprR   rS   r
   r   rq   r   r   )
r8   rr   r0   objr6   r,   attrr&   Zresult_reprr   r#   r#   r$   r`      s4    


zAdminReadonlyField.contents)N)r   r   r    r9   rd   rq   r`   r#   r#   r#   r$   rV      s   
 rV   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#   rG   r   )optsformsetr3   r6   r7   r5   rJ   rI   has_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission)r8   r_   r~   r3   r5   r7   r6   r   r   r   r   r#   r#   r$   r9      s    zInlineAdminFormSet.__init__c                 c   s   | j r| j}n| jt| j }t| jj| j D ]6\}}| j	|}t
| j|| j| j||| j|dV  q2| jjD ]&}t
| j|| j| jd | j| jdV  qr| jrt
| j| jj| j| jd | j| jdV  d S )N)r6   view_on_site_urlrL   )r   r7   r   r3   zipr~   Zinitial_formsZget_querysetr}   Zget_view_on_site_urlInlineAdminFormr5   Zextra_formsr   
empty_form)r8   Zreadonly_fields_for_editingr.   originalr   r#   r#   r$   r>     sF         
     
    zInlineAdminFormSet.__iter__c           	      c   s   t | jdd }| jj}|jjp i }|jjp,i }tt| jD ]\}}|rT|j	|krTq<| j
rd|| 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<d S )Nfkr-   rN   F)r<   r   r   r   re   )rw   r~   r   rg   rh   rj   rU   r   r3   r<   r   r7   getr   r}   ri   r   rH   r   r   r   re   )	r8   r   r   Zmeta_labelsZmeta_help_textsrX   r2   Z
form_fieldr   r#   r#   r$   rH   !  s:    

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)r<   r=   )r}   r   jsondumpsr~   r   r   r   )r8   r   r#   r#   r$   inline_formset_dataC  s    
 z&InlineAdminFormSet.inline_formset_datac                 C   s   | j jS r?   )r~   r   rA   r#   r#   r$   r   P  s    zInlineAdminFormSet.formsc                 C   s   | j jS r?   )r~   non_form_errorsrA   r#   r#   r$   r   T  s    z"InlineAdminFormSet.non_form_errorsc                 C   s(   | j j| jj }| D ]}||j }q|S r?   )r}   rC   r~   rD   r#   r#   r$   rC   X  s    zInlineAdminFormSet.media)NNNTTTT)r   r   r    __doc__r9   r>   rH   r   rF   r   r   rC   r#   r#   r#   r$   r|      s$             
"

r|   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 r?   )r~   r6   r   show_urlZabsolute_urlsuperr9   )	r8   r~   r.   r3   r5   r   r7   r6   r   	__class__r#   r$   r9   d  s    zInlineAdminForm.__init__c                 c   s8   | j D ],\}}t| j| j|| jfd| ji|V  qd S )Nr6   )r3   InlineFieldsetr~   r.   r7   r6   r;   r#   r#   r$   r>   m  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 r?   )rg   
auto_fieldri   rn   editable)r+   parentr#   r#   r$   rO   {  s   z:InlineAdminForm.needs_explicit_pk_field.<locals>.<genexpr>)r.   rg   ri   r   rn   r   anyZget_parent_listrA   r#   r#   r$   needs_explicit_pk_fieldt  s
     z'InlineAdminForm.needs_explicit_pk_fieldc                 C   s   t | j| jjjdS r%   )rW   r.   r~   Z	_pk_fieldr<   rA   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   )rw   r~   rW   r.   r<   )r8   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   rW   r.   )r8   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   rW   r.   )r8   r   r#   r#   r$   ordering_field  s    zInlineAdminForm.ordering_field)NNN)r   r   r    r   r9   r>   r   r   r   r   r   __classcell__r#   r#   r   r$   r   `  s        	r   c                       s$   e Zd Z fddZdd Z  ZS )r   c                    s   || _ t j|| d S r?   )r~   r   r9   )r8   r~   rm   kwargsr   r#   r$   r9     s    zInlineFieldset.__init__c                 c   sD   t | jdd }| jD ]*}|r&|j|krt| j|| j| jdV  qd S )Nr   rL   )rw   r~   rH   r<   rM   r.   r7   r6   )r8   r   r0   r#   r#   r$   r>     s    
zInlineFieldset.__iter__)r   r   r    r9   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                    sV   t    |jrR| |j  |D ],}| |  |jD ]}| |  q<q$d S r?   )r   r9   Zis_boundextendr@   valuesr   )r8   r.   Zinline_formsetsZinline_formsetZerrors_in_inline_formr   r#   r$   r9     s    

zAdminErrorList.__init__)r   r   r    r   r9   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   r\   Zcheckboxr)   r:   rM   rW   rV   r|   r   r   utilsZ	ErrorListr   r#   r#   r#   r$   <module>   s,    
%Wp2