o
    hZ?                     @   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#   d/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/django/contrib/admin/helpers.pyr      s    
r   r   zaction-selectc                 C   s   dS NFr#   )valuer#   r#   r$   <lambda>    s    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 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>(   s    z1AdminForm.__init__.<locals>.<listcomp>.<listcomp>)fielddependenciesr#   )r*   
field_namer0   r,   r#   r$   r.   &   s
    
z&AdminForm.__init__.<locals>.<listcomp>r#   )r-   	fieldsetsitemsprepopulated_fieldsmodel_adminreadonly_fields)selfr-   r2   r4   r6   r5   r#   r,   r$   __init__$   s   

zAdminForm.__init__c                 c   s6    | j D ]\}}t| j|f| j| jd|V  qd S )N)r6   r5   )r2   Fieldsetr-   r6   r5   r7   nameoptionsr#   r#   r$   __iter__/   s   
zAdminForm.__iter__c                 C      | j jS N)r-   errorsr7   r#   r#   r$   r@   8      zAdminForm.errorsc                 C   r>   r?   )r-   non_field_errorsrA   r#   r#   r$   rC   <   rB   zAdminForm.non_field_errorsc                 C   s    | j j}| D ]}||j }q|S r?   )r-   mediar7   rD   fsr#   r#   r$   rD   @   s   zAdminForm.mediaNN)	r   r   r    r8   r=   propertyr@   rC   rD   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 )
r9   Nr#   c                 C   s6   || _ ||| _| _d|| _|| _|| _|| _d S )N )r-   r;   fieldsjoinclassesdescriptionr5   r6   )r7   r-   r;   r6   rJ   rL   rM   r5   r#   r#   r$   r8   I   s   
zFieldset.__init__c                 C   s    d| j v rtjdgdS t S )NZcollapsezadmin/js/collapse.js)js)rL   r   ZMediarA   r#   r#   r$   rD   R   s   
zFieldset.mediac                 c   s*    | j D ]}t| j|| j| jdV  qd S )Nr5   )rJ   	Fieldliner-   r6   r5   )r7   r/   r#   r#   r$   r=   X   s   
zFieldset.__iter__)Nr#   r#   r#   NN)r   r   r    r8   rH   rD   r=   r#   r#   r#   r$   r9   H   s    
	
r9   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	rP   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 r?   )r-   rJ   r   	is_hidden)r*   r/   rA   r#   r$   	<genexpr>d   s
    
z%Fieldline.__init__.<locals>.<genexpr>r#   )	r-   hasattr
isinstancestrrJ   allZhas_visible_fieldr5   r6   )r7   r-   r/   r6   r5   r#   rA   r$   r8   ^   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_firstr5   )rW   )	enumeraterJ   r6   AdminReadonlyFieldr-   r5   
AdminField)r7   ir/   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 vr j| j V  qd S r?   )r6   r-   r@   as_ulr)   rA   r#   r$   rR   v   s     z#Fieldline.errors.<locals>.<genexpr>)r   rK   rJ   striprA   r#   rA   r$   r@   t   s   zFieldline.errorsrG   )r   r   r    r8   r=   r@   r#   r#   r#   r$   rP   ]   s    
rP   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )rZ   c                 C   s.   || | _ || _t| j j jtj| _d| _d S r%   )r/   rW   rT   r   r   CheckboxInputis_checkboxis_readonly)r7   r-   r/   rW   r#   r#   r$   r8   }   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   rI   r   )contentsattrslabel_suffix)
r   r/   r   r`   appendr   rW   rK   	label_tagr   )r7   rL   rc   rd   r#   r#   r$   rg      s   



zAdminField.label_tagc                 C   s   t | jj S r?   )r   r/   r@   r]   rA   r#   r#   r$   r@      s   zAdminField.errorsN)r   r   r    r8   rg   r@   r#   r#   r#   r$   rZ   |   s    rZ   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )rY   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}||||d| _|| _	|| _
|| _d| _d| _| | _d S )Nr'   r   r,   )r;   r   	help_textr/   FT)callabler   _metalabelsr   model
help_textsr   r/   r-   r5   rW   r`   ra   Zget_empty_value_displayempty_value_display)r7   r-   r/   rW   r5   
class_namer   rh   r#   r#   r$   r8      s(   zAdminReadonlyField.__init__c                 C   s6   i }| j s	d|d< | jd }tdt|t|| jjS )Nrb   r   r   z<label{}>{}{}</label>)rW   r/   r   r   r   r-   re   )r7   rd   r   r#   r#   r$   rg      s
   
zAdminReadonlyField.label_tagc                 C   sV   d|j jj|j jjf }zt|t|jgd}td||W S  ty*   t	| Y S w )Nzadmin:%s_%s_change)argsz<a href="{}">{}</a>)
rl   rj   Z	app_labelZ
model_namer   r   pkr   r   rU   )r7   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_listru   r/   r-   instancer5   r   AttributeError
ValueErrorr	   rn   rJ   r   getattrrenderrS   r   rT   rr   r   rK   maprU   rV   r
   r   rt   r   r   )
r7   ru   r/   objr5   r+   attrr&   Zresult_reprr   r#   r#   r$   rc      s<   
zAdminReadonlyField.contentsr?   )r   r   r    r8   rg   rt   rc   r#   r#   r#   r$   rY      s
    
 rY   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
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#   rI   r   )optsformsetr2   r5   r6   r4   rL   rK   has_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission)r7   rb   r   r2   r4   r6   r5   r   r   r   r   r#   r#   r$   r8      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)r5   view_on_site_urlrO   )r   r6   r   r2   zipr   Zinitial_formsZget_querysetr   Zget_view_on_site_urlInlineAdminFormr4   Zextra_formsr   
empty_form)r7   Zreadonly_fields_for_editingr-   originalr   r#   r#   r$   r=     s.   




zInlineAdminFormSet.__iter__c           	      c   s    t | jdd }| jj}|jjpi }|jjpi }tt| jD ][\}}|r+|j	|kr+q| j
r3|| jv rW|||pCt|| jj| j|dddid||pRt|| jjdV  q|j| }|j}|d u rnt|| jj| j|d}|||j|j|jdV  qd S )Nfkr,   rQ   F)r;   r   r   r   rh   )rz   r   r   rj   rk   rm   rX   r   r2   r;   r   r6   getr   r   rl   r   rJ   r   r   r   rh   )	r7   r   r   Zmeta_labelsZmeta_help_textsr[   r1   Z
form_fieldr   r#   r#   r$   rJ   !  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   )r7   r   r#   r#   r$   inline_formset_dataC  s   
z&InlineAdminFormSet.inline_formset_datac                 C   r>   r?   )r   r   rA   r#   r#   r$   r   P  rB   zInlineAdminFormSet.formsc                 C   r>   r?   )r   non_form_errorsrA   r#   r#   r$   r   T  rB   z"InlineAdminFormSet.non_form_errorsc                 C   s(   | j j| jj }| D ]}||j }q
|S r?   )r   rD   r   rE   r#   r#   r$   rD   X  s   zInlineAdminFormSet.media)NNNTTTT)r   r   r    __doc__r8   r=   rJ   r   rH   r   r   rD   r#   r#   r#   r$   r      s     
"

r   c                       sT   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 u| _|| _t ||||| d S r?   )r   r5   r   show_urlZabsolute_urlsuperr8   )	r7   r   r-   r2   r4   r   r6   r5   r   	__class__r#   r$   r8   d  s   zInlineAdminForm.__init__c                 c   s:    | j D ]\}}t| j| j|| jfd| ji|V  qd S )Nr5   )r2   InlineFieldsetr   r-   r6   r5   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?   )rj   
auto_fieldrl   rq   editable)r*   parentr#   r#   r$   rR   {  s     z:InlineAdminForm.needs_explicit_pk_field.<locals>.<genexpr>)r-   rj   rl   r   rq   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%   )rZ   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 )Nr   Fr   )rz   r   rZ   r-   r;   )r7   r   r#   r#   r$   fk_field  s   zInlineAdminForm.fk_fieldc                 C      ddl m} t| j|dS )Nr   )DELETION_FIELD_NAMEF)django.forms.formsetsr   rZ   r-   )r7   r   r#   r#   r$   deletion_field     zInlineAdminForm.deletion_fieldc                 C   r   )Nr   )ORDERING_FIELD_NAMEF)r   r   rZ   r-   )r7   r   r#   r#   r$   ordering_field  r   zInlineAdminForm.ordering_field)NNN)r   r   r    r   r8   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|i | d S r?   )r   r   r8   )r7   r   rp   kwargsr   r#   r$   r8     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   rO   )rz   r   rJ   r;   rP   r-   r6   r5   )r7   r   r/   r#   r#   r$   r=     s   
zInlineFieldset.__iter__)r   r   r    r8   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 r?   )r   r8   Zis_boundextendr@   valuesr   )r7   r-   Zinline_formsetsZinline_formsetZerrors_in_inline_formr   r#   r$   r8     s   

zAdminErrorList.__init__)r   r   r    r   r8   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.htmlr   r   Zdjango.utils.safestringr   Zdjango.utils.translationr   r   r!   ZACTION_CHECKBOX_NAMEZFormr   r_   Zcheckboxr(   r9   rP   rZ   rY   r   r   r   utilsZ	ErrorListr   r#   r#   r#   r$   <module>   s.     
%Wp2