a
    xd@                     @   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 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# 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-Z0G dd de0Z1G dd de0Z2G dd de0Z3G d d! d!e0Z4G d"d# d#e0Z5G d$d% d%e0Z6G d&d' d'e0Z7G d(d) d)e0Z8d*d+ Z9d,d- Z:d3d/d0Z;d1d2 Z<dS )4    N)import_module)cleandoc)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)	safe_join)method_decorator)func_accepts_kwargsfunc_accepts_var_argsget_func_full_argsmethod_has_no_args)gettext)TemplateView   )get_view_name)_Z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	   Zdocutils_is_availabletemplate_nameZrender_to_responser   siteeach_contextsuperdispatch)selfrequestargskwargs	__class__ V/var/www/html/Ranjet/env/lib/python3.9/site-packages/django/contrib/admindocs/views.pyr'   &   s    zBaseAdminDocsView.dispatchc                    s$   t  jf i i |tj| jS N)r&   get_context_datar   r$   r%   r)   )r(   r+   r,   r.   r/   r1   .   s
    z"BaseAdminDocsView.get_context_data)	__name__
__module____qualname____doc__r   r   r'   r1   __classcell__r.   r.   r,   r/   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.   r/   r7   5   s   r7   c                       s    e Zd ZdZ fddZ  ZS )TemplateTagIndexViewz!admin_doc/template_tag_index.htmlc              
      s  g }zt  }W n ty"   Y n0 t|j }dd |jD }|| D ]\}}|j D ]\}}	t	|	j
\}
}}|
ot|
dtd| }
|ot|dtd| }|D ]"}t|| dtd| ||< q|dd }|||
|||d q\qJt jf i i |d|iS )	Nc                 S   s   g | ]}d |fqS  r.   .0libr.   r.   r/   
<listcomp>E       z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.nametitlebodymetalibrarytags)r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrI   r	   parse_docstringr5   	parse_rstr   splitappendr&   r1   )r(   r+   rI   engineapp_libsbuiltin_libsmodule_namerH   Ztag_nameZtag_funcrE   rF   metadatakeytag_libraryr,   r.   r/   r1   <   s.     z%TemplateTagIndexView.get_context_datar2   r3   r4   r#   r1   r6   r.   r.   r,   r/   r8   9   s   r8   c                       s    e Zd ZdZ fddZ  ZS )TemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc              
      s  g }zt  }W n ty"   Y n0 t|j }dd |jD }|| D ]\}}|j D ]\}}	t	|	j
\}
}}|
ot|
dtd| }
|ot|dtd| }|D ]"}t|| dtd| ||< q|dd }|||
|||d q\qJt jf i i |d|iS )	Nc                 S   s   g | ]}d |fqS r9   r.   r;   r.   r.   r/   r>   d   r?   z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:rA   rB   rC   filters)r   rJ   r   rK   rL   rM   rN   r]   r	   rO   r5   rP   r   rQ   rR   r&   r1   )r(   r+   r]   rS   rT   rU   rV   rH   Zfilter_nameZfilter_funcrE   rF   rW   rX   rY   r,   r.   r/   r1   [   s.     z(TemplateFilterIndexView.get_context_datarZ   r.   r.   r,   r/   r[   X   s   r[   c                       s    e Zd ZdZ fddZ  ZS )ViewIndexViewzadmin_doc/view_index.htmlc           	   	      s   g }t tj}t|j}|D ]L\}}}}|t|t|d|pBg |rL|gpNg  d|p\g |d qt	 j
f i i |d|iS )N:)Z	full_nameurlZurl_name	namespacerD   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrR   r   simplify_regexjoinr&   r1   )	r(   r+   rb   urlconfZview_functionsfuncregexra   rD   r,   r.   r/   r1   z   s    


zViewIndexView.get_context_datarZ   r.   r.   r,   r/   r^   w   s   r^   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|| rdt| \}}ztt||W S  tyb   t|\}}ttt||| Y S 0 d S r0   )r   r   Z_is_callbackr   getattrr   ImportError)viewrg   modrh   klassr.   r.   r/   _get_view_func   s    zViewDetailView._get_view_funcc              	      s   | j d }| |}|d u r tt|j\}}}|oJt|dtd| }|odt|dtd| }|D ]"}t|| dtd| ||< qjt j	f i i |||||dS )Nrm   zview:model)rD   summaryrF   rG   )
r+   rp   r   r	   rO   r5   rP   r   r&   r1   )r(   r+   rm   Z	view_funcrE   rF   rW   rX   r,   r.   r/   r1      s"    

 zViewDetailView.get_context_data)r2   r3   r4   r#   staticmethodrp   r1   r6   r.   r.   r,   r/   rj      s   
rj   c                       s    e Zd ZdZ fddZ  ZS )ModelIndexViewzadmin_doc/model_index.htmlc                    s0   dd t  D }t jf i i |d|iS )Nc                 S   s   g | ]
}|j qS r.   )_meta)r<   mr.   r.   r/   r>      r?   z3ModelIndexView.get_context_data.<locals>.<listcomp>r   )r   Z
get_modelsr&   r1   )r(   r+   Zm_listr,   r.   r/   r1      s    zModelIndexView.get_context_datarZ   r.   r.   r,   r/   rt      s   rt   c                       s    e Zd ZdZ fddZ  ZS )ModelDetailViewzadmin_doc/model_detail.htmlc                    s  | j d }zt| j d }W n$ tyB   ttd| j  Y n0 z||}W n$ tyv   ttd| j  Y n0 |j}t	|j
\}}}|ot|dtd| }|ot|dtd| }g }	|jD ]z}
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
 q|jD ]}
|
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 qPg }|j D ] \}}t|st|trz t D ]}|!|rt"qW n t"yR   Y qY n0 |j
}|oztt#|dtd|j }t|tr|	|t$||pd	d npt%|rt&|st'|s|	|t$||pd	d n4t(|}d)dd |D }||||pd	d q|j*D ]}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/f i i ||j0|||	|dS )N
model_name	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrq   zmodel:z0the related `%(app_label)s.%(data_type)s` object)ry   	data_typer:   )rD   rz   verbose	help_textz/related `%(app_label)s.%(object_name)s` objects)ry   object_namez%s.allListzall %s)rD   rz   r{   z%s.countIntegerznumber of %sz, c              
   S   s.   g | ]&}d  |d gtt|dd qS )=r   r   N)rf   maprepr)r<   Zarg_elr.   r.   r/   r>     s   z4ModelDetailView.get_context_data.<locals>.<listcomp>)rD   	argumentsr{   )rD   rr   descriptionfieldsmethods)1r+   r   Zget_app_configLookupErrorr   r   Z	get_modelru   r	   rO   r5   rP   r   
isinstancer   Z
ForeignKeyZremote_fieldrq   r2   ry   get_readable_field_data_typeZverbose_namerR   rD   r|   Zmany_to_manyrx   __dict__rM   inspect
isfunctionpropertyMODEL_METHODS_EXCLUDE
startswithStopIterationr   get_return_data_typer   r   r   r   rf   Zrelated_objectsZrelated_modelr}   Zget_accessor_namer&   r1   label)r(   r+   rx   Z
app_configrq   optsrE   rF   rW   r   fieldrz   ry   r{   r   	func_namerh   excluder   print_argumentsrelaccessorr,   r.   r/   r1      s    










z ModelDetailView.get_context_datarZ   r.   r.   r,   r/   rw      s   rw   c                       s    e Zd ZdZ fddZ  ZS )TemplateDetailViewzadmin_doc/template_detail.htmlc           	         s   | j d }g }zt }W n ty,   Y nR0 t|jD ]D\}}tt||}| r`|	 }nd}|
|| ||d q8t jf i i |||dS )Ntemplater:   )fileexistscontentsorder)rD   	templates)r+   r   rJ   r   	enumeratedirsr   r   r   	read_textrR   r&   r1   )	r(   r+   r   r   Zdefault_engineindex	directoryZtemplate_fileZtemplate_contentsr,   r.   r/   r1   B  s.    


z#TemplateDetailView.get_context_datarZ   r.   r.   r,   r/   r   ?  s   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_Z_listr~   _countr   r:   )r   endswith)r   r.   r.   r/   r   d  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.   r/   r   n  s    r   r:   c              	   C   s   g }| D ]}t |drlz
|j}W n ty6   Y qY n0 |t||t|j |pRg |jr`|jgpbg   qt |drz$||j	|t|j ||j
f W q ty   Y qY q0 qttd| q|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   rl   extendrc   strpatternra   rR   r   rD   r   	TypeErrorr   )rd   basera   rb   ppatternsr.   r.   r/   rc   w  s&    



$rc   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.   r/   re     s    
re   )r:   N)=r   	importlibr   r   pathlibr   Zdjango.appsr   Zdjango.confr   Zdjango.contribr   Z%django.contrib.admin.views.decoratorsr   Zdjango.contrib.admindocsr	   Zdjango.contrib.admindocs.utilsr
   r   Zdjango.core.exceptionsr   r   Z	django.dbr   Zdjango.httpr   Zdjango.template.enginer   Zdjango.urlsr   r   r   Zdjango.utils._osr   Zdjango.utils.decoratorsr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r   Zdjango.views.genericr   r   r   r"   r7   r8   r[   r^   rj   rt   rw   r   r   r   rc   re   r.   r.   r.   r/   <module>   sF   ' %
	
