3
(hF                 @   s  d dl Z 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 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"m#Z#m$Z$m%Z% d dl&m'Z( d dl)m*Z* d4Z+G dd de*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,Z4d)d* Z5d+d, Z6d5d.d/Z7ej8d0Z9ej8d1Z:d2d3 Z;dS )6    N)import_module)apps)settings)admin)staff_member_required)utils)ImproperlyConfiguredViewDoesNotExist)models)Http404)Engine)get_mod_funcget_resolverget_urlconfreverse)six)method_decorator)func_accepts_kwargsfunc_accepts_var_argsfunc_has_no_argsget_func_full_args)ugettext)TemplateView_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                s6   t jsd| _| jtjj|S tt| j	|f||S )Nzadmin_doc/missing_docutils.html)
r   Zdocutils_is_availabletemplate_nameZrender_to_responser   siteeach_contextsuperr   dispatch)selfrequestargskwargs)	__class__ B/tmp/pip-install-q3hcpn_q/Django/django/contrib/admindocs/views.pyr#   !   s    zBaseAdminDocsView.dispatchc                s8   |j dtdi |j tjj| j tt| jf |S )N	root_pathzadmin:index)	updater   r   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                s<   t t| jf |}|jdd| jj| jj |d f i |S )NZ	admin_urlz	%s://%s%sr+   )r"   r3   r-   r,   r%   schemeget_host)r$   r'   context)r(   r)   r*   r-   2   s
    z!BookmarkletsView.get_context_data)r.   r/   r0   r   r-   r2   r)   r)   )r(   r*   r3   /   s   r3   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
\}
}}|
rtj|
dtd| }
|rtj|dtd| }x*|D ]"}tj|| dtd| ||< qW |jdd	 }|j||
|||d qbW qNW |jd|i tt| jf |S )
Nc             S   s   g | ]}d |fqS ) r)   ).0libr)   r)   r*   
<listcomp>G   s    z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.   )nametitlebodymetalibrarytags)r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrD   r   parse_docstringr1   	parse_rstr   splitappendr,   r"   r7   r-   )r$   r'   rD   engineapp_libsbuiltin_libsmodule_namerC   Ztag_nameZtag_funcr@   rA   metadatakeytag_library)r(   r)   r*   r-   >   s2    
"z%TemplateTagIndexView.get_context_data)r.   r/   r0   r   r-   r2   r)   r)   )r(   r*   r7   ;   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
\}
}}|
rtj|
dtd| }
|rtj|dtd| }x*|D ]"}tj|| dtd| ||< qW |jdd	 }|j||
|||d qbW qNW |jd|i tt| jf |S )
Nc             S   s   g | ]}d |fqS )r8   r)   )r9   r:   r)   r)   r*   r;   i   s    z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:r=   r>   )r?   r@   rA   rB   rC   filtersrE   )r   rF   r   rG   rH   rI   rJ   rX   r   rK   r1   rL   r   rM   rN   r,   r"   rV   r-   )r$   r'   rX   rO   rP   rQ   rR   rC   Zfilter_nameZfilter_funcr@   rA   rS   rT   rU   )r(   r)   r*   r-   `   s2    
"z(TemplateFilterIndexView.get_context_data)r.   r/   r0   r   r-   r2   r)   r)   )r(   r*   rV   ]   s   rV   c                   s,   e Zd ZdZedd Z fddZ  ZS )ViewIndexViewzadmin_doc/view_index.htmlc             C   s:   | j }tjrd|| jf S t| d| jj}d||f S d S )Nz%s.%sr.   )r/   r   PY3r0   getattrr(   r.   )funcmod_name	func_namer)   r)   r*   _get_full_name   s
    zViewIndexView._get_full_namec       	         s   g }t tj}t|j}xV|D ]N\}}}}|j| j|t|dj|pFg |rP|gpRg  dj|p`g |d qW |j	d|i t
t| jf |S )N:)Z	full_nameurlZurl_name	namespacer?   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrN   r_   simplify_regexjoinr,   r"   rY   r-   )	r$   r'   rc   urlconfZview_functionsr\   regexrb   r?   )r(   r)   r*   r-      s    

zViewIndexView.get_context_data)r.   r/   r0   r   staticmethodr_   r-   r2   r)   r)   )r(   r*   rY      s   
rY   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   sv   t  }t|j| rrt| \}}ytt||S  tk
r^   t|\}}ttt|||S  tk
rp   d S X d S )N)r   r   Z_is_callbackr   r[   r   ImportErrorAttributeError)viewrh   modr\   klassr)   r)   r*   _get_view_func   s    zViewDetailView._get_view_funcc                s   | j d }| j|}|d kr ttj|j\}}}|rLtj|dtd| }|rftj|dtd| }x*|D ]"}tj|| dtd| ||< qlW |j||||d t	t
| jf |S )Nrn   zview:model)r?   summaryrA   rB   )r'   rq   r   r   rK   r1   rL   r   r,   r"   rk   r-   )r$   r'   rn   Z	view_funcr@   rA   rS   rT   )r(   r)   r*   r-      s"    


"
zViewDetailView.get_context_data)r.   r/   r0   r   rj   rq   r-   r2   r)   r)   )r(   r*   rk      s   rk   c                   s    e Zd ZdZ fddZ  ZS )ModelIndexViewzadmin_doc/model_index.htmlc                s2   dd t j D }|jd|i tt| jf |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,   r"   rt   r-   )r$   r'   Zm_list)r(   r)   r*   r-      s    zModelIndexView.get_context_data)r.   r/   r0   r   r-   r2   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 }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
\}}}|rtj|dtd| }|rt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 }x|jj D ]\}}tj|ry$xtD ]}|j |r"t!q"W W n t!k
rX   wY nX |j
}|rtjtj"|dtd|j }t#|rt$| rt%| r|	j|t&||pd	d n8t'|}|}dj(dd |D }|j|||pd	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 |j-d|j|j+f |||	|d t.t/| j0f |S )N
model_name	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrr   zmodel:z0the related `%(app_label)s.%(data_type)s` object)ry   	data_typer8   )r?   rz   verbose	help_textz/related `%(app_label)s.%(object_name)s` objects)ry   object_namez%s.allListzall %s)r?   rz   r{   z%s.countIntegerznumber of %sz, c             S   s8   g | ]0}d j t|dd dd |dd D  qS )=Nr>   c             S   s   g | ]}t |qS r)   )repr)r9   elr)   r)   r*   r;   4  s    z?ModelDetailView.get_context_data.<locals>.<listcomp>.<listcomp>)rg   list)r9   Zarg_elr)   r)   r*   r;   4  s   z4ModelDetailView.get_context_data.<locals>.<listcomp>)r?   	argumentsr{   z%s.%s)r?   rs   descriptionfieldsmethods)1r'   r   Zget_app_configLookupErrorr   r   Z	get_modelru   r   rK   r1   rL   r   
isinstancer
   Z
ForeignKeyZremote_fieldrr   r.   ry   get_readable_field_data_typeZverbose_namerN   r?   r|   Zmany_to_manyrx   __dict__rI   inspect
isfunctionMODEL_METHODS_EXCLUDE
startswithStopIterationZtrim_docstringr   r   r   get_return_data_typer   rg   Zrelated_objectsZrelated_modelr}   Zget_accessor_namer,   r"   rw   r-   )r$   r'   rx   Z
app_configrr   optsr@   rA   rS   r   fieldrz   ry   r{   r   r^   r\   excluder   print_argumentsrelZaccessor)r(   r)   r*   r-      s    




&,

"
&,
z ModelDetailView.get_context_data)r.   r/   r0   r   r-   r2   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 }ytj }W n tk
r.   Y nLX xHt|jD ]:\}}tjj|| |j	 tjj
  fdd|d q<W |j||d tt| jf |S )Ntemplatec                  s   t jj rt j S dS )Nr8   )ospathexistsopenreadr)   )template_filer)   r*   <lambda>j  s    z5TemplateDetailView.get_context_data.<locals>.<lambda>)filer   contentsorder)r?   	templates)r'   r   rF   r   	enumeratedirsr   r   rg   rN   r   r,   r"   r   r-   )r$   r'   r   r   Zdefault_engineindex	directory)r(   )r   r*   r-   [  s"    



z#TemplateDetailView.get_context_data)r.   r/   r0   r   r-   r2   r)   r)   )r(   r*   r   X  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_listr~   _countr   r8   )r   endswith)r^   r)   r)   r*   r   y  s    


r   c             C   s   | j | j S )zReturns the description for a given field type, if it exists,
    Fields' descriptions can contain format strings, which will be interpolated
    against the values of field.__dict__ before being output.)r   r   )r   r)   r)   r*   r     s    r   r8   c             C   s   g }x| D ]}t |drly
|j}W n tk
r8   w
Y nX |jt|||jj |pRg |jr`|jgpbg   q
t |dry"|j|j	||j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   rl   extendrd   ri   patternrb   rN   r   r?   r	   	TypeErrorr   )re   baserb   rc   ppatternsr)   r)   r*   rd     s&    



 

rd   z\(\?P(<\w+>).+?\)z\(.*?\)c             C   s^   t jdd | } tjd| } | jddjddjddjdd	jd
d} | jd	sZd	|  } | S )z
    Clean up urlpattern regexes into something somewhat readable by Mere Humans:
    turns something like "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$"
    into "<sport_slug>/athletes/<athlete_slug>/"
    c             S   s
   | j dS )Nr>   )group)rv   r)   r)   r*   r     s    z simplify_regex.<locals>.<lambda>z<var>^r8   $?z///\)named_group_matchersubnon_named_group_matcherreplacer   )r   r)   r)   r*   rf     s    ,
rf   )r   r   r   r   r   )r8   N)<r   r   re	importlibr   Zdjango.appsr   Zdjango.confr   Zdjango.contribr   Z%django.contrib.admin.views.decoratorsr   Zdjango.contrib.admindocsr   Zdjango.core.exceptionsr   r	   Z	django.dbr
   Zdjango.httpr   Zdjango.template.enginer   Zdjango.urlsr   r   r   r   Zdjango.utilsr   Zdjango.utils.decoratorsr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r   Zdjango.views.genericr   r   r   r3   r7   rV   rY   rk   rt   rw   r   r   r   rd   compiler   r   rf   r)   r)   r)   r*   <module>   sF   ""0	 !



