
u^<                 @   s  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 m Z d  d
 l m Z d  d l m Z m Z d Z Gd d   d e j  Z e j  d d i d d    Z! Gd d   d  Z" Gd d   d  Z# Gd d   d  Z$ Gd d   d  Z% Gd d   d  Z& Gd d   d  Z' Gd d    d  e"  Z( Gd! d"   d" e#  Z) Gd# d$   d$ e j* j+  Z, d S)%    N)forms)settings)display_for_fieldflatten_fieldsetshelp_text_for_fieldlabel_for_fieldlookup_field)ObjectDoesNotExist)ManyToManyRel)flatatt)capfirstlinebreaksbr)conditional_escapeformat_html)	mark_safe)gettextgettext_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 d	 d
 i   Z	 d S)
ActionFormlabelzAction: requiredFinitialr   widgetclasszselect-acrossN)
__name__
__module____qualname__r   ZChoiceField_actionZBooleanFieldZHiddenInputZselect_across r   r   >/tmp/pip-build-8lau8j11/django/django/contrib/admin/helpers.pyr      s   	r   r   zaction-selectc             C   s   d S)NFr   )valuer   r   r    <lambda>   s    r"   c               @   sd   e  Z d  Z d d d d  Z d d   Z e d d    Z e d d	    Z e d
 d    Z d S)	AdminFormNc                s]     | |  _  |  _   f d d   | j   D |  _ | |  _ | d  k rP f  } | |  _ d  S)Nc                s?   g  |  ]5 \ } } d    | d   f d d   | D i  q S)fielddependenciesc                s   g  |  ] }   |  q Sr   r   ).0f)formr   r    
<listcomp>&   s   	 z1AdminForm.__init__.<locals>.<listcomp>.<listcomp>r   )r&   
field_namer%   )r(   r   r    r)   $   s   	z&AdminForm.__init__.<locals>.<listcomp>)r(   	fieldsetsitemsprepopulated_fieldsmodel_adminreadonly_fields)selfr(   r+   r-   r/   r.   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)Nr/   r.   )r+   Fieldsetr(   r/   r.   )r0   nameoptionsr   r   r    __iter__-   s    	zAdminForm.__iter__c             C   s
   |  j  j S)N)r(   errors)r0   r   r   r    r6   6   s    zAdminForm.errorsc             C   s
   |  j  j S)N)r(   non_field_errors)r0   r   r   r    r7   :   s    zAdminForm.non_field_errorsc             C   s.   |  j  j } x |  D] } | | j } q W| S)N)r(   media)r0   r8   fsr   r   r    r8   >   s    zAdminForm.media)	r   r   r   r1   r5   propertyr6   r7   r8   r   r   r   r    r#   !   s
   	r#   c               @   sL   e  Z d  Z d f  f  f  d d d d  Z e d d    Z d d   Z d S)r2   Nc             C   sM   | |  _  | | |  _ |  _ d j |  |  _ | |  _ | |  _ | |  _ d  S)N )r(   r3   fieldsjoinclassesdescriptionr.   r/   )r0   r(   r3   r/   r<   r>   r?   r.   r   r   r    r1   G   s    			zFieldset.__init__c             C   sE   d |  j  k r; t j r d n d } t j d d | g  St j   S)NZcollapser   z.minZjszadmin/js/collapse%s.js)r>   r   DEBUGr   ZMedia)r0   extrar   r   r    r8   P   s    zFieldset.mediac             c   s8   x1 |  j  D]& } t |  j | |  j d |  j Vq
 Wd  S)Nr.   )r<   	Fieldliner(   r/   r.   )r0   r$   r   r   r    r5   W   s    zFieldset.__iter__)r   r   r   r1   r:   r8   r5   r   r   r   r    r2   F   s   r2   c               @   s:   e  Z d  Z d d d d  Z d d   Z d d   Z d S)rB   Nc                s   |   _  t | d  s( t | t  r7 | g   _ n	 |   _ t   f d d     j D    _ |   _ | d  k r f  } |   _ d  S)Nr5   c             3   s7   |  ]- } |   j  j k o.   j  j | j j Vq d  S)N)r(   r<   r   	is_hidden)r&   r$   )r0   r   r    	<genexpr>d   s   z%Fieldline.__init__.<locals>.<genexpr>)	r(   hasattr
isinstancestrr<   allZhas_visible_fieldr.   r/   )r0   r(   r$   r/   r.   r   )r0   r    r1   ]   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   r.   )	enumerater<   r/   AdminReadonlyFieldr(   r.   
AdminField)r0   ir$   r   r   r    r5   l   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)r/   r(   r6   as_ul)r&   r'   )r0   r   r    rD   v   s    z#Fieldline.errors.<locals>.<genexpr>)r   r=   r<   strip)r0   r   )r0   r    r6   s   s    zFieldline.errors)r   r   r   r1   r5   r6   r   r   r   r    rB   \   s   rB   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)rL   c             C   sA   | | |  _  | |  _ t |  j  j  j t j  |  _ d |  _ d  S)NF)r$   rI   rF   r   r   CheckboxInputis_checkboxis_readonly)r0   r(   r$   rI   r   r   r    r1   |   s    	zAdminField.__init__c             C   s   g  } t  |  j j  } |  j r. | j d  |  j j j rJ | j d  |  j s` | j d  | r{ d d j |  i n i  } |  j j d t	 |  d | d |  j r d	 n d   S)
NZvCheckboxLabelr   inliner   r;   contentsattrslabel_suffixr   )
r   r$   r   rR   appendr   rI   r=   	label_tagr   )r0   r>   rU   rV   r   r   r    rY      s    		!zAdminField.label_tagc             C   s   t  |  j j j    S)N)r   r$   r6   rO   )r0   r   r   r    r6      s    zAdminField.errorsN)r   r   r   r1   rY   r6   r   r   r   r    rL   {   s   rL   c               @   s7   e  Z d  Z d d d  Z d d   Z d d   Z d S)rK   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 r | | j j k r | j j | } n t | | j j  } d | d | d | d | i |  _ | |  _	 | |  _
 | |  _ d |  _ d	 |  _ | j   |  _ d  S)
Nz<lambda>r   r(   r3   r   	help_textr$   FT)callabler   _metalabelsr   model
help_textsr   r$   r(   r.   rI   rR   rS   Zget_empty_value_displayempty_value_display)r0   r(   r$   rI   r.   
class_namer   rZ   r   r   r    r1      s&    !					zAdminReadonlyField.__init__c             C   sK   i  } |  j  s d | d <|  j d } t d t |  t |  |  j j  S)NrT   r   r   z<label{}>{}{}</label>)rI   r$   r   r   r   r(   rW   )r0   rV   r   r   r   r    rY      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| |  j j k r |  j | j j }	 t |	 d d  r |	 j | |  S| d  k rt | d d  r | |  } qut | d  r| } qut |  } n` t | j t  rT| d  k	 rTd j t t | j     } n t | | |  j
  } t |  } t |  S)	Nr   )_boolean_iconr$   Z	read_onlyFbooleanZ__html__z, )Z,django.contrib.admin.templatetags.admin_listrb   r$   r(   instancer.   r   AttributeError
ValueErrorr	   r`   r<   r   getattrrenderrE   r   rF   Zremote_fieldr
   r=   maprG   rH   r   r   )
r0   rb   r$   objr.   r'   attrr!   Zresult_reprr   r   r   r    rU      s*    $	!zAdminReadonlyField.contents)r   r   r   r1   rY   rU   r   r   r   r    rK      s    rK   c            	   @   s   e  Z d  Z d Z d d d d d d 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   s   | |  _  | |  _ | |  _ | |  _ | d  k r6 f  } | |  _ | d  k rQ i  } | |  _ | j ru d j | j  n d |  _ | |  _ | |  _	 |	 |  _
 |
 |  _ d  S)Nr;   r   )optsformsetr+   r.   r/   r-   r>   r=   has_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission)r0   rT   rn   r+   r-   r/   r.   ro   rp   rq   rr   r   r   r    r1      s    						$			zInlineAdminFormSet.__init__c             c   s&  |  j  r |  j } n |  j t |  j  } xp t |  j j |  j j    D]P \ } } |  j j	 |  } t
 |  j | |  j |  j | | d |  j d | VqJ WxC |  j j D]5 } t
 |  j | |  j |  j d  |  j d |  j Vq W|  j r"t
 |  j |  j j |  j |  j d  |  j d |  j Vd  S)Nr.   view_on_site_url)rp   r/   r   r+   ziprn   Zinitial_formsZget_querysetrm   Zget_view_on_site_urlInlineAdminFormr-   Zextra_formsro   
empty_form)r0   Zreadonly_fields_for_editingr(   originalrs   r   r   r    r5      s$    	+	zInlineAdminFormSet.__iter__c       	      c   s  t  |  j d d   } |  j j } | j j p0 i  } | j j pB i  } x7t t |  j   D] \ } } | r | j	 | k r q[ |  j
 s | |  j k rd | d | j |  p t | |  j j |  j d | d d d i d d d	 | j |  pt | |  j j  i Vq[ | j | } | j } | d  k rOt | |  j j |  j d | } d | d | d | j d | j d	 | j i Vq[ Wd  S)
Nfkr3   r   r(   r   rC   Fr   rZ   )rg   rn   rv   r\   r]   r_   rJ   r   r+   r3   rp   r/   getr   rm   r^   r   r<   r   r   r   rZ   )	r0   rx   rv   Zmeta_labelsZmeta_help_textsrM   r*   Z
form_fieldr   r   r   r    r<     s4    "		,	!		zInlineAdminFormSet.fieldsc             C   sc   |  j  j } t j d d |  j j d d |  j j d t d  d t |  i d t d	  i i  S)
Nr3   z#%sr4   prefixZaddTextzAdd another %(verbose_name)sverbose_nameZ
deleteTextZRemove)rm   r{   jsondumpsrn   rz   r   r   )r0   r{   r   r   r    inline_formset_data2  s    z&InlineAdminFormSet.inline_formset_datac             C   s
   |  j  j S)N)rn   r   )r0   r   r   r    r   ?  s    zInlineAdminFormSet.formsc             C   s
   |  j  j S)N)rn   non_form_errors)r0   r   r   r    r   C  s    z"InlineAdminFormSet.non_form_errorsc             C   s8   |  j  j |  j j } x |  D] } | | j } q W| S)N)rm   r8   rn   )r0   r8   r9   r   r   r    r8   G  s    zInlineAdminFormSet.media)r   r   r   __doc__r1   r5   r<   r~   r:   r   r   r8   r   r   r   r    rl      s   	"rl   c                   sy   e  Z d  Z d Z d d d   f d d  Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
   S)ru   zF
    A wrapper around an inline form for use in the admin system.
    Nc	       	         sY   | |  _  | |  _ | |  _ | o* | d  k	 |  _ | |  _ t   j | | | | |  d  S)N)rn   r.   rw   show_urlZabsolute_urlsuperr1   )	r0   rn   r(   r+   r-   rw   r/   r.   rs   )	__class__r   r    r1   S  s    				zInlineAdminForm.__init__c          	   c   sG   x@ |  j  D]5 \ } } t |  j |  j | |  j d |  j | Vq
 Wd  S)Nr.   )r+   InlineFieldsetrn   r(   r/   r.   )r0   r3   r4   r   r   r    r5   \  s    zInlineAdminForm.__iter__c             C   sW   |  j  j j j j pV |  j  j j j j j pV t d d   |  j  j j j j   D  S)Nc             s   s1   |  ]' } | j  j p( | j  j j  j j Vq d  S)N)r\   
auto_fieldr^   pkeditable)r&   parentr   r   r    rD   j  s   z:InlineAdminForm.needs_explicit_pk_field.<locals>.<genexpr>)r(   r\   r^   r   r   r   anyZget_parent_list)r0   r   r   r    needs_explicit_pk_fieldc  s    .z'InlineAdminForm.needs_explicit_pk_fieldc             C   s   t  |  j |  j j j d  S)NF)rL   r(   rn   Z	_pk_fieldr3   )r0   r   r   r    pk_fieldn  s    zInlineAdminForm.pk_fieldc             C   s9   t  |  j d d   } | r1 t |  j | j d  Sd Sd  S)Nrx   Fr   )rg   rn   rL   r(   r3   )r0   rx   r   r   r    fk_fieldq  s    zInlineAdminForm.fk_fieldc             C   s#   d d l  m } t |  j | d  S)Nr   )DELETION_FIELD_NAMEF)django.forms.formsetsr   rL   r(   )r0   r   r   r   r    deletion_fieldx  s    zInlineAdminForm.deletion_fieldc             C   s#   d d l  m } t |  j | d  S)Nr   )ORDERING_FIELD_NAMEF)r   r   rL   r(   )r0   r   r   r   r    ordering_field|  s    zInlineAdminForm.ordering_field)r   r   r   r   r1   r5   r   r   r   r   r   r   r   )r   r    ru   O  s   ru   c                   s.   e  Z d  Z   f d d   Z d d   Z   S)r   c                s    | |  _  t   j | |   d  S)N)rn   r   r1   )r0   rn   argskwargs)r   r   r    r1     s    	zInlineFieldset.__init__c             c   sc   t  |  j d d   } xG |  j D]< } | s; | j | k r t |  j | |  j d |  j Vq Wd  S)Nrx   r.   )rg   rn   r<   r3   rB   r(   r/   r.   )r0   rx   r$   r   r   r    r5     s    zInlineFieldset.__iter__)r   r   r   r1   r5   r   r   )r   r    r     s   r   c                   s(   e  Z d  Z d Z   f d d   Z   S)AdminErrorListz9Store errors for the form/formsets in an add/change view.c                s{   t    j   | j rw |  j | j j    xH | D]@ } |  j | j    x$ | j D] } |  j | j    qV Wq3 Wd  S)N)r   r1   Zis_boundextendr6   valuesr   )r0   r(   Zinline_formsetsZinline_formsetZerrors_in_inline_form)r   r   r    r1     s    	zAdminErrorList.__init__)r   r   r   r   r1   r   r   )r   r    r     s   r   )-r|   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.utils.htmlr   r   Zdjango.utils.safestringr   Zdjango.utils.translationr   r   r   ZACTION_CHECKBOX_NAMEZFormr   rQ   Zcheckboxr#   r2   rB   rL   rK   rl   ru   r   utilsZ	ErrorListr   r   r   r   r    <module>   s,   (
%Gp2