ó
ø¢TQc           @   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 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+ Z% d e& f d „  ƒ  YZ' e
 d „  ƒ Z( e
 d „  ƒ Z) e
 d „  ƒ Z* e
 d „  ƒ Z+ e
 d „  ƒ Z, e
 d „  ƒ Z- e
 d „  ƒ Z. e
 d  „  ƒ Z/ e
 d! „  ƒ Z0 d" „  Z1 d# „  Z2 d$ „  Z3 d% „  Z4 d& d' „ Z5 e j6 d( ƒ Z7 e j6 d) ƒ Z8 d* „  Z9 d S(,   iÿÿÿÿN(   t   template(   t   RequestContext(   t   settings(   t   staff_member_required(   t   models(   t   render_to_response(   t   ImproperlyConfiguredt   ViewDoesNotExist(   t   Http404(   t   urlresolvers(   t   utils(   t   Site(   t   import_module(   t   upath(   t   six(   t   ugettext(   t	   mark_safet   _t   add_t   deletet   savet   set_t   GenericSitec           B   s   e  Z d  Z d Z RS(   s   example.coms   my site(   t   __name__t
   __module__t   domaint   name(    (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyR      s   c         C   s<   t  j s t |  ƒ St d i t j d ƒ d 6d t |  ƒ ƒS(   Ns   admin_doc/index.htmls   admin:indext	   root_patht   context_instance(   R
   t   docutils_is_availablet   missing_docutils_pageR   R	   t   reverseR   (   t   request(    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt	   doc_index   s
    	
	c      	   C   s[   t  j d ƒ } t d i | d 6d |  j ƒ  r4 d p7 d |  j ƒ  | f d 6d t |  ƒ ƒS(	   Ns   admin:indexs   admin_doc/bookmarklets.htmlR   s	   %s://%s%st   httpst   httpt	   admin_urlR   (   R	   R   R   t	   is_securet   get_hostR   (   R    t
   admin_root(    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   bookmarklets%   s
    	/c         C   sÃ  t  j s t |  ƒ St ƒ  g  } t t j t j ƒ ƒ } g  t j	 D] } d  | f ^ qB } x6| | 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| t j	 k rHd } n | j d ƒ d } | j i | d 6|	 d 6|
 d 6| d	 6| d
 6ƒ q Wqe Wt d i t j d ƒ d 6| d 6d t |  ƒ ƒS(   Nt   tags   tag:t    t   .iÿÿÿÿR   t   titlet   bodyt   metat   librarys!   admin_doc/template_tag_index.htmls   admin:indexR   t   tagsR   (   R
   R   R   t%   load_all_installed_template_librariest   listR   t	   iteritemsR    t	   librariest   builtinst   NoneR0   t   itemst   parse_docstringt   __doc__t	   parse_rstR   t   splitt   appendR   R	   R   R   (   R    R0   t   app_libst   libt   builtin_libst   module_nameR/   t   tag_namet   tag_funcR,   R-   t   metadatat   keyt   tag_library(    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   template_tag_index-   s8    	
"""+			
c         C   sÃ  t  j s t |  ƒ St ƒ  g  } t t j t j ƒ ƒ } g  t j	 D] } d  | f ^ qB } x6| | 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| t j	 k rHd } n | j d ƒ d } | j i | d 6|	 d 6|
 d 6| d	 6| d
 6ƒ q Wqe Wt d i t j d ƒ d 6| d 6d t |  ƒ ƒS(   Nt   filters   filter:R*   R+   iÿÿÿÿR   R,   R-   R.   R/   s$   admin_doc/template_filter_index.htmls   admin:indexR   t   filtersR   (   R
   R   R   R1   R2   R   R3   R    R4   R5   R6   RH   R7   R8   R9   R:   R   R;   R<   R   R	   R   R   (   R    RH   R=   R>   R?   R@   R/   t   filter_namet   filter_funcR,   R-   RC   RD   RE   (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   template_filter_indexP   s8    	
"""+			
c   
   
   C   sG  t  j s t |  ƒ St j rA g  t j D] } t | ƒ ^ q& } n	 t g } g  } xÄ | D]¼ } t | j ƒ } t | j ƒ } t	 j
 j r¢ t	 j j d | j ƒ } n	 t ƒ  } xe | D]] \ } }	 | j i d | j t | d | j j ƒ f d 6| j d 6| d 6t |	 ƒ d 6ƒ q² WqW Wt d i t j d	 ƒ d
 6| d 6d t |  ƒ ƒS(   Nt   pks   %s.%sR   t	   full_namet   site_idt   sitet   urls   admin_doc/view_index.htmls   admin:indexR   t   viewsR   (   R
   R   R   R   t	   ADMIN_FORR   t   ROOT_URLCONFt   extract_views_from_urlpatternst   urlpatternsR   t   _metat	   installedt   objectst   gett   SITE_IDR   R<   R   t   getattrt	   __class__R   t   simplify_regexR   R	   R   R   (
   R    t   mt   settings_modulesRQ   t   settings_modt   urlconft   view_functionst   site_objt   funct   regex(    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt
   view_indexs   s,    	
	%			&
	
c   	      C   sI  t  j s t |  ƒ St j | ƒ \ } } y t t | ƒ | ƒ } Wn t t f k
 r` t	 ‚ n Xt  j
 | j ƒ \ } } } | r¤ t  j | d t d ƒ | ƒ } n  | rÌ t  j | d t d ƒ | ƒ } n  x5 | D]- } t  j | | d t d ƒ | ƒ | | <qÓ Wt d i t j d ƒ d 6| d 6| d 6| d	 6| d
 6d t |  ƒ ƒS(   Nt   views   view:t   models   admin_doc/view_detail.htmls   admin:indexR   R   t   summaryR-   R.   R   (   R
   R   R   R	   t   get_mod_funcR[   R   t   ImportErrort   AttributeErrorR   R8   R9   R:   R   R   R   R   (	   R    Rg   t   modRd   t	   view_funcR,   R-   RC   RD   (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   view_detail‘   s*    	

""+	
c         C   se   t  j s t |  ƒ Sg  t j ƒ  D] } | j ^ q  } t d i t j d ƒ d 6| d 6d t	 |  ƒ ƒS(   Ns   admin_doc/model_index.htmls   admin:indexR   R   R   (
   R
   R   R   R   t
   get_modelsRV   R   R	   R   R   (   R    R^   t   m_list(    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   model_indexª   s    	
"	
c         C   sØ  t  j s t |  ƒ Sy t j | ƒ } Wn' t k
 rO t t d ƒ | ƒ ‚ n Xd  } x9 t j	 | ƒ D]( } | j
 j j ƒ  | k rf | } Pqf qf W| d  k rÅ t t d ƒ i | d 6| d 6ƒ ‚ n  | j
 } g  } xÂ | j D]· } t | t j ƒ rQ| 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|
 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£Wx÷ | j j ƒ  D]æ \ } } t j | ƒ ršt  t j! | ƒ d ƒ d k ršy- x& t" D] } | j# | ƒ rÞt$ ‚ qÞqÞWWn t$ k
 rqšn X| j% }
 |
 rUt  j t  j& |
 ƒ d t d ƒ | j ƒ }
 n  | j i | d	 6t' | ƒ d 6|
 d
 6ƒ qšqšWxì | j( ƒ  | j) ƒ  D]Ô } t d ƒ i | j* j d 6| 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›Wt, d i t- j. d ƒ d 6d | j | j f d	 6t d ƒ | j d 6| j% d 6| d 6d t/ |  ƒ ƒS(   Ns   App %r not founds3   Model %(model_name)r not found in app %(app_label)rt
   model_namet	   app_labels0   the related `%(app_label)s.%(data_type)s` objectt	   data_typeRh   s   model:R   t   verboset	   help_texts/   related `%(app_label)s.%(object_name)s` objectst   object_names   %s.allt   Lists   all %ss   %s.countt   Integers   number of %si    i   s   admin_doc/model_detail.htmls   admin:indexR   s   %s.%ss   Fields on %s objectsRi   t   descriptiont   fieldsR   (0   R
   R   R   R   t   get_appR   R   R   R6   Rp   RV   Rx   t   lowerR|   t
   isinstancet
   ForeignKeyt   relt   toR   Rt   R:   t   get_readable_field_data_typet   verbose_nameR<   R   Rw   t   many_to_manyR@   t   __dict__R7   t   inspectt
   isfunctiont   lent
   getargspect   MODEL_METHODS_EXCLUDEt
   startswitht   StopIterationR9   t   trim_docstringt   get_return_data_typet   get_all_related_objectst$   get_all_related_many_to_many_objectst   optst   get_accessor_nameR   R	   R   R   (   R    Rt   Rs   t   app_modRh   R^   R’   R|   t   fieldRu   Rv   t	   func_nameRd   t   excludeR   t   accessor(    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   model_detail´   s    	
'	:		
	1	5.	.	*	1	5	

c            s  g  } x× t  j D]Ì } t | ƒ } t j j rI t j j d | j ƒ } n	 t	 ƒ  } x‡ | j
 D]| } t j j | | ƒ ‰  | j i ˆ  d 6t j j ˆ  ƒ d 6‡  f d †  d 6| j d 6| d 6t | j
 ƒ j | ƒ d 6ƒ q\ Wq Wt d	 i t j d
 ƒ d 6| d 6| d 6d t |  ƒ ƒS(   NRL   t   filet   existsc              s(   t  j j ˆ  ƒ r$ t ˆ  ƒ j ƒ  p' d S(   NR*   (   t   ost   pathR›   t   opent   read(    (   t   template_file(    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   <lambda>!  s    t   contentsRN   RO   t   orders   admin_doc/template_detail.htmls   admin:indexR   R   t	   templatesR   (   R   RR   R   R   RV   RW   RX   RY   RZ   R   t   TEMPLATE_DIRSRœ   R   t   joinR<   R›   R2   t   indexR   R	   R   R   (   R    R    R¤   t   site_settings_moduleR`   Rc   t   dir(    (   R    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   template_detail  s(    		
%	
c         C   s
   t  d ƒ S(   s4   Display an error message for people without docutilss   admin_doc/missing_docutils.html(   R   (   R    (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyR   0  s    c          C   sæ   xß t  j ƒ  D]Ñ }  t |  ƒ } yj g  t j t j j t | j ƒ ƒ ƒ D]; } | j	 d ƒ rG | d j
 ƒ  rG t j j | ƒ d ^ qG } Wn t k
 r¢ g  } n Xx8 | D]0 } y t  j | ƒ } Wqª t  j k
 rÙ qª Xqª Wq Wd  S(   Ns   .pyi    (   R    t   get_templatetags_modulesR   Rœ   t   listdirR   t   dirnameR   t   __file__t   endswitht   isalphat   splitextt   OSErrort   get_libraryt   InvalidTemplateLibrary(   R@   Rm   t   pR4   t   library_nameR>   (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyR1   4  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   _listRy   t   _countRz   R*   (   RŒ   R¯   (   R–   (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyR   F  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•   (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyRƒ   O  s    R*   c         C   sÔ   g  } xÇ |  D]¿ } t  | d ƒ ri y | j } Wn t k
 rE q n X| j t | | | j j ƒ ƒ q t  | d ƒ r¶ y$ | 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º   Rk   t   extendRT   Re   t   patternR<   R»   R   t	   TypeErrorR   (   RU   t   baseRQ   Rµ   t   patterns(    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyRT   V  s    #$
s   \(\?P(<\w+>).+?\)s   \(.*?\)c         C   s‰   t  j 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(
   sØ   
    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(   Ni   (   t   group(   R^   (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyR¡   w  s    s   <var>t   ^R*   t   $t   ?s   //t   /s   \(   t   named_group_matchert   subt   non_named_group_matchert   replaceRŒ   (   R¾   (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyR]   p  s    B(   R   R   R   s   saves   set_(:   R‡   Rœ   t   ret   djangoR    t   django.templateR   t   django.confR   t%   django.contrib.admin.views.decoratorsR   t	   django.dbR   t   django.shortcutsR   t   django.core.exceptionsR   R   t   django.httpR   t   django.coreR	   t   django.contrib.admindocsR
   t   django.contrib.sites.modelsR   t   django.utils.importlibR   t   django.utils._osR   t   django.utilsR   t   django.utils.translationR   R   t   django.utils.safestringR   R‹   t   objectR   R!   R(   RF   RK   Rf   Ro   Rr   R™   Rª   R   R1   R   Rƒ   RT   t   compileRÇ   RÉ   R]   (    (    (    s7   ../Django//lib/python/django/contrib/admindocs/views.pyt   <module>   sJ   ##
_					