o
    [hH                     @   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 d d
lmZmZ d dlmZ d dlm Z  d dlm!Z" dZ#G dd dej$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)cached_property)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$   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/django/contrib/admin/helpers.pyr      s    
r   c                   @   sf   e Zd Z		dddZdd Zdd Zedd	 Zed
d Zedd Z	edd Z
edd ZdS )	AdminFormNc                    sB    || _ | _ fdd| D | _|| _|d u rd}|| _d S )Nc                    s,   g | ]\}} |  fd d|D dqS )c                    s   g | ]} | qS r$   r$   .0fformr$   r%   
<listcomp>3   s    z1AdminForm.__init__.<locals>.<listcomp>.<listcomp>)fielddependenciesr$   )r(   
field_namer.   r*   r$   r%   r,   2   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   s$   d| j j d| jj j d| jdS )N<z: form=z fieldsets=>)	__class__r!   r+   r0   r5   r$   r$   r%   __repr__;   s   zAdminForm.__repr__c                 c   s6    | j D ]\}}t| j|f| j| jd|V  qd S )N)r4   r3   )r0   Fieldsetr+   r4   r3   r5   nameoptionsr$   r$   r%   __iter__B   s   
zAdminForm.__iter__c                 C      | j jS N)r+   errorsr:   r$   r$   r%   rC   L      zAdminForm.errorsc                 C   rA   rB   )r+   non_field_errorsr:   r$   r$   r%   rE   P   rD   zAdminForm.non_field_errorsc                 C   rA   rB   )r+   fieldsr:   r$   r$   r%   rF   T   rD   zAdminForm.fieldsc                 C   rA   rB   )r+   is_boundr:   r$   r$   r%   rG   X   rD   zAdminForm.is_boundc                 C   s    | j j}| D ]}||j7 }q|S rB   )r+   mediar5   rH   fsr$   r$   r%   rH   \   s   zAdminForm.mediaNN)r   r    r!   r6   r;   r@   propertyrC   rE   rF   rG   rH   r$   r$   r$   r%   r&   (   s     





r&   c                   @   sB   e Zd Z						dddZedd Zedd Zd	d
 ZdS )r<   Nr$   c                 C   s6   || _ ||| _| _d|| _|| _|| _|| _d S )N )r+   r>   rF   joinclassesdescriptionr3   r4   )r5   r+   r>   r4   rF   rO   rP   r3   r$   r$   r%   r6   e   s   

zFieldset.__init__c                 C   s   t  S rB   )r   ZMediar:   r$   r$   r%   rH   v   rD   zFieldset.mediac                    s(   t  fdd jjD rdS d jv S )Nc                 3   s    | ]}| j v V  qd S rB   )rF   r(   r-   r:   r$   r%   	<genexpr>|   s    z*Fieldset.is_collapsible.<locals>.<genexpr>Fcollapse)anyr+   rC   rO   r:   r$   r:   r%   is_collapsiblez   s   
zFieldset.is_collapsiblec                 c   s*    | j D ]}t| j|| j| jdV  qd S )Nr3   )rF   	Fieldliner+   r4   r3   )r5   r-   r$   r$   r%   r@      s   

zFieldset.__iter__)Nr$   r$   r$   NN)	r   r    r!   r6   rL   rH   r   rU   r@   r$   r$   r$   r%   r<   d   s    


r<   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	rW   Nc                    sb   | _ t|drt|tr|g _n| _t fdd jD   _| _|d u r,d}| _d S )Nr@   c                 3   s,    | ]}| j jv o j j| jjV  qd S rB   )r+   rF   r   	is_hiddenrQ   r:   r$   r%   rR      s
    
z%Fieldline.__init__.<locals>.<genexpr>r$   )	r+   hasattr
isinstancestrrF   allZhas_visible_fieldr3   r4   )r5   r+   r-   r4   r3   r$   r:   r%   r6      s   

zFieldline.__init__c                 c   sV    t | jD ]"\}}|| jv rt| j||dk| jdV  qt| j||dkdV  qd S )Nr   )is_firstr3   )r]   )	enumeraterF   r4   AdminReadonlyFieldr+   r3   
AdminField)r5   ir-   r$   r$   r%   r@      s   

zFieldline.__iter__c                    s$   t d fdd jD dS )N
c                 3   s*    | ]}| j vr j| j V  qd S rB   )r4   r+   rC   as_ulr'   r:   r$   r%   rR      s    
z#Fieldline.errors.<locals>.<genexpr>)r   rN   rF   stripr:   r$   r:   r%   rC      s   zFieldline.errorsrK   )r   r    r!   r6   r@   rC   r$   r$   r$   r%   rW      s    
	rW   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r`   c                 C   s.   || | _ || _t| j j jtj| _d| _d S NF)r-   r]   rZ   r   r   ZCheckboxInputis_checkboxis_readonly)r5   r+   r-   r]   r$   r$   r%   r6      s   

zAdminField.__init__c                 C   s~   g }t | jj}| jr|d | jjjr|d | js"|d |r+dd|ini }| jjt	||| jr;ddS d dS )NZvCheckboxLabelr   inliner   rM   r   )contentsattrslabel_suffix)
r   r-   r   rf   appendr   r]   rN   	label_tagr   )r5   rO   ri   rj   r$   r$   r%   rm      s    



zAdminField.label_tagc                 C   s   t | jj S rB   )r   r-   rC   rc   r:   r$   r$   r%   rC      s   zAdminField.errorsN)r   r    r!   r6   rm   rC   r$   r$   r$   r%   r`      s    r`   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )r_   Nc           	      C   s   t |r|jdkr|jnd}n|}|jjr"||jjv r"|jj| }n
t||jj||d}|jjr=||jjv r=|jj| }nt||jj}||jv rQ|j| j	j
}nd}|||||d| _|| _|| _|| _d| _d| _| | _d S )Nz<lambda>r   r*   F)r>   r   	help_textr-   rX   T)callabler   _metalabelsr   model
help_textsr   rF   r   rX   r-   r+   r3   r]   rf   rg   Zget_empty_value_displayempty_value_display)	r5   r+   r-   r]   r3   
class_namer   rn   rX   r$   r$   r%   r6      s0   
zAdminReadonlyField.__init__c                 C   s6   i }| j s	d|d< | jd }tdt|t|| jjS )Nrh   r   r   z<label{}>{}{}</label>)r]   r-   r   r   r   r+   rk   )r5   rj   r   r$   r$   r%   rm      s   
zAdminReadonlyField.label_tagc                 C   s^   d|j jj|j jjf }zt|t|jg| jjj	d}t
d||W S  ty.   t| Y S w )Nzadmin:%s_%s_change)argsZcurrent_appz<a href="{}">{}</a>)rr   rp   Z	app_labelZ
model_namer   r   pkr3   Z
admin_siter>   r   r   r[   )r5   remote_fieldZ
remote_objZurl_nameurlr$   r$   r%   get_admin_url   s   
z AdminReadonlyField.get_admin_urlc           
   
   C   sP  ddl m} | jd | jj| j}}}zt|||\}}}W n ttt	fy1   | j
}Y t|S w || jjv rK| j| jj}	t|	ddrK|	||S |d u rpt|ddr]||}t|S t|drh|}t|S t|}t|S t|jtr|d urdtt| }nt|jttfr|d ur| |j|}nt||| j
}t|}t|S )	Nr   )_boolean_iconr-   Z	read_onlyFbooleanZ__html__z, )Z,django.contrib.admin.templatetags.admin_listr{   r-   r+   instancer3   r   AttributeError
ValueErrorr	   rt   rF   r   getattrrenderrY   r   rZ   rx   r   rN   mapr[   r\   r
   r   rz   r   r   )
r5   r{   r-   objr3   r)   attrvalueZresult_reprr   r$   r$   r%   ri   
  sB   

zAdminReadonlyField.contentsrB   )r   r    r!   r6   rm   rz   ri   r$   r$   r$   r%   r_      s
    
&r_   c                   @   s   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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 u rd}|| _|d u ri }|| _|jr'd|jnd| _|| _|| _	|	| _
|
| _d S )Nr$   rM   r   )optsformsetr0   r3   r4   r2   rO   rN   has_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission)r5   rh   r   r0   r2   r4   r3   r   r   r   r   r$   r$   r%   r6   8  s   
zInlineAdminFormSet.__init__c                 c   s    | j r| j}n| jt| j }t| jj| j D ]\}}| j	|}t
| j|| j| j||| j|dV  q| jjD ]}t
| j|| j| jd | j| jdV  q:| jrft
| j| jj| j| jd | j| jdV  d S d S )N)r3   view_on_site_urlrV   )r   r4   r   r0   zipr   Zinitial_formsZget_querysetr   Zget_view_on_site_urlInlineAdminFormr2   Zextra_formsr   
empty_form)r5   Zreadonly_fields_for_editingr+   originalr   r$   r$   r%   r@   U  sR   


	zInlineAdminFormSet.__iter__c           
      c   s   t | jdd }| jj}|jjpi }|jjpi }tt| jD ]k\}}|r+|j	|kr+q| j
r3|| jv rg|j|}d}|d urC|jj}|||pSt|| jj| j|dd|id||pbt|| jjdV  q|j| }|j}	|	d u r~t|| jj| j|d}	||	|j|j|jdV  qd S )NfkFr*   rX   )r>   r   r   r   rn   )r   r   r   rp   rq   rs   r^   r   r0   r>   r   r4   rF   getr   rX   r   r   rr   r   r   r   rn   )
r5   r   r   Zmeta_labelsZmeta_help_textsra   r/   Z
form_fieldZwidget_is_hiddenr   r$   r$   r%   rF     sN   




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   )r5   r   r$   r$   r%   inline_formset_data  s   
z&InlineAdminFormSet.inline_formset_datac                 C   rA   rB   )r   r   r:   r$   r$   r%   r     rD   zInlineAdminFormSet.formsc                 C   s   t | jjrdS d| jv S )NFrS   )rT   r   rC   rO   r:   r$   r$   r%   rU     s   
z!InlineAdminFormSet.is_collapsiblec                 C   s
   | j  S rB   )r   non_form_errorsr:   r$   r$   r%   r     s   
z"InlineAdminFormSet.non_form_errorsc                 C   rA   rB   )r   rG   r:   r$   r$   r%   rG     rD   zInlineAdminFormSet.is_boundc                 C   rA   rB   )r   total_form_countr:   r$   r$   r%   r     rD   z#InlineAdminFormSet.total_form_countc                 C   s(   | j j| jj }| D ]}||j7 }q
|S rB   )r   rH   r   rI   r$   r$   r%   rH     s   zInlineAdminFormSet.media)NNNTTTT)r   r    r!   __doc__r6   r@   rF   r   rL   r   r   rU   r   rG   r   rH   r$   r$   r$   r%   r   3  s0    	
+*



r   c                       sP   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	  Z
S )r   zF
    A wrapper around an inline form for use in the admin system.
    Nc	           	         s>   || _ || _|| _|o|d u| _|| _t ||||| d S rB   )r   r3   r   show_urlZabsolute_urlsuperr6   )	r5   r   r+   r0   r2   r   r4   r3   r   r9   r$   r%   r6     s   
zInlineAdminForm.__init__c                 c   s:    | j D ]\}}t| j| j|| jfd| ji|V  qd S )Nr3   )r0   InlineFieldsetr   r+   r4   r3   r=   r$   r$   r%   r@     s   
zInlineAdminForm.__iter__c                 C   s`   | j jjjjp/| j jjjjj p/| j jjo!| j jjjjj| j jjv p/tdd | j jjjj	D S )Nc                 s   s(    | ]}|j jp|j jj jj V  qd S rB   )rp   
auto_fieldrr   rw   editable)r(   parentr$   r$   r%   rR   	  s
    
z:InlineAdminForm.needs_explicit_pk_field.<locals>.<genexpr>)
r+   rp   rr   r   rw   r   excluder>   rT   Zall_parentsr:   r$   r$   r%   needs_explicit_pk_field  s   
z'InlineAdminForm.needs_explicit_pk_fieldc                 C   s   t | j| jjjdS re   )r`   r+   r   Z	_pk_fieldr>   r:   r$   r$   r%   pk_field  s   zInlineAdminForm.pk_fieldc                 C   s&   t | jdd }|rt| j|jdS dS )Nr   Fr   )r   r   r`   r+   r>   )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)Zdjango.forms.formsetsr   r`   r+   )r5   r   r$   r$   r%   deletion_field  s   zInlineAdminForm.deletion_field)NNN)r   r    r!   r   r6   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|i | d S rB   )r   r   r6   )r5   r   rv   kwargsr   r$   r%   r6      s   zInlineFieldset.__init__c                 c   sF    t | jdd }| jD ]}|r|j|kr t| j|| j| jdV  qd S )Nr   rV   )r   r   rF   r>   rW   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                    sZ   t    |jr)| |j  |D ]}| |  |jD ]	}| |  qqd S d S rB   )r   r6   rG   extendrC   valuesr   )r5   r+   Zinline_formsetsZinline_formsetZerrors_in_inline_formr   r$   r%   r6   0  s   

zAdminErrorList.__init__)r   r    r!   r   r6   r   r$   r$   r   r%   r   -  s    r   )1r   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.functionalr   Zdjango.utils.htmlr   r   Zdjango.utils.safestringr   Zdjango.utils.translationr   r   r"   ZACTION_CHECKBOX_NAMEZFormr   r&   r<   rW   r`   r_   r   r   r   utilsZ	ErrorListr   r$   r$   r$   r%   <module>   s2     
<##k %H