a
    Dg2                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddlmZ G dd deZdS )    N)FieldDoesNotExistImproperlyConfigured)
ForeignKey)ModelChoiceIterator)get_template)cached_property)capfirst)compare)registry)
BlockField   )Panelc                       s   e Zd ZdZdZd fdd	Z fddZd	d
 Zdd Ze	dd Z
edd Z fddZdd ZG dd dejZ  ZS )
FieldPanelZfield_panelz)wagtailadmin/panels/read_only_output.htmlNFc                    s4   t  jf i | || _|| _|| _|| _|| _d S N)super__init__
field_namewidgetdisable_comments
permission	read_only)selfr   r   r   r   r   kwargs	__class__ _/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/admin/panels/field_panel.pyr      s    	zFieldPanel.__init__c                    s,   t   }|j| j| j| j| j| jd |S )N)r   r   r   r   r   )r   clone_kwargsupdater   r   r   r   r   r   r   r   r   r   r   %   s    
zFieldPanel.clone_kwargsc                 C   sF   | j r
i S d| jgi}| jr,| j| ji|d< | jrB| j| ji|d< |S )NfieldsZwidgetsZfield_permissions)r   r   r   r   )r   optsr   r   r   get_form_options0   s    zFieldPanel.get_form_optionsc                 C   sd   zJ| j }|jrtjW S tj|}|r,|W S |jrH|jr@tjW S tj	W S W n t
y\   Y n0 tjS r   )db_fieldchoicesr	   ZChoiceFieldComparisonZcomparison_class_registrygetZis_relationZmany_to_manyZM2MFieldComparisonZForeignObjectComparisonr   ZFieldComparison)r   fieldZcomparison_classr   r   r   get_comparison_class?   s    zFieldPanel.get_comparison_classc                 C   s8   z
| j }W n ty(   td|  Y n0 |j| jS )Nz3%r must be bound to a model before calling db_field)modelAttributeErrorr   Z_meta	get_fieldr   )r   r(   r   r   r   r#   U   s    

zFieldPanel.db_fieldc                 C   s   | j S r   )r   r   r   r   r   
clean_name`   s    zFieldPanel.clean_namec                    sh   t | j dd}t|ts\|r\t|  fddt|ttfrHt|n|fD }d|S t	 
|S )zw
        Overrides ``Panel.format_value_for_display()`` to add additional treatment
        for choice fields.
        r$   Nc                    s   g | ]}t  ||qS r   )strr%   ).0vlabelsr   r   
<listcomp>o   s   z7FieldPanel.format_value_for_display.<locals>.<listcomp>z, )getattrr#   Z	formfield
isinstancer   dictlisttuplejoinr   format_value_for_display)r   valuer$   Zdisplay_valuesr   r0   r   r9   d   s    

z#FieldPanel.format_value_for_displayc                 C   s   d | jj| j| jS )Nz<{} '{}' with model={}>)formatr   __name__r   r(   r+   r   r   r   __repr__{   s
    zFieldPanel.__repr__c                       s   e Zd ZdZddddddddddd	d
Z fddZedd Zdd Zdd Z	dd Z
edd Zdd Zedd Zedd Zd( fdd	Zd d! Zd"d# Zd$d% Zd&d' Z  ZS ))zFieldPanel.BoundPanelz$wagtailadmin/panels/field_panel.htmldatetimezlink-externaltagmailZpilcrowdecimalztick-inverse)Z	DateFieldZ	TimeFieldZDateTimeFieldZURLFieldZTaggableManagerZ
EmailFieldZ	TextFieldZRichTextFieldZ
FloatFieldZDecimalFieldZBooleanFieldc                    s   t  jf i | d | _d| _| jd u r,d S z| j| j | _W nR ty   | jjrd| _| jjpnt	| jj
j| _| jjpt	| jj
j| _Y d S 0 | jjr| jj | _| j_n
| jj| _| jjp| jj| _d S NFT)r   r   bound_fieldr   formr   KeyErrorpanelheadingr   r#   Zverbose_name	help_textlabelr   r   r   r   r      s*    



zFieldPanel.BoundPanel.__init__c                 C   s   | j jS r   )rG   r   r+   r   r   r   r      s    z FieldPanel.BoundPanel.field_namec                 C   sF   | j d ur| jd u r| jsdS | jjrB| jrB| jj| jjsBdS dS rC   )rE   rD   r   rG   r   requestuserZhas_permr+   r   r   r   is_shown   s    zFieldPanel.BoundPanel.is_shownc                 C   s   | j d u rdS | j jjS )NF)rD   r&   requiredr+   r   r   r   is_required   s    
z!FieldPanel.BoundPanel.is_requiredc                 C   s,   | j  }| jr(t| jjtr(|d |S )Nzw-panel--nested)rG   classesrD   r4   r&   r   append)r   rP   r   r   r   rP      s    

zFieldPanel.BoundPanel.classesc                 C   s   | j jr| j jS z| j j}W n ty6   | jj}Y n0 t|}t|trpt	
|pVi }|
dd}t|ddS | D ]"}|j}|| jv rx| j|   S qxdS )zQ
            Display a different icon depending on the field's type.
            r   Nicon)rG   rR   r#   r   rD   r&   type
issubclassr   model_field_registryr%   r3   mror<   default_field_icons)r   r&   Z
field_typeZ	overridesr   Zfield_classr   r   r   r   rR      s     

zFieldPanel.BoundPanel.iconc                 C   s   | j r| jS | jjS r   )r   prefixrD   id_for_labelr+   r   r   r   rY      s    z"FieldPanel.BoundPanel.id_for_labelc                 C   s0   | j jd u r"| js"t| jjt S | j j S d S r   )rG   r   r   r4   rD   r&   r   r+   r   r   r   comments_enabled   s    z&FieldPanel.BoundPanel.comments_enabledc                 C   s   t | j| jS r   )r3   instancer   r+   r   r   r   value_from_instance  s    z)FieldPanel.BoundPanel.value_from_instanceNc                    s4   t  |}| jr"||   n||   |S r   )r   get_context_datar   r   get_read_only_context_dataget_editable_context_data)r   Zparent_contextcontextr   r   r   r]     s
    z&FieldPanel.BoundPanel.get_context_datac              	   C   s   g }d| j  }d| j  }g }| jr,|| | jjr| jjj}t|drd| jji}|rfd	||d< |j
| jj| j || jjd}q|| | jjdd	|d	d
}n$i }|rd	||d< | jj|d
}| j||| j|| jot| jjjdddS )N%s-helptextz	%s-errorsrender_with_errorsid aria-describedby)attrserrorstrue)zaria-invalidre   )rf   show_add_comment_buttonT)r&   rendered_fielderror_message_idrI   help_text_idri   )rX   rI   rQ   rD   rg   r&   r   hasattrZauto_idr8   rb   Z	html_namer:   Z	as_widgetrZ   r3   )r   Zwidget_described_by_idsrl   rk   r   Zwidget_attrsrj   r   r   r   r_     sV    





z/FieldPanel.BoundPanel.get_editable_context_datac                 C   sN   |   d| j | j| j| j| j| jd}t| jj}|	|}||d< |S )Nra   )rY   rl   rI   ri   	raw_valueZdisplay_valuerj   )
rY   rX   rI   rZ   r\   rG   r9   r   read_only_output_template_namerender)r   r`   templaterj   r   r   r   r^   K  s    
z0FieldPanel.BoundPanel.get_read_only_context_datac                 C   sF   | j  }|rB|  rBzt|| j jgW S  ty@   g  Y S 0 g S r   )rG   r'   rM   	functoolspartialr#   r   )r   Zcomparator_classr   r   r   get_comparison`  s    

z$FieldPanel.BoundPanel.get_comparisonc                 C   s(   d | jj| j| jj| j| j| jjjS )Nz6<{} '{}' with model={} instance={} request={} form={}>)	r;   r   r<   r   rG   r(   r[   rK   rE   r+   r   r   r   r=   j  s    zFieldPanel.BoundPanel.__repr__)N)r<   
__module____qualname__Ztemplate_namerW   r   propertyr   rM   rO   rP   rR   rY   rZ   r   r\   r]   r_   r^   rt   r=   __classcell__r   r   r   r   
BoundPanel   s>    

%

7
ry   )NNNF)r<   ru   rv   ZTEMPLATE_VARro   r   r   r"   r'   r   r#   rw   r,   r9   r=   r   ry   rx   r   r   r   r   r      s"       


r   )rr   Zdjango.core.exceptionsr   r   Zdjango.db.modelsr   Zdjango.forms.modelsr   Zdjango.template.loaderr   Zdjango.utils.functionalr   Zdjango.utils.textr   Zwagtail.adminr	   Zwagtail.admin.forms.modelsr
   rU   Zwagtail.blocksr   baser   r   r   r   r   r   <module>   s   