o
    ÔèFh¿H  ã                   @   sÖ  d dl 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mZmZ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 dl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(m)Z)m*Z* d dl+m,Z- d dl.m/Z/ ddlm0Z0 dZ1G dd„ de/ƒZ2G dd„ de2ƒZ3G dd„ de2ƒZ4G dd„ de2ƒZ5G d d!„ d!e2ƒZ6G d"d#„ d#e2ƒZ7G d$d%„ d%e2ƒZ8G d&d'„ d'e2ƒZ9G d(d)„ d)e2ƒZ:d*d+„ Z;d,d-„ Z<d3d/d0„Z=d1d2„ Z>dS )4é    N)Úimport_module)Úcleandoc)ÚPath)Úapps)Úadmin)Ústaff_member_required)Úutils)Úremove_non_capturing_groupsÚreplace_metacharactersÚreplace_named_groupsÚreplace_unnamed_groups)ÚImproperlyConfiguredÚViewDoesNotExist)Úmodels)ÚHttp404)ÚEngine)Úget_mod_funcÚget_resolverÚget_urlconf)Ú	safe_join)Úmethod_decorator)Úcached_property)Úfunc_accepts_kwargsÚfunc_accepts_var_argsÚget_func_full_argsÚmethod_has_no_args)Úgettext)ÚTemplateViewé   )Úget_view_name)Ú_Úadd_ÚdeleteÚsaveÚset_c                       s4   e Zd ZdZeeƒ‡ fdd„ƒZ‡ fdd„Z‡  ZS )ÚBaseAdminDocsViewz(
    Base view for admindocs views.
    c                    s8   t jsd| _|  tj |¡¡S tƒ j|g|¢R i |¤ŽS )Nzadmin_doc/missing_docutils.html)	r   Údocutils_is_availableÚtemplate_nameÚrender_to_responser   ÚsiteÚeach_contextÚsuperÚdispatch)ÚselfÚrequestÚargsÚkwargs©Ú	__class__© úW/var/www/html/loop/nvenv/lib/python3.10/site-packages/django/contrib/admindocs/views.pyr,   ,   s   zBaseAdminDocsView.dispatchc                    s$   t ƒ jdi i |¥tj | j¡¥¤ŽS )Nr3   )r+   Úget_context_datar   r)   r*   r.   )r-   r0   r1   r3   r4   r5   4   s   
ÿþÿz"BaseAdminDocsView.get_context_data)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r,   r5   Ú__classcell__r3   r3   r1   r4   r%   '   s
    r%   c                   @   s   e Zd ZdZdS )ÚBookmarkletsViewzadmin_doc/bookmarklets.htmlN)r6   r7   r8   r'   r3   r3   r3   r4   r;   =   s    r;   c                       ó    e Zd ZdZ‡ fdd„Z‡  ZS )ÚTemplateTagIndexViewz!admin_doc/template_tag_index.htmlc              
      ó  g }zt  ¡ }W n	 ty   Y nlw t|j ¡ ƒ}dd„ |jD ƒ}|| D ]W\}}|j ¡ D ]M\}}	t 	|	j
¡\}
}}|
oGt |
dtdƒ| ¡}
|oTt |dtdƒ| ¡}|D ]}t || dtdƒ| ¡||< qW| d¡d }| ||
|||dœ¡ q.q%tƒ jd	i i |¥d|i¥¤ŽS )
Nc                 S   ó   g | ]}d |f‘qS ©Ú r3   ©Ú.0Úlibr3   r3   r4   Ú
<listcomp>M   ó    z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>Útagztag:Ú.éÿÿÿÿ©ÚnameÚtitleÚbodyÚmetaÚlibraryÚtagsr3   )r   Úget_defaultr   ÚsortedÚtemplate_librariesÚitemsÚtemplate_builtinsrP   r   Úparse_docstringr9   Ú	parse_rstr    ÚsplitÚappendr+   r5   )r-   r0   rP   ÚengineÚapp_libsÚbuiltin_libsÚmodule_namerO   Útag_nameÚtag_funcrL   rM   ÚmetadataÚkeyÚtag_libraryr1   r3   r4   r5   D   s<   þÿ
ÿûÿõz%TemplateTagIndexView.get_context_data©r6   r7   r8   r'   r5   r:   r3   r3   r1   r4   r=   A   ó    r=   c                       r<   )ÚTemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc              
      r>   )
Nc                 S   r?   r@   r3   rB   r3   r3   r4   rE   r   rF   z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>Úfilterzfilter:rH   rI   rJ   Úfiltersr3   )r   rQ   r   rR   rS   rT   rU   rg   r   rV   r9   rW   r    rX   rY   r+   r5   )r-   r0   rg   rZ   r[   r\   r]   rO   Úfilter_nameÚfilter_funcrL   rM   r`   ra   rb   r1   r3   r4   r5   i   s@   þÿÿ
ÿûÿóz(TemplateFilterIndexView.get_context_datarc   r3   r3   r1   r4   re   f   rd   re   c                       r<   )ÚViewIndexViewzadmin_doc/view_index.htmlc           	   	      s¤   g }t tƒ ƒ}zt|jƒ}W n ty   g }Y nw |D ]&\}}}}| t|ƒt|ƒd |p/g |r4|gp5g  ¡d |p<g ¡|dœ¡ qt	ƒ j
di i |¥d|i¥¤ŽS )Nú:)Ú	full_nameÚurlÚurl_nameÚ	namespacerK   Úviewsr3   )r   r   Úextract_views_from_urlpatternsÚurl_patternsr   rY   r   Úsimplify_regexÚjoinr+   r5   )	r-   r0   rp   Úurl_resolverÚview_functionsÚfuncÚregexro   rK   r1   r3   r4   r5   �   s"   
ÿûÿ	zViewIndexView.get_context_datarc   r3   r3   r1   r4   rj   �   rd   rj   c                       s,   e Zd ZdZedd„ ƒZ‡ fdd„Z‡  ZS )ÚViewDetailViewzadmin_doc/view_detail.htmlc                 C   sh   t ƒ }t|ƒ | ¡r2t| ƒ\}}ztt|ƒ|ƒW S  ty1   t|ƒ\}}ttt|ƒ|ƒ|ƒ Y S w d S )N)r   r   Ú_is_callbackr   Úgetattrr   ÚImportError)ÚviewÚurlconfÚmodrw   Úklassr3   r3   r4   Ú_get_view_func§   s   úúzViewDetailView._get_view_funcc              	      s²   | j d }|  |¡}|d u rt‚t |j¡\}}}|o%t |dtdƒ| ¡}|o2t |dtdƒ| ¡}|D ]}t || dtdƒ| ¡||< q5tƒ j	di i |¥||||dœ¥¤ŽS )Nr}   zview:Úmodel)rK   ÚsummaryrM   rN   r3   )
r0   r�   r   r   rV   r9   rW   r    r+   r5   )r-   r0   r}   Ú	view_funcrL   rM   r`   ra   r1   r3   r4   r5   ¸   s&   

 
ÿûÿzViewDetailView.get_context_data)r6   r7   r8   r'   Ústaticmethodr�   r5   r:   r3   r3   r1   r4   ry   ¤   s
    
ry   c                       r<   )ÚModelIndexViewzadmin_doc/model_index.htmlc                    s0   dd„ t  ¡ D ƒ}tƒ jdi i |¥d|i¥¤ŽS )Nc                 S   s   g | ]}|j ‘qS r3   )Ú_meta)rC   Úmr3   r3   r4   rE   Ñ   s    z3ModelIndexView.get_context_data.<locals>.<listcomp>r   r3   )r   Ú
get_modelsr+   r5   )r-   r0   Úm_listr1   r3   r4   r5   Ð   s   zModelIndexView.get_context_datarc   r3   r3   r1   r4   r†   Í   rd   r†   c                       r<   )ÚModelDetailViewzadmin_doc/model_detail.htmlc                    sÊ  | j d }z
t | j d ¡}W n ty   ttdƒ| j  ƒ‚w z| |¡}W n ty7   ttdƒ| j  ƒ‚w |j}t 	|j
¡\}}}|oPt |dtdƒ| ¡}|o]t |dtdƒ| ¡}g }	|jD ];}
t|
tjƒr‰|
jjj}|
jjjj}t tdƒ||dœ dtdƒ| ¡}nt|
ƒ}|
j}|	 |
j||p˜d	|
jd
œ¡ qc|jD ]J}
|
jjj}|
jjjj}tdƒ||dœ }|	 d|
j dt tdƒ| dtdƒ|j ¡dœ¡ |	 d|
j dt tdƒ| dtdƒ|j ¡dœ¡ q¢g }|j ¡ D ]�\}}t |¡�st|tt fƒ�r„zt!D ]}| "|¡�rt#‚�q	W n
 t#�y    Y qôw |j
}|�o4t t$|ƒdtdƒ|j ¡}t|tt fƒ�rL|	 |t%|ƒ|�pGd	dœ¡ qôt&|ƒ�rjt'|ƒ�sjt(|ƒ�sj|	 |t%|ƒ|�ped	dœ¡ qôt)|ƒ}d *dd„ |D ƒ¡}| |||�p€d	dœ¡ qô|j+D ]H}tdƒ|j,jj|j,jj-dœ }| .¡ }|	 d| dt tdƒ| dtdƒ|j ¡dœ¡ |	 d| dt tdƒ| dtdƒ|j ¡dœ¡ �qˆt/ƒ j0di i |¥|j1|||	|dœ¥¤ŽS )NÚ
model_nameÚ	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rr‚   zmodel:z0the related `%(app_label)s.%(data_type)s` object)r�   Ú	data_typerA   )rK   rŽ   ÚverboseÚ	help_textz/related `%(app_label)s.%(object_name)s` objects)r�   Úobject_namez%s.allÚListzall %s)rK   rŽ   r�   z%s.countÚIntegerznumber of %sz, c              
   S   s.   g | ]}d   |d gtt|dd… ƒ¢¡‘qS )ú=r   r   N)rt   ÚmapÚrepr)rC   Úarg_elr3   r3   r4   rE   W  s     ÿÿz4ModelDetailView.get_context_data.<locals>.<listcomp>)rK   Ú	argumentsr�   )rK   rƒ   ÚdescriptionÚfieldsÚmethodsr3   )2r0   r   Úget_app_configÚLookupErrorr   r    Ú	get_modelr‡   r   rV   r9   rW   rš   Ú
isinstancer   Ú
ForeignKeyÚremote_fieldr‚   r6   r�   Úget_readable_field_data_typeÚverbose_namerY   rK   r�   Úmany_to_manyrŒ   Ú__dict__rT   ÚinspectÚ
isfunctionr   ÚpropertyÚMODEL_METHODS_EXCLUDEÚ
startswithÚStopIterationr   Úget_return_data_typer   r   r   r   rt   Úrelated_objectsÚrelated_modelr‘   Úget_accessor_namer+   r5   Úlabel)r-   r0   rŒ   Ú
app_configr‚   ÚoptsrL   rM   r`   rš   ÚfieldrŽ   r�   r�   r›   Ú	func_namerw   Úexcluder˜   Úprint_argumentsÚrelÚaccessorr1   r3   r4   r5   Ø   s0  
ÿÿÿ

þÿ
÷üÿ


þÿýÿ	
ýýÿÿÿÿÿÿÿýÿÿþýýÿþÿýÿ€
	þÿýÿ	
ýýÿ
ÿúÿz ModelDetailView.get_context_datarc   r3   r3   r1   r4   r‹   Õ   rd   r‹   c                       r<   )ÚTemplateDetailViewzadmin_doc/template_detail.htmlc           	         sž   | j d }g }zt ¡ }W n	 ty   Y n)w t|jƒD ]"\}}tt||ƒƒ}| ¡ r0| 	¡ }nd}| 
|| ¡ ||dœ¡ qtƒ jdi i |¥||dœ¥¤ŽS )NÚtemplaterA   )ÚfileÚexistsÚcontentsÚorder)rK   Ú	templatesr3   )r0   r   rQ   r   Ú	enumerateÚdirsr   r   r¼   Ú	read_textrY   r+   r5   )	r-   r0   rº   r¿   Údefault_engineÚindexÚ	directoryÚtemplate_fileÚtemplate_contentsr1   r3   r4   r5   Ž  s6   
þ
üÿ
ÿýÿz#TemplateDetailView.get_context_datarc   r3   r3   r1   r4   r¹   ‹  rd   r¹   c                 C   s*   |   d¡r|  d¡rdS |  d¡rdS dS )z9Return a somewhat-helpful data type given a function nameÚget_Ú_listr’   Ú_countr“   rA   )rª   Úendswith)r´   r3   r3   r4   r¬   ´  s   


r¬   c                 C   s   | j | j S )zÑ
    Return the description for a given field type, if it exists. Fields'
    descriptions can contain format strings, which will be interpolated with
    the values of field.__dict__ before being output.
    )r™   r¥   )r³   r3   r3   r4   r¢   ¾  s   r¢   rA   c              	   C   s¾   g }| D ]X}t |dƒr4z|j}W n	 ty   Y qw | t||t|jƒ |p'g |jr.|jgp/g  ƒ¡ qt |dƒrUz| |j	|t|jƒ ||j
f¡ W q tyT   Y qw ttdƒ| ƒ‚|S )z˜
    Return a list of views from a list of urlpatterns.

    Each object in the returned list is a 4-tuple:
    (view_func, regex, namespace, name)
    rr   Úcallbackz,%s does not appear to be a urlpattern object)Úhasattrrr   r|   Úextendrq   ÚstrÚpatternro   rY   rÌ   rK   r   Ú	TypeErrorr    )ÚurlpatternsÚbasero   rp   ÚpÚpatternsr3   r3   r4   rq   Ç  s.   

ÿýÿ
$ÿrq   c                 C   s6   t | ƒ} t| ƒ} t| ƒ} t| ƒ} |  d¡sd|  } | S )zÎ
    Clean up urlpattern regexes into something more readable by humans. For
    example, turn "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$"
    into "/<sport_slug>/athletes/<athlete_slug>/".
    ú/)r	   r   r   r
   rª   )rÐ   r3   r3   r4   rs   æ  s   
rs   )rA   N)?r¦   Ú	importlibr   r   Úpathlibr   Údjango.appsr   Údjango.contribr   Ú%django.contrib.admin.views.decoratorsr   Údjango.contrib.admindocsr   Údjango.contrib.admindocs.utilsr	   r
   r   r   Údjango.core.exceptionsr   r   Ú	django.dbr   Údjango.httpr   Údjango.template.enginer   Údjango.urlsr   r   r   Údjango.utils._osr   Údjango.utils.decoratorsr   Údjango.utils.functionalr   Údjango.utils.inspectr   r   r   r   Údjango.utils.translationr   r    Údjango.views.genericr   r   r©   r%   r;   r=   re   rj   ry   r†   r‹   r¹   r¬   r¢   rq   rs   r3   r3   r3   r4   Ú<module>   sH    %') 7)

	