o
    [htL                     @   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mZ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 d dlmZ d dlm Z 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/Z0 d dl1m2Z2 ddlm3Z3m4Z4 dZ5G dd de2Z6G dd de6Z7G dd de6Z8G dd  d e6Z9G d!d" d"e6Z:G d#d$ d$e6Z;d%d& Z<G d'd( d(e6Z=G d)d* d*e6Z>G d+d, d,e6Z?d-d. Z@d/d0 ZAd6d2d3ZBd4d5 ZCdS )7    N)import_module)cleandoc)Path)apps)admin)staff_member_required)utils)remove_non_capturing_groupsreplace_metacharactersreplace_named_groupsreplace_unnamed_groups)get_permission_codename)ImproperlyConfiguredPermissionDeniedViewDoesNotExist)models)Http404)Engine)get_mod_funcget_resolverget_urlconf)	safe_join)method_decorator)cached_property)func_accepts_kwargsfunc_accepts_var_argsget_func_full_argsmethod_has_no_args)gettext)TemplateView   )get_view_namestrip_p_tags)_Zadd_deletesaveZset_c                       s4   e Zd ZdZee fddZ fddZ  ZS )BaseAdminDocsViewz(
    Base view for admindocs views.
    c                    s8   t jsd| _| tj|S t j|g|R i |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__ /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/django/contrib/admindocs/views.pyr+   1   s   zBaseAdminDocsView.dispatchc                    s$   t  jdi i |tj| jS )Nr2   )r*   get_context_datar   r(   r)   r-   )r,   r/   r0   r2   r3   r4   9   s   
z"BaseAdminDocsView.get_context_data)	__name__
__module____qualname____doc__r   r   r+   r4   __classcell__r2   r2   r0   r3   r&   ,   s
    r&   c                   @   s   e Zd ZdZdS )BookmarkletsViewzadmin_doc/bookmarklets.htmlN)r5   r6   r7   r'   r2   r2   r2   r3   r:   B   s    r:   c                           e Zd ZdZ fddZ  ZS )TemplateTagIndexViewz!admin_doc/template_tag_index.htmlc              
        g }zt  }W n	 ty   Y nlw t|j }dd |jD }|| D ]W\}}|j D ]M\}}	t	|	j
\}
}}|
oGt|
dtd| }
|oTt|dtd| }|D ]}t|| dtd| ||< qW|dd }|||
|||d q.q%t jd	i i |d|iS )
Nc                 S      g | ]}d |fqS  r2   .0libr2   r2   r3   
<listcomp>R       z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.nametitlebodymetalibrarytagsr2   )r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrO   r   parse_docstringr8   	parse_rstr#   splitappendr*   r4   )r,   r/   rO   engineapp_libsbuiltin_libsmodule_namerN   Ztag_nameZtag_funcrK   rL   metadatakeytag_libraryr0   r2   r3   r4   I   s<   
z%TemplateTagIndexView.get_context_datar5   r6   r7   r'   r4   r9   r2   r2   r0   r3   r<   F       r<   c                       r;   )TemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc              
      r=   )
Nc                 S   r>   r?   r2   rA   r2   r2   r3   rD   w   rE   z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:rG   rH   rI   filtersr2   )r   rP   r   rQ   rR   rS   rT   rd   r   rU   r8   rV   r#   rW   rX   r*   r4   )r,   r/   rd   rY   rZ   r[   r\   rN   Zfilter_nameZfilter_funcrK   rL   r]   r^   r_   r0   r2   r3   r4   n   s@   
z(TemplateFilterIndexView.get_context_datar`   r2   r2   r0   r3   rb   k   ra   rb   c                       r;   )ViewIndexViewzadmin_doc/view_index.htmlc           	   	      s   g }t t }zt|j}W n ty   g }Y nw |D ]&\}}}}|t|t|d|p/g |r4|gp5g  d|p<g |d qt	 j
di i |d|iS )N:)Z	full_nameurlZurl_name	namespacerJ   viewsr2   )r   r   extract_views_from_urlpatternsurl_patternsr   rX   r!   simplify_regexjoinr*   r4   )	r,   r/   ri   Zurl_resolverZview_functionsfuncregexrh   rJ   r0   r2   r3   r4      s"   
	zViewIndexView.get_context_datar`   r2   r2   r0   r3   re      ra   re   c                       s,   e Zd ZdZedd Z fddZ  ZS )ViewDetailViewzadmin_doc/view_detail.htmlc                 C   sh   t  }t|| r2t| \}}ztt||W S  ty1   t|\}}ttt||| Y S w d S )N)r   r   Z_is_callbackr   getattrr   ImportError)viewZurlconfmodrn   klassr2   r2   r3   _get_view_func   s   zViewDetailView._get_view_funcc              	      s   | j d }| |}|d u rtt|j\}}}|o%t|dtd| }|o2t|dtd| }|D ]}t|| dtd| ||< q5t j	di i ||t
|||dS )Nrs   zview:model)rJ   summaryrL   rM   r2   )r/   rv   r   r   rU   r8   rV   r#   r*   r4   r"   )r,   r/   rs   Z	view_funcrK   rL   r]   r^   r0   r2   r3   r4      s&   

 
zViewDetailView.get_context_data)r5   r6   r7   r'   staticmethodrv   r4   r9   r2   r2   r0   r3   rp      s
    
rp   c                 C   s<   t d|}t d|}| d|j|f p| d|j|f S )z)Based off ModelAdmin.has_view_permission.rs   Zchangez%s.%s)r   Zhas_perm	app_label)useroptsZcodename_viewZcodename_changer2   r2   r3   user_has_model_view_permission   s
   

r}   c                       r;   )ModelIndexViewzadmin_doc/model_index.htmlc                    s4    fddt  D }t jdi i |d|iS )Nc                    s"   g | ]}t  jj|jr|jqS r2   )r}   r-   r{   _meta)rB   mr,   r2   r3   rD      s    z3ModelIndexView.get_context_data.<locals>.<listcomp>r   r2   )r   Z
get_modelsr*   r4   )r,   r/   Zm_listr0   r   r3   r4      s   
zModelIndexView.get_context_datar`   r2   r2   r0   r3   r~      ra   r~   c                       r;   )ModelDetailViewzadmin_doc/model_detail.htmlc                    s  | j d }z
t| j d }W n ty   ttd| j  w z||}W n ty7   ttd| j  w |j}t| j	j
|sDtt|j\}}}|oYt|dtd| }|oft|dtd| }g }	|jD ];}
t|
tjr|
jjj}|
jjjj}ttd||d dtd| }nt|
}|
j}|	|
j||pd	|
jd
 ql|jD ]J}
|
jjj}|
jjjj}td||d }|	d|
j dttd| dtd|j d |	d|
j dttd| dtd|j d qg }|j  D ]\}}t!"|st|t#t$frzt%D ]}|&|rt'qW n
 t'y)   Y qw |j}|o=tt(|dtd|j }t|t#t$frU|	|t)||pPd	d qt*|rst+|sst,|ss|	|t)||pnd	d qt-|}d.dd |D }||||pd	d q|j/D ]G}td|j0jj|j0jj1d }|j2}|	d| dttd| dtd|j d |	d| dttd| dtd|j d qt3 j4di i ||j5t6|||	|dS )N
model_namerz   zApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrw   zmodel:z0the related `%(app_label)s.%(data_type)s` object)rz   	data_typer@   )rJ   r   verbose	help_textz/related `%(app_label)s.%(object_name)s` objects)rz   object_namez%s.allListzall %s)rJ   r   r   z%s.countIntegerznumber of %sz, c              
   S   s.   g | ]}d  |d gtt|dd qS )=r   r    N)rm   maprepr)rB   Zarg_elr2   r2   r3   rD   k  s     z4ModelDetailView.get_context_data.<locals>.<listcomp>)rJ   	argumentsr   )rJ   rx   descriptionfieldsmethodsr2   )7r/   r   Zget_app_configLookupErrorr   r#   Z	get_modelr   r}   r-   r{   r   r   rU   r8   rV   r   
isinstancer   Z
ForeignKeyZremote_fieldrw   r5   rz   get_readable_field_data_typeZverbose_namerX   rJ   r   Zmany_to_manyr   __dict__rS   inspect
isfunctionr   propertyMODEL_METHODS_EXCLUDE
startswithStopIterationr   get_return_data_typer   r   r   r   rm   Zrelated_objectsZrelated_modelr   Zaccessor_namer*   r4   labelr"   )r,   r/   r   Z
app_configrw   r|   rK   rL   r]   r   fieldr   rz   r   r   	func_namern   excluder   Zprint_argumentsrelaccessorr0   r2   r3   r4      s4  






	

		

z ModelDetailView.get_context_datar`   r2   r2   r0   r3   r      ra   r   c                       r;   )TemplateDetailViewzadmin_doc/template_detail.htmlc                    s   | j d }g }zt }W n	 ty   Y nHw t|j}|jD ]}t|dr6| D ]}||vr5|	| q*qt
|D ]"\}}	tt|	|}
|
 rO|
 }nd}|	|
|
 ||d q;t jdi i |||dS )Ntemplateget_dirsr@   )fileexistscontentsorder)rJ   	templatesr2   )r/   r   rP   r   listdirsZtemplate_loadershasattrr   rX   	enumerater   r   r   	read_textr*   r4   )r,   r/   r   r   Zdefault_enginedirectoriesloaderZdir_index	directoryZtemplate_fileZtemplate_contentsr0   r2   r3   r4     sD   






z#TemplateDetailView.get_context_datar`   r2   r2   r0   r3   r     ra   r   c                 C   s*   |  dr| drdS | drdS dS )z9Return a somewhat-helpful data type given a function nameget_Z_listr   _countr   r@   )r   endswith)r   r2   r2   r3   r     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   r2   r2   r3   r     s   r   r@   c              	   C   s   g }| D ]X}t |dr4z|j}W n	 ty   Y qw |t||t|j |p'g |jr.|jgp/g   qt |drUz||j	|t|j ||j
f W q tyT   Y qw ttd| |S )z
    Return a list of views from a list of urlpatterns.

    Each object in the returned list is a 4-tuple:
    (view_func, regex, namespace, name)
    rk   callbackz,%s does not appear to be a urlpattern object)r   rk   rr   extendrj   strpatternrh   rX   r   rJ   r   	TypeErrorr#   )Zurlpatternsbaserh   ri   ppatternsr2   r2   r3   rj     s.   


$rj   c                 C   s6   t | } t| } t| } t| } | 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>/".
    /)r	   r   r   r
   r   )r   r2   r2   r3   rl     s   
rl   )r@   N)Dr   	importlibr   r   pathlibr   Zdjango.appsr   Zdjango.contribr   Z%django.contrib.admin.views.decoratorsr   Zdjango.contrib.admindocsr   Zdjango.contrib.admindocs.utilsr	   r
   r   r   Zdjango.contrib.authr   Zdjango.core.exceptionsr   r   r   Z	django.dbr   Zdjango.httpr   Zdjango.template.enginer   Zdjango.urlsr   r   r   Zdjango.utils._osr   Zdjango.utils.decoratorsr   Zdjango.utils.functionalr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r#   Zdjango.views.genericr   r!   r"   r   r&   r:   r<   rb   re   rp   r}   r~   r   r   r   r   rj   rl   r2   r2   r2   r3   <module>   sL    %')	 9.

	