o
    uvXjë@  ã                   @   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 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"m#Z#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*ƒZ-G dd„ de-ƒZ.G dd„ de-ƒZ/G dd„ de-ƒZ0G dd„ de-ƒZ1G d d!„ d!e-ƒZ2G d"d#„ d#e-ƒZ3G d$d%„ d%e-ƒZ4G d&d'„ d'e-ƒZ5d(d)„ Z6d*d+„ Z7d1d-d.„Z8d/d0„ Z9dS )2é    N)Úimport_module)ÚPath)Úapps)Úsettings)Úadmin)Ústaff_member_required)Úutils)Úreplace_named_groupsÚreplace_unnamed_groups)ÚImproperlyConfiguredÚViewDoesNotExist)Úmodels)ÚHttp404)ÚEngine)Úget_mod_funcÚget_resolverÚget_urlconf)Úmethod_decorator)Ú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__© ú[/var/www/html/myproject/venv/lib/python3.10/site-packages/django/contrib/admindocs/views.pyr(   $   s   zBaseAdminDocsView.dispatchc                    s$   t ƒ jdi i |¥tj | j¡¥¤ŽS )Nr/   )r'   Úget_context_datar   r%   r&   r*   )r)   r,   r-   r/   r0   r1   ,   s
   ÿþz"BaseAdminDocsView.get_context_data)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r(   r1   Ú__classcell__r/   r/   r-   r0   r!       s
    r!   c                   @   s   e Zd ZdZdS )ÚBookmarkletsViewzadmin_doc/bookmarklets.htmlN)r2   r3   r4   r#   r/   r/   r/   r0   r7   3   s    r7   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 ©Ú r/   ©Ú.0Úlibr/   r/   r0   Ú
<listcomp>C   ó    z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>Útagztag:Ú.éÿÿÿÿ©ÚnameÚtitleÚbodyÚmetaÚlibraryÚtagsr/   )r   Úget_defaultr   ÚsortedÚtemplate_librariesÚitemsÚtemplate_builtinsrL   r   Úparse_docstringr5   Ú	parse_rstr   ÚsplitÚappendr'   r1   )r)   r,   rL   ÚengineÚapp_libsÚbuiltin_libsÚmodule_namerK   Útag_nameÚtag_funcrH   rI   ÚmetadataÚkeyÚtag_libraryr-   r/   r0   r1   :   ó2   þ 
ûùz%TemplateTagIndexView.get_context_data©r2   r3   r4   r#   r1   r6   r/   r/   r-   r0   r9   7   ó    r9   c                       r8   )ÚTemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc              
      r:   )
Nc                 S   r;   r<   r/   r>   r/   r/   r0   rA   b   rB   z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>Úfilterzfilter:rD   rE   rF   Úfiltersr/   )r   rM   r   rN   rO   rP   rQ   rd   r   rR   r5   rS   r   rT   rU   r'   r1   )r)   r,   rd   rV   rW   rX   rY   rK   Úfilter_nameÚfilter_funcrH   rI   r\   r]   r^   r-   r/   r0   r1   Y   r_   z(TemplateFilterIndexView.get_context_datar`   r/   r/   r-   r0   rb   V   ra   rb   c                       r8   )ÚViewIndexViewzadmin_doc/view_index.htmlc           	   	      sˆ   g }t tjƒ}t|jƒ}|D ]&\}}}}| t|ƒt|ƒd |p!g |r&|gp'g  ¡d |p.g ¡|dœ¡ qt	ƒ j
di i |¥d|i¥¤ŽS )Nú:)Ú	full_nameÚurlÚurl_nameÚ	namespacerG   Úviewsr/   )r   r   ÚROOT_URLCONFÚextract_views_from_urlpatternsÚurlpatternsrU   r   Úsimplify_regexÚjoinr'   r1   )	r)   r,   rm   ÚurlconfÚview_functionsÚfuncÚregexrl   rG   r-   r/   r0   r1   x   s   


ûzViewIndexView.get_context_datar`   r/   r/   r-   r0   rg   u   ra   rg   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)Úviewrs   Úmodru   Úklassr/   r/   r0   Ú_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)rG   ÚsummaryrI   rJ   r/   )
r,   r~   r   r   rR   r5   rS   r   r'   r1   )r)   r,   r{   Ú	view_funcrH   rI   r\   r]   r-   r/   r0   r1   ›   s"   

 ÿûzViewDetailView.get_context_data)r2   r3   r4   r#   Ústaticmethodr~   r1   r6   r/   r/   r-   r0   rw   ‡   s
    
rw   c                       r8   )Ú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 r/   )Ú_meta)r?   Úmr/   r/   r0   rA   ²   s    z3ModelIndexView.get_context_data.<locals>.<listcomp>r   r/   )r   Ú
get_modelsr'   r1   )r)   r,   Úm_listr-   r/   r0   r1   ±   s   zModelIndexView.get_context_datar`   r/   r/   r-   r0   rƒ   ®   ra   rƒ   c                       r8   )Ú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ƒ�r�zt D ]}| !|¡�rt"‚�qW n
 t"�y   Y qôw |j
}|�o3t t #|¡dtdƒ|j ¡}t|tƒ�rI|	 |t$|ƒ|�pDd	dœ¡ qôt%|ƒ�rgt&|ƒ�sgt'|ƒ�sg|	 |t$|ƒ|�pbd	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.ƒ j/di i |¥d|j|j,f |||	|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_typer=   )rG   r‹   ÚverboseÚ	help_textz/related `%(app_label)s.%(object_name)s` objects)rŠ   Úobject_namez%s.allÚListzall %s)rG   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)rr   ÚmapÚrepr)r?   Úarg_elr/   r/   r0   rA     s     ÿÿz4ModelDetailView.get_context_data.<locals>.<listcomp>)rG   Ú	argumentsrŒ   z%s.%s)rG   r€   ÚdescriptionÚfieldsÚmethodsr/   )0r,   r   Úget_app_configÚLookupErrorr   r   Ú	get_modelr„   r   rR   r5   rS   r—   Ú
isinstancer   Ú
ForeignKeyÚremote_fieldr   r2   rŠ   Úget_readable_field_data_typeÚverbose_namerU   rG   r�   Úmany_to_manyr‰   Ú__dict__rP   ÚinspectÚ
isfunctionÚpropertyÚMODEL_METHODS_EXCLUDEÚ
startswithÚStopIterationÚtrim_docstringÚget_return_data_typer   r   r   r   rr   Úrelated_objectsÚrelated_modelrŽ   Úget_accessor_namer'   r1   )r)   r,   r‰   Ú
app_configr   ÚoptsrH   rI   r\   r—   Úfieldr‹   rŠ   rŒ   r˜   Ú	func_nameru   Úexcluder•   Úprint_argumentsÚrelÚaccessorr-   r/   r0   r1   ¹   sæ   
ÿÿ

ÿ
û
ü

þý
ýÿÿÿÿ
ý
ý
þý€
þýýÿúz ModelDetailView.get_context_datar`   r/   r/   r-   r0   rˆ   ¶   ra   rˆ   c                       r8   )ÚTemplateDetailViewzadmin_doc/template_detail.htmlc           
   	      sÄ   | j d }g }zt ¡ }W n	 ty   Y n<w t|jƒD ]5\}}t|ƒ| }| ¡ rC| ¡ �}| 	¡ }	W d   ƒ n1 s=w   Y  nd}	| 
|| ¡ |	|dœ¡ qtƒ jdi i |¥||dœ¥¤ŽS )NÚtemplater=   )ÚfileÚexistsÚcontentsÚorder)rG   Ú	templatesr/   )r,   r   rM   r   Ú	enumerateÚdirsr   r¹   ÚopenÚreadrU   r'   r1   )
r)   r,   r·   r¼   Údefault_engineÚindexÚ	directoryÚtemplate_fileÚfÚtemplate_contentsr-   r/   r0   r1   @  s6   
þ

ÿ€
üÿýz#TemplateDetailView.get_context_datar`   r/   r/   r-   r0   r¶   =  ra   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�   r=   )r§   Úendswith)r±   r/   r/   r0   rª   c  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°   r/   r/   r0   rŸ   m  s   rŸ   r=   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 two-tuple: (view_func, regex)
    Úurl_patternsÚcallbackz,%s does not appear to be a urlpattern object)ÚhasattrrË   rz   Úextendro   ÚstrÚpatternrl   rU   rÌ   rG   r   Ú	TypeErrorr   )rp   Úbaserl   rm   ÚpÚpatternsr/   r/   r0   ro   v  s*   

ÿý
$ÿro   c                 C   sB   t | ƒ} t| ƒ} |  dd¡ dd¡ dd¡} |  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
   Úreplacer§   )rÐ   r/   r/   r0   rq   ’  s   
rq   )r=   N):r£   Ú	importlibr   Úpathlibr   Údjango.appsr   Údjango.confr   Údjango.contribr   Ú%django.contrib.admin.views.decoratorsr   Údjango.contrib.admindocsr   Údjango.contrib.admindocs.utilsr	   r
   Údjango.core.exceptionsr   r   Ú	django.dbr   Údjango.httpr   Údjango.template.enginer   Údjango.urlsr   r   r   Údjango.utils.decoratorsr   Údjango.utils.inspectr   r   r   r   Údjango.utils.translationr   r   Údjango.views.genericr   r   r¦   r!   r7   r9   rb   rg   rw   rƒ   rˆ   r¶   rª   rŸ   ro   rq   r/   r/   r/   r0   Ú<module>   sD    ' &

	