ó
­â0_c           @   sR  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" m# Z# m$ Z$ m% Z% d  d l& m' Z( d  d l) m* Z* d d l m+ Z+ d0 Z, d e* f d „  ƒ  YZ- d e- f d „  ƒ  YZ. d e- f d „  ƒ  YZ/ d e- f d  „  ƒ  YZ0 d! e- f d" „  ƒ  YZ1 d# e- f d$ „  ƒ  YZ2 d% e- f d& „  ƒ  YZ3 d' e- f d( „  ƒ  YZ4 d) e- f d* „  ƒ  YZ5 d+ „  Z6 d, „  Z7 d- d d. „ Z9 d/ „  Z: d S(1   iÿÿÿÿN(   t   import_module(   t   apps(   t   settings(   t   admin(   t   staff_member_required(   t   utils(   t   replace_named_groupst   replace_unnamed_groups(   t   ImproperlyConfiguredt   ViewDoesNotExist(   t   models(   t   Http404(   t   Engine(   t   get_mod_funct   get_resolvert   get_urlconft   reverse(   t   method_decorator(   t   func_accepts_kwargst   func_accepts_var_argst   func_has_no_argst   get_func_full_args(   t   ugettext(   t   TemplateViewi   (   t   get_view_namet   _t   add_t   deletet   savet   set_t   BaseAdminDocsViewc           B   s,   e  Z d  Z e e ƒ d „  ƒ Z d „  Z RS(   s(   
    Base view for admindocs views.
    c         O   sG   t  j s+ d |  _ |  j t j j | ƒ ƒ St t |  ƒ j	 | | | Ž S(   Ns   admin_doc/missing_docutils.html(
   R   t   docutils_is_availablet   template_namet   render_to_responseR   t   sitet   each_contextt   superR   t   dispatch(   t   selft   requestt   argst   kwargs(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR%   $   s    		c         K   sL   | j  i t d ƒ d 6ƒ | j  t j j |  j ƒ ƒ t t |  ƒ j |   S(   Ns   admin:indext	   root_path(	   t   updateR   R   R"   R#   R'   R$   R   t   get_context_data(   R&   R)   (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   ,   s    (   t   __name__t
   __module__t   __doc__R   R   R%   R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR       s   t   BookmarkletsViewc           B   s   e  Z d  Z d „  Z RS(   s   admin_doc/bookmarklets.htmlc         K   sP   t  t |  ƒ j |   } | j i d |  j j |  j j ƒ  | d f d 6ƒ | S(   Ns	   %s://%s%sR*   t	   admin_url(   R$   R0   R,   R+   R'   t   schemet   get_host(   R&   R)   t   context(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   5   s
    	((   R-   R.   R    R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR0   2   s   t   TemplateTagIndexViewc           B   s   e  Z d  Z d „  Z RS(   s!   admin_doc/template_tag_index.htmlc         K   s¬  g  } y t  j ƒ  } Wn t k
 r) nYXt | j j ƒ  ƒ } g  | j D] } d | f ^ qI } 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ˆ Wql W| j i | d 6ƒ t t |  ƒ j |   S(   Nt    t   tags   tag:t   .iÿÿÿÿt   namet   titlet   bodyt   metat   libraryt   tags(   R   t   get_defaultR   t   sortedt   template_librariest   itemst   template_builtinsR>   R   t   parse_docstringR/   t	   parse_rstR   t   splitt   appendR+   R$   R5   R,   (   R&   R)   R>   t   enginet   app_libst   libt   builtin_libst   module_nameR=   t   tag_namet   tag_funcR:   R;   t   metadatat   keyt   tag_library(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   A   s2    """+	(   R-   R.   R    R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR5   >   s   t   TemplateFilterIndexViewc           B   s   e  Z d  Z d „  Z RS(   s$   admin_doc/template_filter_index.htmlc         K   s¬  g  } y t  j ƒ  } Wn t k
 r) nYXt | j j ƒ  ƒ } g  | j D] } d | f ^ qI } 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ˆ Wql W| j i | d 6ƒ t t |  ƒ j |   S(   NR6   t   filters   filter:R8   iÿÿÿÿR9   R:   R;   R<   R=   t   filters(   R   R?   R   R@   RA   RB   RC   RT   R   RD   R/   RE   R   RF   RG   R+   R$   RR   R,   (   R&   R)   RT   RH   RI   RJ   RK   RL   R=   t   filter_namet   filter_funcR:   R;   RO   RP   RQ   (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   c   s2    """+	(   R-   R.   R    R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyRR   `   s   t   ViewIndexViewc           B   s   e  Z d  Z d „  Z RS(   s   admin_doc/view_index.htmlc   	      K   sØ   g  } t  t j ƒ } t | j ƒ } x‡ | D] \ } } } } | j i t | ƒ d 6t | ƒ d 6d j | po g  | r~ | g p g  ƒ d 6d j | p˜ g  ƒ d 6| d 6ƒ q+ W| j	 i | d 6ƒ t
 t |  ƒ j |   S(   Nt	   full_namet   urlt   :t   url_namet	   namespaceR9   t   views(   R    R   t   ROOT_URLCONFt   extract_views_from_urlpatternst   urlpatternsRG   R   t   simplify_regext   joinR+   R$   RW   R,   (	   R&   R)   R]   t   urlconft   view_functionst   funct   regexR\   R9   (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   …   s    	)(   R-   R.   R    R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyRW   ‚   s   t   ViewDetailViewc           B   s&   e  Z d  Z e d „  ƒ Z d „  Z RS(   s   admin_doc/view_detail.htmlc         C   sž   t  ƒ  } t | ƒ j |  ƒ rš t |  ƒ \ } } y t t | ƒ | ƒ SWqš t k
 r… t | ƒ \ } } t t t | ƒ | ƒ | ƒ St k
 r– d  SXn  d  S(   N(	   R   R   t   _is_callbackR   t   getattrR    t   ImportErrort   AttributeErrort   None(   t   viewRc   t   modRe   t   klass(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyt   _get_view_func˜   s    	c         K   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(   NRm   s   view:t   modelR9   t   summaryR;   R<   (   R)   Rp   Rl   R   R   RD   R/   RE   R   R+   R$   Rg   R,   (   R&   R)   Rm   t	   view_funcR:   R;   RO   RP   (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   °   s"    	""+	(   R-   R.   R    t   staticmethodRp   R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyRg   •   s   t   ModelIndexViewc           B   s   e  Z d  Z d „  Z RS(   s   admin_doc/model_index.htmlc         K   sL   g  t  j ƒ  D] } | j ^ q } | j i | d 6ƒ t t |  ƒ j |   S(   NR
   (   R   t
   get_modelst   _metaR+   R$   Ru   R,   (   R&   R)   t   mt   m_list(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   È   s    "(   R-   R.   R    R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyRu   Å   s   t   ModelDetailViewc           B   s   e  Z d  Z d „  Z RS(   s   admin_doc/model_detail.htmlc      
   K   s¢  |  j  d } y t j |  j  d ƒ } Wn* t k
 rS t t d ƒ |  j  ƒ ‚ n Xy | j | ƒ } Wn* t k
 r“ t t d ƒ |  j  ƒ ‚ n 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]€\ } } t j | ƒ rày- x& t D] } | j  | ƒ rt! ‚ qqWWn t! k
 r>qàn 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( g  | D]@ } d j( t) | d  ƒ g  | d D] } t* | ƒ ^ qƒ ^ qìƒ } | j i | d	 6| d 6| pU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ƒ qnW| j/ i d | j | j- f d	 6| d 6| d 6|	 d 6| d 6ƒ t0 t1 |  ƒ j2 |   S(   Nt
   model_namet	   app_labels   App %(app_label)r not founds3   Model %(model_name)r not found in app %(app_label)rRq   s   model:s0   the related `%(app_label)s.%(data_type)s` objectt	   data_typeR9   R6   t   verboset	   help_texts/   related `%(app_label)s.%(object_name)s` objectst   object_names   %s.allt   Lists   all %ss   %s.countt   Integers   number of %ss   , t   =i   t	   argumentss   %s.%sRr   t   descriptiont   fieldst   methods(3   R)   R   t   get_app_configt   LookupErrorR   R   t	   get_modelRw   R   RD   R/   RE   R†   t
   isinstanceR
   t
   ForeignKeyt   remote_fieldRq   R-   R|   t   get_readable_field_data_typet   verbose_nameRG   R9   R   t   many_to_manyR{   t   __dict__RB   t   inspectt
   isfunctiont   MODEL_METHODS_EXCLUDEt
   startswitht   StopIterationt   trim_docstringR   R   R   t   get_return_data_typeR   Rb   t   listt   reprt   related_objectst   related_modelR€   t   get_accessor_nameR+   R$   Rz   R,   (   R&   R)   R{   t
   app_configRq   t   optsR:   R;   RO   R†   t   fieldR}   R|   R~   R‡   t	   func_nameRe   t   excludeR„   t   arg_elt   elt   print_argumentst   relt   accessor(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   Ñ   s¶    	""		
	1	5	.&	M		1	5	(   R-   R.   R    R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyRz   Î   s   t   TemplateDetailViewc           B   s   e  Z d  Z d „  Z RS(   s   admin_doc/template_detail.htmlc   
      K   s  |  j  d } g  } y t j ƒ  } Wn t k
 r6 n§ 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ƒ qG W| j i | d 6| d 6ƒ t t |  ƒ j |   S(	   Nt   templateR6   t   filet   existst   contentst   orderR9   t	   templates(   R)   R   R?   R   t	   enumeratet   dirst   ost   pathRb   R«   t   opent   readRG   R+   R$   R¨   R,   (
   R&   R)   R©   R®   t   default_enginet   indext	   directoryt   template_filet   ft   template_contents(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR,   S  s*    		(   R-   R.   R    R,   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR¨   P  s   c         C   s<   |  j  d ƒ r8 |  j d ƒ r" d S|  j d ƒ r8 d Sn  d S(   s9   Return a somewhat-helpful data type given a function namet   get_t   _listR   t   _countR‚   R6   (   R•   t   endswith(   R¡   (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR˜   v  s    c         C   s   |  j  |  j S(   sË   Returns 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    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyRŽ   €  s    R6   c         C   sÿ   g  } xò |  D]ê } t  | d ƒ r‹ y | j } Wn t k
 rE q n X| j t | | | j j | ph g  | j r} | j g p€ g  ƒ ƒ q t  | d ƒ rá y- | j | j	 | | j j | | j
 f ƒ Wq÷ t k
 rÝ q q÷ Xq t t d ƒ | ƒ ‚ q W| S(   s…   
    Return a list of views from a list of urlpatterns.

    Each object in the returned list is a two-tuple: (view_func, regex)
    t   url_patternst   callbacks,   %s does not appear to be a urlpattern object(   t   hasattrR¿   Rj   t   extendR_   Rf   t   patternR\   RG   RÀ   R9   R	   t	   TypeErrorR   (   R`   t   baseR\   R]   t   pt   patterns(    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyR_   ˆ  s&    	,
c         C   sb   t  |  ƒ }  t |  ƒ }  |  j d d ƒ j d d ƒ j d d ƒ }  |  j d ƒ s^ d |  }  n  |  S(   sÎ   
    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>/".
    t   ^R6   t   $t   ?t   /(   R   R   t   replaceR•   (   RÃ   (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyRa   ¥  s    *(   R   R   R   R   R   (;   R’   R±   t	   importlibR    t   django.appsR   t   django.confR   t   django.contribR   t%   django.contrib.admin.views.decoratorsR   t   django.contrib.admindocsR   t   django.contrib.admindocs.utilsR   R   t   django.core.exceptionsR   R	   t	   django.dbR
   t   django.httpR   t   django.template.engineR   t   django.urlsR   R   R   R   t   django.utils.decoratorsR   t   django.utils.inspectR   R   R   R   t   django.utils.translationR   R   t   django.views.genericR   R   R”   R   R0   R5   RR   RW   Rg   Ru   Rz   R¨   R˜   RŽ   Rl   R_   Ra   (    (    (    s@   /tmp/pip-unpacked-wheel-BAJOf3/django/contrib/admindocs/views.pyt   <module>   s@   """"0	‚&	
	