o
    ˷eH                     @   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m0Z0m1Z1 dZ2G dd de/Z3G dd de3Z4G dd de3Z5G dd de3Z6G d d! d!e3Z7G d"d# d#e3Z8G d$d% d%e3Z9G d&d' d'e3Z:G d(d) d)e3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   )_is_callback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__ U/var/www/ideatree/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 )Nr4   )r,   get_context_datar   r*   r+   r/   )r.   r1   r2   r4   r5   r6   4   s   
z"BaseAdminDocsView.get_context_data)	__name__
__module____qualname____doc__r   r   r-   r6   __classcell__r4   r4   r2   r5   r&   '   s
    r&   c                   @   s   e Zd ZdZdS )BookmarkletsViewzadmin_doc/bookmarklets.htmlN)r7   r8   r9   r(   r4   r4   r4   r5   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  r4   .0libr4   r4   r5   
<listcomp>M       z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.nametitlebodymetalibrarytagsr4   )r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrQ   r   parse_docstringr:   	parse_rstr!   splitappendr,   r6   )r.   r1   rQ   engineapp_libsbuiltin_libsmodule_namerP   tag_nametag_funcrM   rN   metadatakeytag_libraryr2   r4   r5   r6   D   s<   
z%TemplateTagIndexView.get_context_datar7   r8   r9   r(   r6   r;   r4   r4   r2   r5   r>   A       r>   c                       r=   )TemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc              
      r?   )
Nc                 S   r@   rA   r4   rC   r4   r4   r5   rF   r   rG   z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:rI   rJ   rK   filtersr4   )r   rR   r   rS   rT   rU   rV   rh   r   rW   r:   rX   r!   rY   rZ   r,   r6   )r.   r1   rh   r[   r\   r]   r^   rP   filter_namefilter_funcrM   rN   ra   rb   rc   r2   r4   r5   r6   i   s@   
z(TemplateFilterIndexView.get_context_datard   r4   r4   r2   r5   rf   f   re   rf   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	namespacerL   viewsr4   )r   r   extract_views_from_urlpatternsurl_patternsr   rZ   r    simplify_regexjoinr,   r6   )	r.   r1   rq   url_resolverview_functionsfuncregexrp   rL   r2   r4   r5   r6      s"   
	zViewIndexView.get_context_datard   r4   r4   r2   r5   rk      re   rk   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   s\   t | r,t| \}}ztt||W S  ty+   t|\}}ttt||| Y S w d S )N)r   r   getattrr   ImportError)viewmodrx   klassr4   r4   r5   _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)rL   summaryrN   rO   r4   )
r1   r   r   r   rW   r:   rX   r!   r,   r6   )r.   r1   r}   	view_funcrM   rN   ra   rb   r2   r4   r5   r6      s&   

 
zViewDetailView.get_context_data)r7   r8   r9   r(   staticmethodr   r6   r;   r4   r4   r2   r5   rz      s
    
rz   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 r4   )_meta)rD   mr4   r4   r5   rF      s    z3ModelIndexView.get_context_data.<locals>.<listcomp>r   r4   )r   
get_modelsr,   r6   )r.   r1   m_listr2   r4   r5   r6      s   zModelIndexView.get_context_datard   r4   r4   r2   r5   r      re   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||pd	|
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 qg }|j D ]\}}t|st|tt frzt!D ]}|"|rt#q	W n
 t#y    Y qw |j
}|o4tt$|dtd|j }t|tt frL|	|t%||pGd	d qt&|rjt'|sjt(|sj|	|t%||ped	d qt)|}d*dd |D }||||pd	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 qt/ 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_typerB   )rL   r   verbose	help_textz/related `%(app_label)s.%(object_name)s` objects)r   object_namez%s.allListzall %s)rL   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)ru   maprepr)rD   arg_elr4   r4   r5   rF   V  s     z4ModelDetailView.get_context_data.<locals>.<listcomp>)rL   	argumentsr   )rL   r   descriptionfieldsmethodsr4   )2r1   r   get_app_configLookupErrorr   r!   	get_modelr   r   rW   r:   rX   r   
isinstancer   
ForeignKeyremote_fieldr   r7   r   get_readable_field_data_typeverbose_namerZ   rL   r   many_to_manyr   __dict__rU   inspect
isfunctionr   propertyMODEL_METHODS_EXCLUDE
startswithStopIterationr   get_return_data_typer   r   r   r   ru   related_objectsrelated_modelr   get_accessor_namer,   r6   label)r.   r1   r   
app_configr   optsrM   rN   ra   r   fieldr   r   r   r   	func_namerx   excluder   print_argumentsrelaccessorr2   r4   r5   r6      s0  






	

		

z ModelDetailView.get_context_datard   r4   r4   r2   r5   r      re   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templaterB   )fileexistscontentsorder)rL   	templatesr4   )r1   r   rR   r   	enumeratedirsr   r   r   	read_textrZ   r,   r6   )	r.   r1   r   r   default_engineindex	directorytemplate_filetemplate_contentsr2   r4   r5   r6     s6   


z#TemplateDetailView.get_context_datard   r4   r4   r2   r5   r     re   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   rB   )r   endswith)r   r4   r4   r5   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   r4   r4   r5   r     s   r   rB   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 four-tuple:
    (view_func, regex, namespace, name)
    rs   callbackz,%s does not appear to be a urlpattern object)hasattrrs   r|   extendrr   strpatternrp   rZ   r   rL   r   	TypeErrorr!   )urlpatternsbaserp   rq   ppatternsr4   r4   r5   rr     s.   


$rr   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   r4   r4   r5   rt     s   
rt   )rB   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<   r>   rf   rk   rz   r   r   r   r   r   rr   rt   r4   r4   r4   r5   <module>   sH    %'( 7)

	