B
    £0H[óA  ã               @   s¶  d dl Z 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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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*„ Z7d0d,d-„Z8d.d/„ Z9dS )1é    N)Úimport_module)Ú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Úreverse)Úmethod_decorator)Úfunc_accepts_kwargsÚfunc_accepts_var_argsÚfunc_has_no_argsÚget_func_full_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__© úbC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\contrib\admindocs\views.pyr%   $   s    zBaseAdminDocsView.dispatchc                s4   |  dtdƒi¡ |  tj | j¡¡ tƒ jf |ŽS )NÚ	root_pathzadmin:index)Úupdater   r   r"   r#   r'   r$   Úget_context_data)r&   r)   )r*   r+   r,   r/   ,   s    z"BaseAdminDocsView.get_context_data)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   r/   Ú__classcell__r+   r+   )r*   r,   r        s   r    c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚBookmarkletsViewzadmin_doc/bookmarklets.htmlc                s8   t ƒ jf |Ž}| dd| jj| j ¡ |d f i¡ |S )NZ	admin_urlz	%s://%s%sr-   )r$   r/   r.   r'   ÚschemeÚget_host)r&   r)   Úcontext)r*   r+   r,   r/   5   s
    z!BookmarkletsView.get_context_data)r0   r1   r2   r!   r/   r4   r+   r+   )r*   r,   r5   2   s   r5   c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚTemplateTagIndexViewz!admin_doc/template_tag_index.htmlc          
      s$  g }yt  ¡ }W n tk
r$   Y näX t|j ¡ ƒ}dd„ |jD ƒ}xÂ|| D ]¶\}}x¬|j ¡ D ]ž\}}	t 	|	j
¡\}
}}|
r–t |
dtdƒ| ¡}
|r°t |dtdƒ| ¡}x*|D ]"}t || dtdƒ| ¡||< q¶W | d¡d }| ||
|||dœ¡ qbW qNW | d|i¡ tƒ jf |ŽS )	Nc             S   s   g | ]}d |f‘qS )Ú r+   )Ú.0Úlibr+   r+   r,   ú
<listcomp>J   s    z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>Útagztag:Ú.éÿÿÿÿ)ÚnameÚtitleÚbodyÚmetaÚlibraryÚtags)r   Úget_defaultr
   ÚsortedÚtemplate_librariesÚitemsÚtemplate_builtinsrF   r   Úparse_docstringr3   Ú	parse_rstr   ÚsplitÚappendr.   r$   r/   )r&   r)   rF   ÚengineÚapp_libsÚbuiltin_libsÚmodule_namerE   Ztag_nameZtag_funcrB   rC   ÚmetadataÚkeyÚtag_library)r*   r+   r,   r/   A   s2    
"z%TemplateTagIndexView.get_context_data)r0   r1   r2   r!   r/   r4   r+   r+   )r*   r,   r9   >   s   r9   c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚTemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc          
      s$  g }yt  ¡ }W n tk
r$   Y näX t|j ¡ ƒ}dd„ |jD ƒ}xÂ|| D ]¶\}}x¬|j ¡ D ]ž\}}	t 	|	j
¡\}
}}|
r–t |
dtdƒ| ¡}
|r°t |dtdƒ| ¡}x*|D ]"}t || dtdƒ| ¡||< q¶W | d¡d }| ||
|||dœ¡ qbW qNW | d|i¡ tƒ jf |ŽS )	Nc             S   s   g | ]}d |f‘qS )r:   r+   )r;   r<   r+   r+   r,   r=   l   s    z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>Úfilterzfilter:r?   r@   )rA   rB   rC   rD   rE   Úfilters)r   rG   r
   rH   rI   rJ   rK   rY   r   rL   r3   rM   r   rN   rO   r.   r$   r/   )r&   r)   rY   rP   rQ   rR   rS   rE   Zfilter_nameZfilter_funcrB   rC   rT   rU   rV   )r*   r+   r,   r/   c   s2    
"z(TemplateFilterIndexView.get_context_data)r0   r1   r2   r!   r/   r4   r+   r+   )r*   r,   rW   `   s   rW   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ƒ}xT|D ]L\}}}}| t|ƒt|ƒd |pDg |rN|gpPg  ¡d |p^g ¡|dœ¡ qW | 	d|i¡ t
ƒ jf |ŽS )Nú:)Z	full_nameÚurlZurl_nameÚ	namespacerA   Úviews)r   r   ZROOT_URLCONFÚextract_views_from_urlpatternsÚurlpatternsrO   r   Úsimplify_regexÚjoinr.   r$   r/   )	r&   r)   r^   ÚurlconfZview_functionsÚfuncÚregexr]   rA   )r*   r+   r,   r/   …   s    

zViewIndexView.get_context_data)r0   r1   r2   r!   r/   r4   r+   r+   )r*   r,   rZ   ‚   s   rZ   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   sd   t ƒ }t|ƒ | ¡r`t| ƒ\}}ytt|ƒ|ƒS  tk
r^   t|ƒ\}}ttt|ƒ|ƒ|ƒS X d S )N)r   r   Z_is_callbackr   Úgetattrr   ÚImportError)Úviewrc   Úmodrd   Úklassr+   r+   r,   Ú_get_view_func˜   s    zViewDetailView._get_view_funcc                s´   | j d }|  |¡}|d kr t‚t |j¡\}}}|rLt |dtdƒ| ¡}|rft |dtdƒ| ¡}x*|D ]"}t || dtdƒ| ¡||< qlW | ||||dœ¡ t	ƒ j
f |ŽS )Nri   zview:Úmodel)rA   ÚsummaryrC   rD   )r)   rl   r   r   rL   r3   rM   r   r.   r$   r/   )r&   r)   ri   Z	view_funcrB   rC   rT   rU   )r*   r+   r,   r/   ©   s"    


"
zViewDetailView.get_context_data)r0   r1   r2   r!   Ústaticmethodrl   r/   r4   r+   r+   )r*   r,   rf   •   s   rf   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 ƒ}| d|i¡ tƒ jf |Ž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.   r$   r/   )r&   r)   Zm_list)r*   r+   r,   r/   Á   s    zModelIndexView.get_context_data)r0   r1   r2   r!   r/   r4   r+   r+   )r*   r,   rp   ¾   s   rp   c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚModelDetailViewzadmin_doc/model_detail.htmlc                sÄ  | j d }yt | j d ¡}W n& tk
rD   ttdƒ| j  ƒ‚Y nX y| |¡}W n& tk
rz   ttdƒ| j  ƒ‚Y nX |j}t 	|j
¡\}}}|r®t |dtdƒ| ¡}|rÈt |dtdƒ| ¡}g }	x„|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||�pBd	|
jd
œ¡ qÔW x |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œ¡ �qZW g }xþ|j ¡ D ]ð\}}t |¡�ry$xtD ]}|  |¡�r t!‚�q W W n t!k
�rV   �wY nX |j
}|�r‚t t "|¡dtdƒ|j ¡}t#|ƒ�r¾t$|ƒ�s¾t%|ƒ�s¾|	 |t&|ƒ|�p´d	dœ¡ n4t'|ƒ}d (dd„ |D ƒ¡}| |||�pêd	dœ¡ �qW xš|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 W | -d|j|j+f |||	|dœ¡ t.ƒ j/f |ŽS )NÚ
model_nameÚ	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrm   zmodel:z0the related `%(app_label)s.%(data_type)s` object)ru   Ú	data_typer:   )rA   rv   ÚverboseÚ	help_textz/related `%(app_label)s.%(object_name)s` objects)ru   Úobject_namez%s.allÚListzall %s)rA   rv   rw   z%s.countÚIntegerznumber of %sz, c          	   S   s8   g | ]0}d   t|dd… ƒdd„ |dd… D ƒ ¡‘qS )ú=Nr   c             S   s   g | ]}t |ƒ‘qS r+   )Úrepr)r;   Úelr+   r+   r,   r=   %  s    z?ModelDetailView.get_context_data.<locals>.<listcomp>.<listcomp>)rb   Úlist)r;   Zarg_elr+   r+   r,   r=   %  s   z4ModelDetailView.get_context_data.<locals>.<listcomp>)rA   Ú	argumentsrw   z%s.%s)rA   rn   ÚdescriptionÚfieldsÚmethods)0r)   r   Zget_app_configÚLookupErrorr   r   Z	get_modelrq   r   rL   r3   rM   r‚   Ú
isinstancer   Z
ForeignKeyZremote_fieldrm   r0   ru   Úget_readable_field_data_typeZverbose_namerO   rA   rx   Zmany_to_manyrt   Ú__dict__rJ   ÚinspectÚ
isfunctionÚMODEL_METHODS_EXCLUDEÚ
startswithÚStopIterationZtrim_docstringr   r   r   Úget_return_data_typer   rb   Zrelated_objectsZrelated_modelry   Zget_accessor_namer.   r$   r/   )r&   r)   rt   Z
app_configrm   ÚoptsrB   rC   rT   r‚   Úfieldrv   ru   rw   rƒ   Ú	func_namerd   Úexcluder€   Úprint_argumentsÚrelZaccessor)r*   r+   r,   r/   Ê   s¶    




&,


&,
z ModelDetailView.get_context_data)r0   r1   r2   r!   r/   r4   r+   r+   )r*   r,   rs   Ç   s   rs   c                   s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚTemplateDetailViewzadmin_doc/template_detail.htmlc       
   
      s¾   | j d }g }yt ¡ }W n tk
r.   Y nrX xnt|jƒD ]`\}}tj ||¡}tj 	|¡r|t
|ƒ�}| ¡ }	W d Q R X nd}	| |tj 	|¡|	|dœ¡ q<W | ||dœ¡ tƒ jf |ŽS )NÚtemplater:   )ÚfileÚexistsÚcontentsÚorder)rA   Ú	templates)r)   r   rG   r
   Ú	enumerateÚdirsÚosÚpathrb   r—   ÚopenÚreadrO   r.   r$   r/   )
r&   r)   r•   rš   Zdefault_engineÚindexÚ	directoryZtemplate_fileÚfZtemplate_contents)r*   r+   r,   r/   L  s*    



z#TemplateDetailView.get_context_data)r0   r1   r2   r!   r/   r4   r+   r+   )r*   r,   r”   I  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_listrz   Ú_countr{   r:   )r‹   Úendswith)r�   r+   r+   r,   r�   o  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†   y  s    r†   r:   c          	   C   sÎ   g }xÄ| D ]¼}t |dƒrny
|j}W n tk
r8   w
Y nX | t||t|jƒ |pTg |jrb|jgpdg  ƒ¡ q
t |dƒr¶y$| |j	|t|jƒ ||j
f¡ W qÆ tk
r²   w
Y qÆX q
ttdƒ| ƒ‚q
W |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§   rh   Úextendr_   ÚstrÚpatternr]   rO   r¨   rA   r   Ú	TypeErrorr   )r`   Úbaser]   r^   ÚpÚpatternsr+   r+   r,   r_   ‚  s$    


 
$
r_   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,   ra   ž  s    
ra   )r:   N):rˆ   r�   Ú	importlibr   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   r   Zdjango.utils.decoratorsr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r   Zdjango.views.genericr   r   rŠ   r    r5   r9   rW   rZ   rf   rp   rs   r”   r�   r†   r_   ra   r+   r+   r+   r,   Ú<module>   sB   "")	 &
	
