
 XF                 @   sr  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 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* d4 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,  Z0 Gd! d"   d" e,  Z1 Gd# d$   d$ e,  Z2 Gd% d&   d& e,  Z3 Gd' d(   d( e,  Z4 d) d*   Z5 d+ d,   Z6 d- d d. d/  Z7 e j8 d0  Z9 e j8 d1  Z: d2 d3   Z; d S)5    N)import_module)apps)settings)admin)staff_member_required)utils)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__ L/home/ubuntu/projects/ifolica/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"   r2   r-   r,   r%   schemeget_host)r$   r'   context)r(   r)   r*   r-   2   s
    	(z!BookmarkletsView.get_context_data)r.   r/   r0   r   r-   r)   r)   )r(   r*   r2   /   s   r2   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>G   s   	 z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.   nametitlebodymetalibrarytags)r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrC   r   parse_docstringr1   	parse_rstr   splitappendr,   r"   r6   r-   )r$   r'   rC   engineapp_libsbuiltin_libsmodule_namerB   Ztag_nameZtag_funcr?   r@   metadatakeytag_library)r(   r)   r*   r-   >   s2    ""+	z%TemplateTagIndexView.get_context_data)r.   r/   r0   r   r-   r)   r)   )r(   r*   r6   ;   s   r6   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)r7   r)   )r8   r9   r)   r)   r*   r:   i   s   	 z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:r<   r=   r>   r?   r@   rA   rB   filtersrD   )r   rE   r   rF   rG   rH   rI   rW   r   rJ   r1   rK   r   rL   rM   r,   r"   rU   r-   )r$   r'   rW   rN   rO   rP   rQ   rB   Zfilter_nameZfilter_funcr?   r@   rR   rS   rT   )r(   r)   r*   r-   `   s2    ""+	z(TemplateFilterIndexView.get_context_data)r.   r/   r0   r   r-   r)   r)   )r(   r*   rU   ]   s   rU   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.%sr.   )r/   r   PY3r0   getattrr(   r.   )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)NZ	full_nameurl:url_name	namespacer>   views)r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrM   r]   simplify_regexjoinr,   r"   rX   r-   )	r$   r'   rb   urlconfZview_functionsr[   regexra   r>   )r(   r)   r*   r-      s    	)zViewIndexView.get_context_data)r.   r/   r0   r   staticmethodr]   r-   r)   r)   )r(   r*   rX      s   
rX   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   rZ   r   ImportErrorAttributeError)viewrg   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)Nrm   zview:modelr>   summaryr@   rA   )r'   rp   r   r   rJ   r1   rK   r   r,   r"   rj   r-   )r$   r'   rm   Z	view_funcr?   r@   rR   rS   )r(   r)   r*   r-      s"    	""+	zViewDetailView.get_context_data)r.   r/   r0   r   ri   rp   r-   r)   r)   )r(   r*   rj      s   rj   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)r8   mr)   r)   r*   r:      s   	 z3ModelIndexView.get_context_data.<locals>.<listcomp>r
   )r   Z
get_modelsr,   r"   rs   r-   )r$   r'   Zm_list)r(   r)   r*   r-      s    zModelIndexView.get_context_data)r.   r/   r0   r   r-   r)   r)   )r(   r*   rs      s   rs   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)rrq   zmodel:z0the related `%(app_label)s.%(data_type)s` object	data_typer>   r7   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)r8   elr)   r)   r*   r:   4  s   	 z?ModelDetailView.get_context_data.<locals>.<listcomp>.<listcomp>)rf   list)r8   Zarg_elr)   r)   r*   r:   4  s   	z4ModelDetailView.get_context_data.<locals>.<listcomp>	argumentsz%s.%srr   descriptionfieldsmethods)1r'   r   Zget_app_configLookupErrorr   r   Z	get_modelrt   r   rJ   r1   rK   r   
isinstancer
   Z
ForeignKeyZremote_fieldrq   r.   rx   get_readable_field_data_typeZverbose_namerM   r>   r{   Zmany_to_manyrw   __dict__rH   inspectZ
isfunctionMODEL_METHODS_EXCLUDE
startswithStopIterationZtrim_docstringr   r   r   get_return_data_typer   rf   Zrelated_objectsZrelated_modelr|   Zget_accessor_namer,   r"   rv   r-   )r$   r'   rw   Z
app_configrq   optsr?   r@   rR   r   fieldry   rx   rz   r   r\   r[   excluder   print_argumentsrelZaccessor)r(   r)   r*   r-      s    	""		
	1	5	.&				1	5	z ModelDetailView.get_context_data)r.   r/   r0   r   r-   r)   r)   )r(   r*   rv      s   rv   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)Nr7   )ospathr   openreadr)   )template_filer)   r*   <lambda>j  s    z5TemplateDetailView.get_context_data.<locals>.<lambda>contentsorderr>   	templates)r'   r   rE   r   	enumeratedirsr   r   rf   rM   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/   r0   r   r-   r)   r)   )r(   r*   r   X  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~   r7   )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.)r   r   )r   r)   r)   r*   r     s    r   r7   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   rk   extendrc   rh   patternra   rM   r   r>   r	   	TypeErrorr   )rd   basera   rb   ppatternsr)   r)   r*   rc     s&    	,rc   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)ru   r)   r)   r*   r     s    z simplify_regex.<locals>.<lambda>z<var>^r7   $?z///\)named_group_matchersubnon_named_group_matcherreplacer   )r   r)   r)   r*   re     s    Bre   )r   r   zdeletezsavezset_)<r   r   re	importlibr   Zdjango.appsr   Zdjango.confr   Zdjango.contribr   Z%django.contrib.admin.views.decoratorsr   Zdjango.contrib.admindocsr   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   r2   r6   rU   rX   rj   rs   rv   r   r   r   rc   compiler   r   re   r)   r)   r)   r*   <module>   sD   """"0	!
