U
    }c@                     @   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#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.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.Z5G d'd( d(e.Z6d)d* Z7d+d, Z8d2d.d/Z9d0d1 Z:dS )3    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)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                    s2   t jsd| _| tj|S t j|f||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__ B/tmp/pip-unpacked-wheel-7m9rsep5/django/contrib/admindocs/views.pyr&   %   s    zBaseAdminDocsView.dispatchc                    s   t  jf |tj| jS N)r%   get_context_datar   r#   r$   r(   )r'   r*   r+   r-   r.   r0   -   s    z"BaseAdminDocsView.get_context_data)	__name__
__module____qualname____doc__r   r   r&   r0   __classcell__r-   r-   r+   r.   r!   !   s   r!   c                   @   s   e Zd ZdZdS )BookmarkletsViewzadmin_doc/bookmarklets.htmlN)r1   r2   r3   r"   r-   r-   r-   r.   r6   4   s   r6   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k
r$   Y nX 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^qLt jf |d|iS )	Nc                 S   s   g | ]}d |fqS  r-   .0libr-   r-   r.   
<listcomp>D   s     z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.nametitlebodymetalibrarytags)r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrG   r	   parse_docstringr4   	parse_rstr   splitappendr%   r0   )r'   r*   rG   engineapp_libsbuiltin_libsmodule_namerF   Ztag_nameZtag_funcrC   rD   metadatakeytag_libraryr+   r-   r.   r0   ;   s.     z%TemplateTagIndexView.get_context_datar1   r2   r3   r"   r0   r5   r-   r-   r+   r.   r7   8   s   r7   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k
r$   Y nX 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^qLt jf |d|iS )	Nc                 S   s   g | ]}d |fqS r8   r-   r:   r-   r-   r.   r=   c   s     z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:r?   r@   rA   filters)r   rH   r   rI   rJ   rK   rL   r[   r	   rM   r4   rN   r   rO   rP   r%   r0   )r'   r*   r[   rQ   rR   rS   rT   rF   Zfilter_nameZfilter_funcrC   rD   rU   rV   rW   r+   r-   r.   r0   Z   s.     z(TemplateFilterIndexView.get_context_datarX   r-   r-   r+   r.   rY   W   s   rY   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 |d|iS )N:)Z	full_nameurlZurl_name	namespacerB   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrP   r   simplify_regexjoinr%   r0   )	r'   r*   r`   urlconfZview_functionsfuncregexr_   rB   r+   r-   r.   r0   y   s    


zViewIndexView.get_context_datarX   r-   r-   r+   r.   r\   v   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   sj   t  }t|| rft| \}}ztt||W S  tk
rd   t|\}}ttt||| Y S X d S r/   )r   r   Z_is_callbackr   getattrr   ImportError)viewre   modrf   klassr-   r-   r.   _get_view_func   s    zViewDetailView._get_view_funcc                    s   | j d }| |}|d kr tt|j\}}}|oJt|dtd| }|odt|dtd| }|D ]"}t|| dtd| ||< qjt j	f |||||dS )Nrk   zview:model)rB   summaryrD   rE   )
r*   rn   r   r	   rM   r4   rN   r   r%   r0   )r'   r*   rk   Z	view_funcrC   rD   rU   rV   r+   r-   r.   r0      s     

 zViewDetailView.get_context_data)r1   r2   r3   r"   staticmethodrn   r0   r5   r-   r-   r+   r.   rh      s   
rh   c                       s    e Zd ZdZ fddZ  ZS )ModelIndexViewzadmin_doc/model_index.htmlc                    s(   dd t  D }t jf |d|iS )Nc                 S   s   g | ]
}|j qS r-   )_meta)r;   mr-   r-   r.   r=      s     z3ModelIndexView.get_context_data.<locals>.<listcomp>r   )r   Z
get_modelsr%   r0   )r'   r*   Zm_listr+   r-   r.   r0      s    zModelIndexView.get_context_datarX   r-   r-   r+   r.   rr      s   rr   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k
rD   ttd| j  Y nX z||}W n& tk
rz   ttd| j  Y nX |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 qTg }|j D ]"\}}t|st|trz t D ]}|!|r"t"q"W n t"k
rX   Y qY nX |j
}|ot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 ||j0|||	|dS )N
model_name	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rro   zmodel:z0the related `%(app_label)s.%(data_type)s` object)rw   	data_typer9   )rB   rx   verbose	help_textz/related `%(app_label)s.%(object_name)s` objects)rw   object_namez%s.allListzall %s)rB   rx   ry   z%s.countIntegerznumber of %sz, c              
   S   s.   g | ]&}d  |d ftt|dd qS )=r   r   N)rd   maprepr)r;   Zarg_elr-   r-   r.   r=     s   z4ModelDetailView.get_context_data.<locals>.<listcomp>)rB   	argumentsry   )rB   rp   descriptionfieldsmethods)1r*   r   Zget_app_configLookupErrorr   r   Z	get_modelrs   r	   rM   r4   rN   r   
isinstancer   Z
ForeignKeyZremote_fieldro   r1   rw   get_readable_field_data_typeZverbose_namerP   rB   rz   Zmany_to_manyrv   __dict__rK   inspect
isfunctionpropertyMODEL_METHODS_EXCLUDE
startswithStopIterationr   get_return_data_typer   r   r   r   rd   Zrelated_objectsZrelated_modelr{   Zget_accessor_namer%   r0   label)r'   r*   rv   Z
app_configro   optsrC   rD   rU   r   fieldrx   rw   ry   r   	func_namerf   excluder   print_argumentsrelaccessorr+   r-   r.   r0      s    


 







z ModelDetailView.get_context_datarX   r-   r-   r+   r.   ru      s   ru   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k
r.   Y nPX t|jD ]B\}}t|| }| r`| }nd}|	|| ||d q:t
 jf |||dS )Ntemplater9   )fileexistscontentsorder)rB   	templates)r*   r   rH   r   	enumeratedirsr   r   	read_textrP   r%   r0   )	r'   r*   r   r   Zdefault_engineindex	directoryZtemplate_fileZtemplate_contentsr+   r-   r.   r0   A  s,    


z#TemplateDetailView.get_context_datarX   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}   r9   )r   endswith)r   r-   r-   r.   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-   r.   r   m  s    r   r9   c              	   C   s   g }| D ]}t |drnz
|j}W n tk
r8   Y qY nX |t||t|j |pTg |jrb|jgpdg   qt |drz$||j	|t|j ||j
f W q tk
r   Y qY qX 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   rj   extendra   strpatternr_   rP   r   rB   r   	TypeErrorr   )rb   baser_   r`   ppatternsr-   r-   r.   ra   v  s&    



$ra   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>/".
    ^r9   $?/)r
   r   replacer   )r   r-   r-   r.   rc     s    
rc   )r9   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.decoratorsr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r   Zdjango.views.genericr   r   r   r!   r6   r7   rY   r\   rh   rr   ru   r   r   r   ra   rc   r-   r-   r-   r.   <module>   sD   ' %
	
