

_V@                 @   sP  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 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 d  d l m Z m Z m Z m  Z  d  d l! m" Z# d  d l$ m% Z% d3 Z& Gd d   d e%  Z' Gd d   d e'  Z( Gd d   d e'  Z) Gd d   d e'  Z* Gd d   d e'  Z+ Gd  d!   d! e'  Z, Gd" d#   d# e'  Z- Gd$ d%   d% e'  Z. Gd& d'   d' e'  Z/ d( d)   Z0 d* d+   Z1 d, d d- d.  Z2 e j3 d/  Z4 e j3 d0  Z5 d1 d2   Z6 d S)4    N)import_module)apps)settings)admin)staff_member_required)utils)urlresolvers)ImproperlyConfiguredViewDoesNotExist)models)Http404)Engine)method_decorator)func_accepts_kwargsfunc_accepts_var_argsfunc_has_no_argsget_func_full_args)ugettext)TemplateView_add_deletesaveset_c                   sF   e  Z d  Z d Z e e    f d d    Z   f d d   Z   S)BaseAdminDocsViewz(
    Base view for admindocs views.
    c                sG   t  j s+ d |  _ |  j t j j |   St t |   j	 | | |  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__ @/tmp/pip-build-ghmbqnp_/Django/django/contrib/admindocs/views.pyr       s    		zBaseAdminDocsView.dispatchc                sO   | j  i t j d  d 6 | j  t j j |  j   t t |   j	 |   S)Nzadmin:index	root_path)
updater   reverser   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*   r%   r%   )r$   r&   r      s   r   c                   s(   e  Z d  Z d Z   f d d   Z   S)BookmarkletsViewzadmin_doc/bookmarklets.htmlc                sP   t  t |   j |   } | j i d |  j j |  j j   | d f d 6 | S)Nz	%s://%s%sr'   Z	admin_url)r   r/   r*   r(   r!   schemeget_host)r    r#   context)r$   r%   r&   r*   1   s
    	(z!BookmarkletsView.get_context_data)r+   r,   r-   r   r*   r%   r%   )r$   r&   r/   .   s   r/   c                   s(   e  Z d  Z d Z   f d d   Z   S)TemplateTagIndexViewz!admin_doc/template_tag_index.htmlc                s  g  } y t  j   } Wn t k
 r* YnMXt | j j    } d d   | j D } x| | D]\ } } x| j j   D] \ } }	 t j	 |	 j
  \ }
 } } |
 r t j |
 d t d  |  }
 n  | r t j | d t d  |  } n  x5 | D]- } t j | | d t d  |  | | <q W| j d  d } | j i | d 6|
 d 6| d	 6| d
 6| d 6 q} Wqa W| j i | d 6 t t |   j |   S)Nc             S   s   g  |  ] } d  | f  q S) r%   ).0libr%   r%   r&   
<listcomp>F   s   	 z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.   nametitlebodymetalibrarytags)r   get_defaultr	   sortedtemplate_librariesitemstemplate_builtinsr@   r   parse_docstringr.   	parse_rstr   splitappendr(   r   r3   r*   )r    r#   r@   engineapp_libsbuiltin_libsmodule_namer?   Ztag_nameZtag_funcr<   r=   metadatakeytag_library)r$   r%   r&   r*   =   s2    ""+	z%TemplateTagIndexView.get_context_data)r+   r,   r-   r   r*   r%   r%   )r$   r&   r3   :   s   r3   c                   s(   e  Z d  Z d Z   f d d   Z   S)TemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc                s  g  } y t  j   } Wn t k
 r* YnMXt | j j    } d d   | j D } x| | D]\ } } x| j j   D] \ } }	 t j	 |	 j
  \ }
 } } |
 r t j |
 d t d  |  }
 n  | r t j | d t d  |  } n  x5 | D]- } t j | | d t d  |  | | <q W| j d  d } | j i | d 6|
 d 6| d	 6| d
 6| d 6 q} Wqa W| j i | d 6 t t |   j |   S)Nc             S   s   g  |  ] } d  | f  q S)r4   r%   )r5   r6   r%   r%   r&   r7   h   s   	 z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:r9   r:   r;   r<   r=   r>   r?   filtersrA   )r   rB   r	   rC   rD   rE   rF   rT   r   rG   r.   rH   r   rI   rJ   r(   r   rR   r*   )r    r#   rT   rK   rL   rM   rN   r?   Zfilter_nameZfilter_funcr<   r=   rO   rP   rQ   )r$   r%   r&   r*   _   s2    ""+	z(TemplateFilterIndexView.get_context_data)r+   r,   r-   r   r*   r%   r%   )r$   r&   rR   \   s   rR   c                   s(   e  Z d  Z d Z   f d d   Z   S)ViewIndexViewzadmin_doc/view_index.htmlc       	   	      s   g  } t  t j  } t | j  } x | D] \ } } } } | j i d | j t | d | j j	  f d 6t
 |  d 6d j | p g  | r | g p g   d 6d j | p g   d 6| d 6 q+ W| j i | d	 6 t t |   j |   S)
Nz%s.%sr+   Z	full_nameurl:Zurl_name	namespacer;   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrJ   r,   getattrr$   r+   simplify_regexjoinr(   r   rU   r*   )	r    r#   rY   urlconfZview_functionsfuncregexrX   r;   )r$   r%   r&   r*      s    	&)zViewIndexView.get_context_data)r+   r,   r-   r   r*   r%   r%   )r$   r&   rU   ~   s   rU   c                   s(   e  Z d  Z d Z   f d d   Z   S)ViewDetailViewzadmin_doc/view_detail.htmlc                sF  |  j  d } t j   } t j |  j |  r^ t j |  \ } } t t |  |  } n t  t	 j
 | j  \ } } }	 | r t	 j | d t d  |  } n  | r t	 j | d t d  |  } n  x5 |	 D]- }
 t	 j |	 |
 d t d  |  |	 |
 <q W| j i | d 6| d 6| d 6|	 d 6 t t |   j |   S)Nviewzview:modelr;   summaryr=   r>   )r#   r   Zget_urlconfZget_resolverZ_is_callbackZget_mod_funcr\   r   r   r   rG   r.   rH   r   r(   r   rb   r*   )r    r#   rc   r_   modr`   Z	view_funcr<   r=   rO   rP   )r$   r%   r&   r*      s&    ""+	zViewDetailView.get_context_data)r+   r,   r-   r   r*   r%   r%   )r$   r&   rb      s   rb   c                   s(   e  Z d  Z d Z   f d d   Z   S)ModelIndexViewzadmin_doc/model_index.htmlc                sC   d d   t  j   D } | j i | d 6 t t |   j |   S)Nc             S   s   g  |  ] } | j   q Sr%   )_meta)r5   mr%   r%   r&   r7      s   	 z3ModelIndexView.get_context_data.<locals>.<listcomp>r   )r   Z
get_modelsr(   r   rg   r*   )r    r#   Zm_list)r$   r%   r&   r*      s    zModelIndexView.get_context_data)r+   r,   r-   r   r*   r%   r%   )r$   r&   rg      s   rg   c                   s(   e  Z d  Z d Z   f d d   Z   S)ModelDetailViewzadmin_doc/model_detail.htmlc                sq  |  j  d } y t j |  j  d  } Wn+ t k
 rT t t d  |  j    Yn Xy | j |  } Wn+ t k
 r t t d  |  j    Yn X| j } t j	 | j
  \ } } } | r t j | d t d  |  } n  | r
t j | d t d  |  } n  g  }	 x | j D] }
 t |
 t j  r|
 j j j } |
 j j j j } t j t d  i | d 6| d 6d t d  |  } n t |
  } |
 j } |	 j i |
 j d	 6| d 6| pd
 d 6|
 j d 6 qWx | j D] }
 |
 j j j } |
 j j j j } t d  i | d 6| d 6} |	 j i d |
 j d	 6d d 6t j t d  | d t d  | j  d 6 |	 j i d |
 j d	 6d d 6t j t d  | d t d  | j  d 6 qWg  } x^| j j   D]M\ } } t j |  ry- x& t D] } | j  |  rt!  qqWWn t! k
 rAwYn X| j
 } | rt j t j" |  d t d  | j  } n  t# |  rt$ |  rt% |  r|	 j i | d	 6t& |  d 6| pd
 d 6 q/t' |  } | } d j( d d   | D  } | j i | d	 6| d 6| p$d
 d 6 qqWx | j) D] } t d  i | j* j j d 6| j* j j+ d 6} | j,   } |	 j i d | d	 6d d 6t j t d  | d t d  | j  d 6 |	 j i d | d	 6d d 6t j t d  | d t d  | j  d 6 q=W| j- i d | j | j+ f d	 6| d 6| d 6|	 d 6| d 6 t. t/ |   j0 |   S)N
model_name	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrd   zmodel:z0the related `%(app_label)s.%(data_type)s` object	data_typer;   r4   verbose	help_textz/related `%(app_label)s.%(object_name)s` objectsobject_namez%s.allListzall %sz%s.countIntegerznumber of %sz, c             S   sJ   g  |  ]@ } d  j  t | d d   d d   | d d  D   q S)=Nr:   c             S   s   g  |  ] } t  |   q Sr%   )repr)r5   elr%   r%   r&   r7     s   	 z?ModelDetailView.get_context_data.<locals>.<listcomp>.<listcomp>)r^   list)r5   Zarg_elr%   r%   r&   r7     s   	z4ModelDetailView.get_context_data.<locals>.<listcomp>	argumentsz%s.%sre   descriptionfieldsmethods)1r#   r   Zget_app_configLookupErrorr   r   Z	get_modelrh   r   rG   r.   rH   ry   
isinstancer   Z
ForeignKeyZremote_fieldrd   r+   rl   get_readable_field_data_typeZverbose_namerJ   r;   ro   Zmany_to_manyrk   __dict__rE   inspectZ
isfunctionMODEL_METHODS_EXCLUDE
startswithStopIterationZtrim_docstringr   r   r   get_return_data_typer   r^   Zrelated_objectsZrelated_modelrp   Zget_accessor_namer(   r   rj   r*   )r    r#   rk   Z
app_configrd   optsr<   r=   rO   ry   fieldrm   rl   rn   rz   	func_namer`   excluderw   print_argumentsrelZaccessor)r$   r%   r&   r*      s    	""		
	1	5	.&				1	5	z ModelDetailView.get_context_data)r+   r,   r-   r   r*   r%   r%   )r$   r&   rj      s   rj   c                   s(   e  Z d  Z d Z   f d d   Z   S)TemplateDetailViewzadmin_doc/template_detail.htmlc                s   |  j  d } g  } y t j   } Wn t k
 r7 Ynw Xxs t | j  D]b \ } } t j j | |    | j	 i   d 6t j j
    d 6  f d d   d 6| d 6 qH W| j i | d 6| d	 6 t t |   j |   S)
Ntemplatefileexistsc                  s&   t  j j    r" t    j   Sd S)Nr4   )ospathr   openreadr%   )template_filer%   r&   <lambda>J  s    z5TemplateDetailView.get_context_data.<locals>.<lambda>contentsorderr;   	templates)r#   r   rB   r	   	enumeratedirsr   r   r^   rJ   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,   r-   r   r*   r%   r%   )r$   r&   r   8  s   r   c             C   s<   |  j  d  r8 |  j d  r" d S|  j d  r8 d Sn  d S)z9Return a somewhat-helpful data type given a function nameget_Z_listrq   _countrr   r4   )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.)rx   r~   )r   r%   r%   r&   r}   c  s    r}   r4   c             C   s  g  } x |  D] } t  | d  r y | j } Wn t k
 rF w Yn X| j t | | | j j | pi g  | j r~ | j g p g    q t  | d  r y- | j | j	 | | j j | | j
 f  Wq t k
 r w Yq Xq 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   ImportErrorextendrZ   ra   patternrX   rJ   r   r;   r
   	TypeErrorr   )r[   baserX   rY   ppatternsr%   r%   r&   rZ   k  s&    	,rZ   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	  s d	 |  }  n  |  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)ri   r%   r%   r&   r     s    z simplify_regex.<locals>.<lambda>z<var>^r4   $?z///\)named_group_matchersubnon_named_group_matcherreplacer   )r   r%   r%   r&   r]     s    Br]   )r   r   zdeletezsavezset_)7r   r   re	importlibr   Zdjango.appsr   Zdjango.confr   Zdjango.contribr   Z%django.contrib.admin.views.decoratorsr   Zdjango.contrib.admindocsr   Zdjango.corer   Zdjango.core.exceptionsr	   r
   Z	django.dbr   Zdjango.httpr   Zdjango.template.enginer   Zdjango.utils.decoratorsr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r   Zdjango.views.genericr   r   r   r/   r3   rR   rU   rb   rg   rj   r   r   r}   rZ   compiler   r   r]   r%   r%   r%   r&   <module>   sB   """	!
