
^Q\E                 @   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" 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.  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 Gd( d)   d) e.  Z6 d* d+   Z7 d, d-   Z8 d. d d/ d0  Z9 d1 d2   Z: d S)4    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)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                   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__ D/var/www/dbchiro/venv/build/Django/django/contrib/admindocs/views.pyr%   #   s    		zBaseAdminDocsView.dispatchc                sL   | j  i t d  d 6 | j  t j j |  j   t t |   j |   S)Nzadmin:index	root_path)	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/   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$   r4   r/   r.   r'   schemeget_host)r&   r)   context)r*   r+   r,   r/   4   s
    	(z!BookmarkletsView.get_context_data)r0   r1   r2   r!   r/   r+   r+   )r*   r,   r4   1   s   r4   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>I   s   	 z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.   nametitlebodymetalibrarytags)r   get_defaultr
   sortedtemplate_librariesitemstemplate_builtinsrE   r   parse_docstringr3   	parse_rstr   splitappendr.   r$   r8   r/   )r&   r)   rE   engineapp_libsbuiltin_libsmodule_namerD   Ztag_nameZtag_funcrA   rB   metadatakeytag_library)r*   r+   r,   r/   @   s2    ""+	z%TemplateTagIndexView.get_context_data)r0   r1   r2   r!   r/   r+   r+   )r*   r,   r8   =   s   r8   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)r9   r+   )r:   r;   r+   r+   r,   r<   k   s   	 z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:r>   r?   r@   rA   rB   rC   rD   filtersrF   )r   rG   r
   rH   rI   rJ   rK   rY   r   rL   r3   rM   r   rN   rO   r.   r$   rW   r/   )r&   r)   rY   rP   rQ   rR   rS   rD   Zfilter_nameZfilter_funcrA   rB   rT   rU   rV   )r*   r+   r,   r/   b   s2    ""+	z(TemplateFilterIndexView.get_context_data)r0   r1   r2   r!   r/   r+   r+   )r*   r,   rW   _   s   rW   c                   s:   e  Z d  Z d Z e d d    Z   f d d   Z   S)ViewIndexViewzadmin_doc/view_index.htmlc             C   sM   |  j  } t j r# d | |  j f St |  d |  j j  } d | | f Sd  S)Nz%s.%sr0   )r1   r   PY3r2   getattrr*   r0   )funcZmod_name	func_namer+   r+   r,   _get_full_name   s
    		zViewIndexView._get_full_namec       	         s   g  } t  t j  } t | j  } x | D] \ } } } } | j i |  j |  d 6t |  d 6d j | pr g  | r | g p g   d 6d j | p g   d 6| d 6 q+ W| j	 i | d 6 t
 t |   j |   S)N	full_nameurl:url_name	namespacer@   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrO   r_   simplify_regexjoinr.   r$   rZ   r/   )	r&   r)   re   urlconfZview_functionsr]   regexrd   r@   )r*   r+   r,   r/      s    	)zViewIndexView.get_context_data)r0   r1   r2   r!   staticmethodr_   r/   r+   r+   )r*   r,   rZ      s   
rZ   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 |  |  SWq t k
 r t |  \ } } t t t |  |  |  SYq t k
 r d  SYq Xn  d  S)N)r   r   Z_is_callbackr   r\   r   ImportErrorAttributeError)viewrj   modr]   klassr+   r+   r,   _get_view_func   s    	 zViewDetailView._get_view_funcc                s  |  j  d } |  j |  } | d  k r1 t  n  t j | j  \ } } } | rt 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)Nrp   zview:modelr@   summaryrB   rC   )r)   rs   r   r   rL   r3   rM   r   r.   r$   rm   r/   )r&   r)   rp   Z	view_funcrA   rB   rT   rU   )r*   r+   r,   r/      s"    	""+	zViewDetailView.get_context_data)r0   r1   r2   r!   rl   rs   r/   r+   r+   )r*   r,   rm      s   rm   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)r:   mr+   r+   r,   r<      s   	 z3ModelIndexView.get_context_data.<locals>.<listcomp>r   )r   Z
get_modelsr.   r$   rv   r/   )r&   r)   Zm_list)r*   r+   r,   r/      s    zModelIndexView.get_context_data)r0   r1   r2   r!   r/   r+   r+   )r*   r,   rv      s   rv   c                   s(   e  Z d  Z d Z   f d d   Z   S)ModelDetailViewzadmin_doc/model_detail.htmlc                sk  |  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  } xX| j j   D]G\ } } 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 q7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)rrt   zmodel:z0the related `%(app_label)s.%(data_type)s` object	data_typer@   r9   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)r:   elr+   r+   r,   r<   5  s   	 z?ModelDetailView.get_context_data.<locals>.<listcomp>.<listcomp>)ri   list)r:   Zarg_elr+   r+   r,   r<   5  s   	z4ModelDetailView.get_context_data.<locals>.<listcomp>	argumentsz%s.%sru   descriptionfieldsmethods)1r)   r   Zget_app_configLookupErrorr   r   Z	get_modelrw   r   rL   r3   rM   r   
isinstancer   Z
ForeignKeyZremote_fieldrt   r0   r{   get_readable_field_data_typeZverbose_namerO   r@   r~   Zmany_to_manyrz   __dict__rJ   inspectZ
isfunctionMODEL_METHODS_EXCLUDE
startswithStopIterationZtrim_docstringr   r   r   get_return_data_typer   ri   Zrelated_objectsZrelated_modelr   Zget_accessor_namer.   r$   ry   r/   )r&   r)   rz   Z
app_configrt   optsrA   rB   rT   r   fieldr|   r{   r}   r   r^   r]   excluder   print_argumentsrelZaccessor)r*   r+   r,   r/      s    	""		
	1	5	.&				1	5	z ModelDetailView.get_context_data)r0   r1   r2   r!   r/   r+   r+   )r*   r,   ry      s   ry   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 j | |  } t j j	 |  r t
 |   } | j   }	 Wd  QXn d }	 | j i | d 6t j j	 |  d 6|	 d 6| d 6 qH W| j i | d 6| d 6 t t |   j |   S)	Ntemplater9   fileexistscontentsorderr@   	templates)r)   r   rG   r
   	enumeratedirsospathri   r   openreadrO   r.   r$   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)r0   r1   r2   r!   r/   r+   r+   )r*   r,   r   Y  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_listr   _countr   r9   )r   endswith)r^   r+   r+   r,   r     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   r9   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   rn   extendrf   rk   patternrd   rO   r   r@   r   	TypeErrorr   )rg   baserd   re   ppatternsr+   r+   r,   rf     s&    	,rf   c             C   sb   t  |   }  t |   }  |  j d d  j d d  j d d  }  |  j d  s^ d |  }  n  |  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>/".
    ^r9   $?/)r   r	   replacer   )r   r+   r+   r,   rh     s    *rh   )r   r   zdeletezsavezset_);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.utilsr   Zdjango.utils.decoratorsr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r   Zdjango.views.genericr   r   r    r4   r8   rW   rZ   rm   rv   ry   r   r   r   rf   rh   r+   r+   r+   r,   <module>   s@   """"0	&
