3
g@                 @   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. d7Z/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/ Z9d0d1 Z:d8d3d4Z;d5d6 Z<dS )9    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_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| _| jtj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__ \/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/contrib/admindocs/views.pyr(   &   s    zBaseAdminDocsView.dispatchc                s   t  jf |tj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   5   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 }yt j }W n tk
r$   Y nX t|jj }dd |jD }x|| D ]\}}x|jj D ]\}}	tj	|	j
\}
}}|
otj|
dtd| }
|otj|dtd| }x*|D ]"}tj|| dtd| ||< qW |jdd	 }|j||
|||d qbW qNW t jf |d|iS )
Nc             S   s   g | ]}d |fqS ) r.   ).0libr.   r.   r/   
<listcomp>E   s    z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.r   )nametitlebodymetalibrarytags)r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrC   r	   parse_docstringr4   	parse_rstr   splitappendr'   r0   )r)   r,   rC   engineapp_libsbuiltin_libsmodule_namerB   Ztag_nameZtag_funcr?   r@   metadatakeytag_library)r-   r.   r/   r0   <   s,    
"z%TemplateTagIndexView.get_context_data)r1   r2   r3   r$   r0   r5   r.   r.   )r-   r/   r7   9   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 }yt j }W n tk
r$   Y nX t|jj }dd |jD }x|| D ]\}}x|jj D ]\}}	tj	|	j
\}
}}|
otj|
dtd| }
|otj|dtd| }x*|D ]"}tj|| dtd| ||< qW |jdd	 }|j||
|||d qbW qNW t jf |d|iS )
Nc             S   s   g | ]}d |fqS )r8   r.   )r9   r:   r.   r.   r/   r;   d   s    z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:r=   r   )r>   r?   r@   rA   rB   filtersrD   )r   rE   r   rF   rG   rH   rI   rW   r	   rJ   r4   rK   r   rL   rM   r'   r0   )r)   r,   rW   rN   rO   rP   rQ   rB   Zfilter_nameZfilter_funcr?   r@   rR   rS   rT   )r-   r.   r/   r0   [   s,    
"z(TemplateFilterIndexView.get_context_data)r1   r2   r3   r$   r0   r5   r.   r.   )r-   r/   rU   X   s   rU   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\}}}}|jt|t|dj|pDg |rN|gpPg  dj|p^g |d qW t	 j
f |d|iS )N:)Z	full_nameurlZurl_name	namespacer>   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrM   r   simplify_regexjoinr'   r0   )	r)   r,   r\   urlconfZview_functionsfuncregexr[   r>   )r-   r.   r/   r0   z   s    

zViewIndexView.get_context_data)r1   r2   r3   r$   r0   r5   r.   r.   )r-   r/   rX   w   s   rX   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|j| 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)viewra   modrb   klassr.   r.   r/   _get_view_func   s    zViewDetailView._get_view_funcc                s   | j d }| j|}|d kr ttj|j\}}}|oJtj|dtd| }|odtj|dtd| }x*|D ]"}tj|| dtd| ||< qlW t j	f |||||dS )Nrg   zview:model)r>   summaryr@   rA   )
r,   rj   r   r	   rJ   r4   rK   r   r'   r0   )r)   r,   rg   Z	view_funcr?   r@   rR   rS   )r-   r.   r/   r0      s    


"zViewDetailView.get_context_data)r1   r2   r3   r$   staticmethodrj   r0   r5   r.   r.   )r-   r/   rd      s   rd   c                   s    e Zd ZdZ fddZ  ZS )ModelIndexViewzadmin_doc/model_index.htmlc                s(   dd t j D }t jf |d|iS )Nc             S   s   g | ]
}|j qS r.   )_meta)r9   mr.   r.   r/   r;      s    z3ModelIndexView.get_context_data.<locals>.<listcomp>r   )r   Z
get_modelsr'   r0   )r)   r,   Zm_list)r-   r.   r/   r0      s    zModelIndexView.get_context_data)r1   r2   r3   r$   r0   r5   r.   r.   )r-   r/   rn      s   rn   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| j d }W n& tk
rD   ttd| j  Y nX y|j|}W n& tk
rz   ttd| j  Y nX |j}tj	|j
\}}}|otj|dtd| }|otj|dtd| }g }	x|jD ]z}
t|
tjr"|
jjj}|
jjjj}tjtd||d dtd| }nt|
}|
j}|	j|
j||pBd	|
jd
 qW x|jD ]}
|
jjj}|
jjjj}td||d }|	jd|
j dtjtd| dtd|j d |	jd|
j dtjtd| dtd|j d qZW g }x8|jj D ](\}}tj|s(t|try$xt D ]}|j!|r0t"q0W W n t"k
rf   wY nX |j
}|otjt#|dtd|j }t|tr|	j|t$||pd	d ntt%|rt&| rt'| r|	j|t$||pd	d n4t(|}dj)dd |D }|j|||p&d	d qW x|j*D ]}td|j+jj|j+jj,d }|j- }|	jd| dtjtd| dtd|j d |	jd| dtjtd| dtd|j d q<W 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)rrk   zmodel:z0the related `%(app_label)s.%(data_type)s` object)rs   	data_typer8   )r>   rt   verbose	help_textz/related `%(app_label)s.%(object_name)s` objects)rs   object_namez%s.allListzall %s)r>   rt   ru   z%s.countIntegerznumber of %sz, c          	   S   s.   g | ]&}d j |d ftt|dd qS )=r   r   N)r`   maprepr)r9   Zarg_elr.   r.   r/   r;     s   z4ModelDetailView.get_context_data.<locals>.<listcomp>)r>   	argumentsru   )r>   rl   descriptionfieldsmethods)1r,   r   Zget_app_configLookupErrorr   r   Z	get_modelro   r	   rJ   r4   rK   r   
isinstancer   Z
ForeignKeyZremote_fieldrk   r1   rs   get_readable_field_data_typeZverbose_namerM   r>   rv   Zmany_to_manyrr   __dict__rH   inspect
isfunctionpropertyMODEL_METHODS_EXCLUDE
startswithStopIterationr   get_return_data_typer   r   r   r   r`   Zrelated_objectsZrelated_modelrw   Zget_accessor_namer'   r0   label)r)   r,   rr   Z
app_configrk   optsr?   r@   rR   r   fieldrt   rs   ru   r   	func_namerb   excluder}   print_argumentsrelaccessor)r-   r.   r/   r0      s    




&,

"
&,z ModelDetailView.get_context_data)r1   r2   r3   r$   r0   r5   r.   r.   )r-   r/   rq      s   rq   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j }W n tk
r.   Y nVX xRt|jD ]D\}}tt||}|j rd|j	 }nd}|j
||j ||d q<W t jf |||dS )Ntemplater8   )fileexistscontentsorder)r>   	templates)r,   r   rE   r   	enumeratedirsr   r   r   	read_textrM   r'   r0   )	r)   r,   r   r   Zdefault_engineindex	directoryZtemplate_fileZtemplate_contents)r-   r.   r/   r0   B  s(    

z#TemplateDetailView.get_context_data)r1   r2   r3   r$   r0   r5   r.   r.   )r-   r/   r   ?  s   r   c             C   s*   | j dr&| jdrdS | jdr&dS dS )z9Return a somewhat-helpful data type given a function nameget_Z_listrx   _country   r8   )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   r8   c             C   s   g }x| D ]}t |drny
|j}W n tk
r8   w
Y nX |jt||t|j |pTg |jrb|jgpdg   q
t |dry$|j|j	|t|j ||j
f W q tk
r   w
Y qX 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   rf   extendr]   strpatternr[   rM   r   r>   r   	TypeErrorr   )r^   baser[   r\   ppatternsr.   r.   r/   r]   w  s$    


 
$
r]   c             C   sB   t | } t| } | jddjddjdd} | j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>/".
    ^r8   $?/)r
   r   replacer   )r   r.   r.   r/   r_     s    
r_   )r   r   r    r!   r"   )r8   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#   r6   r7   rU   rX   rd   rn   rq   r   r   r   r]   r_   r.   r.   r.   r/   <module>   sF   ' %
	
