U
    8ÄT_±@  ã                   @   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-dv63caxw/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 nØX t|j ¡ ƒ}dd„ |jD ƒ}|| D ]®\}}|j ¡ D ]š\}}	t 	|	j
¡\}
}}|
o�t |
dtdƒ| ¡}
|oªt |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 nØX t|j ¡ ƒ}dd„ |jD ƒ}|| D ]®\}}|j ¡ D ]š\}}	t 	|	j
¡\}
}}|
o�t |
dtdƒ| ¡}
|oªt |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
¡\}}}|o¬t |dtdƒ| ¡}|oÆt |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ƒ�rúz t D ]}| !|¡�r"t"‚�q"W n t"k
�rX   Y �qúY nX |j
}|�o€t t#|ƒdtdƒ|j ¡}t|tƒ�r¬|	 |t$|ƒ|�p¢d	dœ¡ npt%|ƒ�rèt&|ƒ�sèt'|ƒ�sè|	 |t$|ƒ|�pÞd	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ƒr¸z$| |j	|t|jƒ ||j
f¡ W qÈ tk
r´   Y qY qÈX 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   ' %
	
