
v^@                 @   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 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+ d5 Z, Gd d   d e*  Z- Gd d   d e-  Z. Gd d   d e-  Z/ Gd  d!   d! e-  Z0 Gd" d#   d# e-  Z1 Gd$ d%   d% e-  Z2 Gd& d'   d' e-  Z3 Gd( d)   d) e-  Z4 Gd* d+   d+ e-  Z5 d, d-   Z6 d. d/   Z7 d0 d d1 d2  Z8 d3 d4   Z9 d S)6    N)import_module)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_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                sA   t  j s+ d |  _ |  j t j j |   St   j | | |  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__ @/tmp/pip-build-8lau8j11/django/django/contrib/admindocs/views.pyr&   $   s    		zBaseAdminDocsView.dispatchc                s%   t    j | t j j |  j     S)N)r%   get_context_datar   r#   r$   r(   )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 d S)BookmarkletsViewzadmin_doc/bookmarklets.htmlN)r/   r0   r1   r"   r,   r,   r,   r-   r3   3   s   r3   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* YnBXt | j j    } d d   | j D } x| | D]\ } } x | j j   D] \ } }	 t j	 |	 j
  \ }
 } } |
 o t j |
 d t d  |  }
 | o t j | d t d  |  } x5 | D]- } t j | | d t d  |  | | <q W| j d  d } | j d | d |
 d	 | d
 | d | i  q} Wqa Wt   j | d | i    S)Nc             S   s   g  |  ] } d  | f  q S) r,   ).0libr,   r,   r-   
<listcomp>C   s   	 z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.r   nametitlebodymetalibrarytags)r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsr@   r   parse_docstringr2   	parse_rstr   splitappendr%   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.   :   s,    %%+z%TemplateTagIndexView.get_context_data)r/   r0   r1   r"   r.   r,   r,   )r+   r-   r4   7   s   r4   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* YnBXt | j j    } d d   | j D } x| | D]\ } } x | j j   D] \ } }	 t j	 |	 j
  \ }
 } } |
 o t j |
 d t d  |  }
 | o t j | d t d  |  } x5 | D]- } t j | | d t d  |  | | <q W| j d  d } | j d | d |
 d	 | d
 | d | i  q} Wqa Wt   j | d | i    S)Nc             S   s   g  |  ] } d  | f  q S)r5   r,   )r6   r7   r,   r,   r-   r8   b   s   	 z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:r:   r   r;   r<   r=   r>   r?   filtersrA   )r   rB   r   rC   rD   rE   rF   rT   r   rG   r2   rH   r   rI   rJ   r%   r.   )r'   r*   rT   rK   rL   rM   rN   r?   Zfilter_nameZfilter_funcr<   r=   rO   rP   rQ   )r+   r,   r-   r.   Y   s,    %%+z(TemplateFilterIndexView.get_context_data)r/   r0   r1   r"   r.   r,   r,   )r+   r-   rR   V   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]z \ } } } } | j d t |  d t |  d d j | pm g  | r| | g p g   d d j | p g   d | i  q+ Wt	   j
 | d | i    S)NZ	full_nameurlZurl_name:	namespacer;   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrJ   r   simplify_regexjoinr%   r.   )	r'   r*   rY   urlconfZview_functionsfuncregexrX   r;   )r+   r,   r-   r.   x   s    (zViewIndexView.get_context_data)r/   r0   r1   r"   r.   r,   r,   )r+   r-   rU   u   s   rU   c                   s:   e  Z d  Z d Z e d d    Z   f d d   Z   S)ViewDetailViewzadmin_doc/view_detail.htmlc             C   s   t    } t |  j |   r t |   \ } } y t t |  |  SWn@ t k
 r t |  \ } } t t t |  |  |  SYn Xd  S)N)r   r   Z_is_callbackr   getattrr   ImportError)viewr^   modr_   klassr,   r,   r-   _get_view_func   s    	zViewDetailView._get_view_funcc          
      s   |  j  d } |  j |  } | d  k r. t  t j | j  \ } } } | ok t j | d t d  |  } | o t j | d t d  |  } x5 | D]- } t j | | d t d  |  | | <q Wt   j	 | d | d | d | d | i    S)Nrd   zview:modelr;   summaryr=   r>   )
r*   rg   r   r   rG   r2   rH   r   r%   r.   )r'   r*   rd   Z	view_funcr<   r=   rO   rP   )r+   r,   r-   r.      s    %%+	zViewDetailView.get_context_data)r/   r0   r1   r"   staticmethodrg   r.   r,   r,   )r+   r-   ra      s   ra   c                   s(   e  Z d  Z d Z   f d d   Z   S)ModelIndexViewzadmin_doc/model_index.htmlc                s5   d d   t  j   D } t   j | d | i    S)Nc             S   s   g  |  ] } | j   q Sr,   )_meta)r6   mr,   r,   r-   r8      s   	 z3ModelIndexView.get_context_data.<locals>.<listcomp>r   )r   Z
get_modelsr%   r.   )r'   r*   Zm_list)r+   r,   r-   r.      s    zModelIndexView.get_context_data)r/   r0   r1   r"   r.   r,   r,   )r+   r-   rk      s   rk   c                   s(   e  Z d  Z d Z   f d d   Z   S)ModelDetailViewzadmin_doc/model_detail.htmlc                 sz  |  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
  \ } } } | o t j | d t d  |  } | ot j | d t d  |  } g  }	 x | j D] }
 t |
 t j  r|
 j j j } |
 j j j j } t j t d  d | d | i d t d  |  } n t |
  } |
 j } |	 j d	 |
 j d | d
 | pd d |
 j i  qWx | j D] }
 |
 j j j } |
 j j j j } t d  d | d | i } |	 j d	 d |
 j d d d
 t j t d  | d t d  | j  i  |	 j d	 d |
 j d d d
 t j t d  | d t d  | j  i  qWg  } x| j j   D]\ } } t j |  st | t  ry* x# t  D] } | j! |  rt"  qWWn t" k
 r9wYn X| j
 } | oqt j t j# |  d t d  | j  } t | t  r|	 j d	 | d t$ |  d
 | pd i  qt% |  rt& |  rt' |  r|	 j d	 | d t$ |  d
 | pd i  qt( |  } d j) d d   | D  } | j d	 | d | d
 | pKd i  qWx | j* D] } t d  d | j+ j j d | j+ j j, i } | j-   } |	 j d	 d | d d d
 t j t d  | d t d  | j  i  |	 j d	 d | d d d
 t j t d  | d t d  | j  i  q`Wt.   j/ | d	 d | j | j, f d | d | d |	 d | i    S)N
model_name	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrh   zmodel:z0the related `%(app_label)s.%(data_type)s` object	data_typer;   verboser5   	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   s?   g  |  ]5 } d  j  | d f t t | d d      q S)=r   r   N)r]   maprepr)r6   Zarg_elr,   r,   r-   r8     s   	z4ModelDetailView.get_context_data.<locals>.<listcomp>	argumentsz%s.%sri   descriptionfieldsmethods)0r*   r   Zget_app_configLookupErrorr   r   Z	get_modelrl   r   rG   r2   rH   r|   
isinstancer   Z
ForeignKeyZremote_fieldrh   r/   rp   get_readable_field_data_typeZverbose_namerJ   r;   rs   Zmany_to_manyro   __dict__rE   inspectZ
isfunctionpropertyMODEL_METHODS_EXCLUDE
startswithStopIterationZtrim_docstringget_return_data_typer   r   r   r   r]   Zrelated_objectsZrelated_modelrt   Zget_accessor_namer%   r.   )r'   r*   ro   Z
app_configrh   optsr<   r=   rO   r|   fieldrq   rp   rr   r}   	func_namer_   excluderz   print_argumentsrelZaccessor)r+   r,   r-   r.      s    	%%				37	+&		
3
7	z ModelDetailView.get_context_data)r/   r0   r1   r"   r.   r,   r,   )r+   r-   rn      s   rn   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 Yn Xx t | j  D]~ \ } } t |  | } | j   r | j    } | j	   }	 Wd  QRXn d }	 | j
 d | d | j   d |	 d | i  qH Wt   j | d | d | i    S)	Ntemplater5   fileexistscontentsorderr;   	templates)r*   r   rB   r   	enumeratedirsr   r   openreadrJ   r%   r.   )
r'   r*   r   r   Zdefault_engineindex	directoryZtemplate_filefZtemplate_contents)r+   r,   r-   r.   @  s*    	z#TemplateDetailView.get_context_data)r/   r0   r1   r"   r.   r,   r,   )r+   r-   r   =  s   r   c             C   s9   |  j  d  r5 |  j d  r" d S|  j d  r5 d Sd S)z9Return a somewhat-helpful data type given a function nameget_Z_listru   _countrv   r5   )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   r5   c             C   s  g  } x |  D] } t  | d  r y | j } Wn t k
 rF w Yn X| j t | | t | j  | pl g  | j r | j g p g    q t  | d  r y0 | j | j	 | t | 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   rc   extendrZ   strpatternrX   rJ   r   r;   r   	TypeErrorr   )r[   baserX   rY   ppatternsr,   r,   r-   rZ   v  s$    	,0rZ   c             C   s_   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>/".
    ^r5   $?/)r	   r
   replacer   )r   r,   r,   r-   r\     s    *
r\   )r   r   zdeletezsavezset_):r   	importlibr   Z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!   r3   r4   rR   rU   ra   rk   rn   r   r   r   rZ   r\   r,   r,   r,   r-   <module>   s@   "'&
	