

_Vb:                 @   sJ  d  d l  m 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
 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 m Z d  d l m Z 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 Z* Gd d   d e j+  Z, e j- i d d 6d d    Z. Gd d   d e/  Z0 Gd d   d e/  Z1 Gd d   d e/  Z2 Gd d    d  e/  Z3 Gd! d"   d" e/  Z4 Gd# d$   d$ e/  Z5 Gd% d&   d& e0  Z6 Gd' d(   d( e1  Z7 Gd) d*   d* e j8 j9  Z: d S)+    )unicode_literalsN)forms)settings)static)display_for_fieldflatten_fieldsetshelp_text_for_fieldlabel_for_fieldlookup_field)ObjectDoesNotExist)ManyToManyRel)flatatt)capfirstlinebreaksbr)six)RemovedInDjango20WarningRemovedInDjango110Warning)
force_text
smart_text)cached_property)conditional_escapeformat_html)	mark_safe)ugettext_lazyZ_selected_actionc               @   s\   e  Z d  Z e j d e d   Z e j d d d d d d d e j i d	 d
 6  Z	 d S)
ActionFormlabelzAction: requiredFinitialr   widgetzselect-acrossclassN)
__name__
__module____qualname__r   ZChoiceField_actionZBooleanFieldZHiddenInputZselect_across r&   r&   >/tmp/pip-build-ghmbqnp_/Django/django/contrib/admin/helpers.pyr      s   r   zaction-selectr    c             C   s   d S)NFr&   )valuer&   r&   r'   <lambda>"   s    r)   c               @   sF   e  Z d  Z d d d d  Z d d   Z d d   Z e e  Z d S)	AdminFormNc                s`     | |  _  |  _   f d d   | j   D |  _ | |  _ | d  k rS f  } n  | |  _ d  S)Nc                sA   g  |  ]7 \ } } i   | d  6  f d d   | D d 6 q S)fieldc                s   g  |  ] }   |  q Sr&   r&   ).0f)formr&   r'   
<listcomp>*   s   	 z1AdminForm.__init__.<locals>.<listcomp>.<listcomp>dependenciesr&   )r,   
field_namer0   )r.   r&   r'   r/   (   s   	z&AdminForm.__init__.<locals>.<listcomp>)r.   	fieldsetsitemsprepopulated_fieldsmodel_adminreadonly_fields)selfr.   r2   r4   r6   r5   r&   )r.   r'   __init__&   s    		zAdminForm.__init__c          	   c   sD   x= |  j  D]2 \ } } t |  j | d |  j d |  j | Vq
 Wd  S)Nr6   r5   )r2   Fieldsetr.   r6   r5   )r7   nameoptionsr&   r&   r'   __iter__1   s    	zAdminForm.__iter__c             C   s.   |  j  j } x |  D] } | | j } q W| S)N)r.   media)r7   r=   fsr&   r&   r'   _media:   s    zAdminForm._media)r!   r"   r#   r8   r<   r?   propertyr=   r&   r&   r&   r'   r*   %   s   	r*   c               @   sR   e  Z d  Z d f  f  f  d d d d  Z d d   Z e e  Z d d   Z d S)r9   Nc             C   sM   | |  _  | | |  _ |  _ d j |  |  _ | |  _ | |  _ | |  _ d  S)N )r.   r:   fieldsjoinclassesdescriptionr5   r6   )r7   r.   r:   r6   rB   rD   rE   r5   r&   r&   r'   r8   C   s    			zFieldset.__init__c             C   sb   d |  j  k rX t j r d n d } d | d d | g } t j d d d	   | D  St j   S)
NZcollapser   z.minzvendor/jquery/jquery%s.jszjquery.init.jszcollapse%s.jsjsc             S   s    g  |  ] } t  d  |   q S)zadmin/js/%s)r   )r,   urlr&   r&   r'   r/   R   s   	 z#Fieldset._media.<locals>.<listcomp>)rD   r   DEBUGr   ZMedia)r7   extrarF   r&   r&   r'   r?   L   s    zFieldset._mediac             c   s8   x1 |  j  D]& } t |  j | |  j d |  j Vq
 Wd  S)Nr5   )rB   	Fieldliner.   r6   r5   )r7   r+   r&   r&   r'   r<   V   s    zFieldset.__iter__)r!   r"   r#   r8   r?   r@   r=   r<   r&   r&   r&   r'   r9   B   s
   r9   c               @   s:   e  Z d  Z d d d d  Z d d   Z d d   Z d S)rJ   Nc                s   |   _  t | d  s+ t | t j  r: | g   _ n	 |   _ t   f d d     j D    _ |   _ | d  k r f  } n  |   _	 d  S)Nr<   c             3   s7   |  ]- } |   j  j k o.   j  j | j j Vq d  S)N)r.   rB   r   	is_hidden)r,   r+   )r7   r&   r'   	<genexpr>b   s   z%Fieldline.__init__.<locals>.<genexpr>)
r.   hasattr
isinstancer   	text_typerB   allZhas_visible_fieldr5   r6   )r7   r.   r+   r6   r5   r&   )r7   r'   r8   \   s    	"			zFieldline.__init__c             c   sy   xr t  |  j  D]a \ } } | |  j k rT t |  j | d | d k d |  j Vq t |  j | d | d k Vq Wd  S)Nis_firstr   r5   )	enumeraterB   r6   AdminReadonlyFieldr.   r5   
AdminField)r7   ir+   r&   r&   r'   r<   j   s
    zFieldline.__iter__c                s2   t  d j   f d d     j D  j d   S)N
c             3   s4   |  ]* } |   j  k r   j | j j   Vq d  S)N)r6   r.   errorsas_ul)r,   r-   )r7   r&   r'   rL   t   s   z#Fieldline.errors.<locals>.<genexpr>)r   rC   rB   strip)r7   r&   )r7   r'   rW   r   s    zFieldline.errors)r!   r"   r#   r8   r<   rW   r&   r&   r&   r'   rJ   [   s   rJ   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)rT   c             C   sA   | | |  _  | |  _ t |  j  j  j t j  |  _ d |  _ d  S)NF)r+   rQ   rN   r   r   CheckboxInputis_checkboxis_readonly)r7   r.   r+   rQ   r&   r&   r'   r8   z   s    	zAdminField.__init__c             C   s   g  } t  t |  j j   } |  j r7 | j d  n  |  j j j rV | j d  n  |  j so | j d  n  | r i d j |  d 6n i  } |  j j	 d t
 |  d | d |  j r d	 n d   S)
NZvCheckboxLabelr   inlinerA   r    contentsattrsZlabel_suffixr   )r   r   r+   r   r[   appendr   rQ   rC   	label_tagr   )r7   rD   r^   r_   r&   r&   r'   ra      s    		"zAdminField.label_tagc             C   s   t  |  j j j    S)N)r   r+   rW   rX   )r7   r&   r&   r'   rW      s    zAdminField.errorsN)r!   r"   r#   r8   ra   rW   r&   r&   r&   r'   rT   y   s   rT   c               @   s7   e  Z d  Z d d d  Z d d   Z d d   Z d S)rS   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 r | | j j k r | j j | } n t | | j j  } i | d 6| d 6| d 6| d 6|  _ | |  _	 | |  _
 | |  _ d |  _ d |  _ | j   |  _ d  S)	Nz<lambda>r   r:   r   	help_textr+   FT)callabler!   _metalabelsr	   modelZ
help_textsr   r+   r.   r5   rQ   r[   r\   Zget_empty_value_displayempty_value_display)r7   r.   r+   rQ   r5   
class_namer   rb   r&   r&   r'   r8      s(    !					zAdminReadonlyField.__init__c             C   sK   i  } |  j  s d | d <n  |  j d } t d t |  t t |    S)Nr]   r    r   z<label{}>{}:</label>)rQ   r+   r   r   r   r   )r7   r_   r   r&   r&   r'   ra      s    		zAdminReadonlyField.label_tagc       
      C   s  d d l  m } |  j d |  j j |  j } } } y t | | |  \ } } } Wn$ t t t	 f k
 ry |  j
 } Yn X| d  k rt | d d  }	 |	 r | |  } qxt | d  r | } qxt |  } t | d d  rt j d | t  t |  } qxt |  } nc t | j t  rW| d  k	 rWd	 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.safestring.format_html(), format_html_join(), or mark_safe() instead.z, )Z,django.contrib.admin.templatetags.admin_listri   r+   r.   instancer5   r
   AttributeError
ValueErrorr   rg   getattrrM   r   warningswarnr   r   r   rN   Zremote_fieldr   rC   mapr   rO   rP   r   r   )
r7   ri   r+   objr5   r-   attrr(   Zresult_reprrj   r&   r&   r'   r^      s2    $	$zAdminReadonlyField.contents)r!   r"   r#   r8   ra   r^   r&   r&   r&   r'   rS      s    	rS   c               @   s[   e  Z d  Z d Z d d d 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   sd   | |  _  | |  _ | |  _ | |  _ | d  k r9 f  } n  | |  _ | d  k rW i  } n  | |  _ d  S)N)optsformsetr2   r5   r6   r4   )r7   r]   rv   r2   r4   r6   r5   r&   r&   r'   r8      s    							zInlineAdminFormSet.__init__c             c   s   xs t  |  j j |  j j    D]S \ } } |  j j |  } t |  j | |  j |  j | |  j	 d |  j d | Vq WxC |  j j
 D]5 } t |  j | |  j |  j d  |  j	 d |  j Vq Wt |  j |  j j |  j |  j d  |  j	 d |  j Vd  S)Nr5   view_on_site_url)ziprv   Zinitial_formsZget_querysetru   Zget_view_on_site_urlInlineAdminFormr2   r4   r6   Zextra_formsZ
empty_form)r7   r.   originalrw   r&   r&   r'   r<      s    +zInlineAdminFormSet.__iter__c             c   s   t  |  j d d   } x t t |  j   D] \ } } | rR | j | k rR q+ n  | |  j k r i t | |  j j	 |  j  d 6i d d 6d 6d d 6t
 | |  j j	  d 6Vq+ |  j j j | Vq+ Wd  S)Nfkr   FrK   r   r   rb   )rn   rv   rR   r   r2   r:   r6   r	   ru   rf   r   r.   Zbase_fields)r7   r{   rU   r1   r&   r&   r'   rB     s    "zInlineAdminFormSet.fieldsc             C   s8   |  j  j |  j j } x |  D] } | | j } q W| S)N)ru   r=   rv   )r7   r=   r>   r&   r&   r'   r?     s    zInlineAdminFormSet._media)
r!   r"   r#   __doc__r8   r<   rB   r?   r@   r=   r&   r&   r&   r'   rt      s   rt   c                   s   e  Z d  Z d Z d d d   f d d  Z e d d    Z d d   Z d	 d
   Z d d   Z	 d d   Z
 d d   Z d d   Z   S)ry   zF
    A wrapper around an inline form for use in the admin system.
    Nc	       	         s_   | |  _  | |  _ | |  _ | o* | d  k	 |  _ | |  _ t t |   j | | | | |  d  S)N)rv   r5   rz   show_urlZabsolute_urlsuperry   r8   )	r7   rv   r.   r2   r4   rz   r6   r5   rw   )	__class__r&   r'   r8     s    				zInlineAdminForm.__init__c             C   sU   t  j d t d d |  j d  k	 rK d d l m } | j j |  j  j St	  d  S)NzInlineAdminForm.original_content_type_id is deprecated and will be removed in Django 1.10. If you were using this attribute to construct the "view on site" URL, use the `absolute_url` attribute instead.
stacklevel   r   )ContentType)
ro   rp   r   rz   Z"django.contrib.contenttypes.modelsr   ZobjectsZget_for_modelpkrl   )r7   r   r&   r&   r'   original_content_type_id(  s    z(InlineAdminForm.original_content_type_idc          	   c   sG   x@ |  j  D]5 \ } } t |  j |  j | |  j d |  j | Vq
 Wd  S)Nr5   )r2   InlineFieldsetrv   r.   r6   r5   )r7   r:   r;   r&   r&   r'   r<   7  s    zInlineAdminForm.__iter__c             C   si   |  j  j j j j s. |  j  j j j j j r2 d Sx0 |  j  j j j j   D] } | j j rK d SqK Wd S)NTF)r.   rd   rf   Zhas_auto_fieldr   editableZget_parent_list)r7   parentr&   r&   r'   needs_explicit_pk_field<  s    .z'InlineAdminForm.needs_explicit_pk_fieldc             C   s   t  |  j |  j j j d  S)NF)rT   r.   rv   Z	_pk_fieldr:   )r7   r&   r&   r'   pk_fieldG  s    zInlineAdminForm.pk_fieldc             C   s9   t  |  j d d   } | r1 t |  j | j d  Sd Sd  S)Nr{   Fr   )rn   rv   rT   r.   r:   )r7   r{   r&   r&   r'   fk_fieldJ  s    zInlineAdminForm.fk_fieldc             C   s#   d d l  m } t |  j | d  S)Nr   )DELETION_FIELD_NAMEF)django.forms.formsetsr   rT   r.   )r7   r   r&   r&   r'   deletion_fieldQ  s    zInlineAdminForm.deletion_fieldc             C   s#   d d l  m } t |  j | d  S)Nr   )ORDERING_FIELD_NAMEF)r   r   rT   r.   )r7   r   r&   r&   r'   ordering_fieldU  s    zInlineAdminForm.ordering_field)r!   r"   r#   r|   r8   r   r   r<   r   r   r   r   r   r&   r&   )r   r'   ry     s   	ry   c                   s.   e  Z d  Z   f d d   Z d d   Z   S)r   c                s&   | |  _  t t |   j | |   d  S)N)rv   r~   r   r8   )r7   rv   argskwargs)r   r&   r'   r8   [  s    	zInlineFieldset.__init__c             c   sh   t  |  j d d   } xL |  j D]A } | r@ | j | k r@ q n  t |  j | |  j d |  j Vq Wd  S)Nr{   r5   )rn   rv   rB   r:   rJ   r.   r6   r5   )r7   r{   r+   r&   r&   r'   r<   _  s    zInlineFieldset.__iter__)r!   r"   r#   r8   r<   r&   r&   )r   r'   r   Z  s   r   c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminErrorListzN
    Stores all errors for the form/formsets in an add/change stage view.
    c                s   t  t |   j   | j r |  j | j j    xK | D]@ } |  j | j    x$ | j D] } |  j | j    q\ Wq9 Wn  d  S)N)r~   r   r8   Zis_boundextendrW   valuesZnon_form_errors)r7   r.   Zinline_formsetsZinline_formsetZerrors_in_inline_form)r   r&   r'   r8   l  s    	zAdminErrorList.__init__)r!   r"   r#   r|   r8   r&   r&   )r   r'   r   h  s   r   );
__future__r   ro   Zdjangor   Zdjango.confr   Z.django.contrib.admin.templatetags.admin_staticr   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   r   Zdjango.utils.encodingr   r   Zdjango.utils.functionalr   Zdjango.utils.htmlr   r   Zdjango.utils.safestringr   Zdjango.utils.translationr   r$   ZACTION_CHECKBOX_NAMEZFormr   rZ   Zcheckboxobjectr*   r9   rJ   rT   rS   rt   ry   r   utilsZ	ErrorListr   r&   r&   r&   r'   <module>   s8   (N8@