o
    h@                     @   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 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 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, dZ-G dd de+Z.G dd de.Z/G dd de.Z0G dd de.Z1G dd  d e.Z2G d!d" d"e.Z3G d#d$ d$e.Z4G d%d& d&e.Z5G d'd( d(e.Z6d)d* Z7d+d, Z8d2d.d/Z9d0d1 Z:dS )3    N)import_module)cleandoc)Path)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)method_decorator)func_accepts_kwargsfunc_accepts_var_argsget_func_full_argsmethod_has_no_args)gettext)TemplateView   )get_view_name)_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__ f/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/django/contrib/admindocs/views.pyr%   %   s   zBaseAdminDocsView.dispatchc                    s$   t  jdi i |tj| jS )Nr,   )r$   get_context_datar   r"   r#   r'   )r&   r)   r*   r,   r-   r.   -   s
   z"BaseAdminDocsView.get_context_data)	__name__
__module____qualname____doc__r   r   r%   r.   __classcell__r,   r,   r*   r-   r    !   s
    r    c                   @   s   e Zd ZdZdS )BookmarkletsViewzadmin_doc/bookmarklets.htmlN)r/   r0   r1   r!   r,   r,   r,   r-   r4   4   s    r4   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  r,   .0libr,   r,   r-   
<listcomp>D       z9TemplateTagIndexView.get_context_data.<locals>.<listcomp>tagztag:.nametitlebodymetalibrarytagsr,   )r   get_defaultr   sortedtemplate_librariesitemstemplate_builtinsrI   r	   parse_docstringr2   	parse_rstr   splitappendr$   r.   )r&   r)   rI   engineapp_libsbuiltin_libsmodule_namerH   Ztag_nameZtag_funcrE   rF   metadatakeytag_libraryr*   r,   r-   r.   ;   2    
z%TemplateTagIndexView.get_context_datar/   r0   r1   r!   r.   r3   r,   r,   r*   r-   r6   8       r6   c                       r5   )TemplateFilterIndexViewz$admin_doc/template_filter_index.htmlc              
      r7   )
Nc                 S   r8   r9   r,   r;   r,   r,   r-   r>   c   r?   z<TemplateFilterIndexView.get_context_data.<locals>.<listcomp>filterzfilter:rA   rB   rC   filtersr,   )r   rJ   r   rK   rL   rM   rN   r_   r	   rO   r2   rP   r   rQ   rR   r$   r.   )r&   r)   r_   rS   rT   rU   rV   rH   Zfilter_nameZfilter_funcrE   rF   rW   rX   rY   r*   r,   r-   r.   Z   rZ   z(TemplateFilterIndexView.get_context_datar[   r,   r,   r*   r-   r]   W   r\   r]   c                       r5   )ViewIndexViewzadmin_doc/view_index.htmlc           	   	      s   g }t tj}t|j}|D ]&\}}}}|t|t|d|p!g |r&|gp'g  d|p.g |d qt	 j
di i |d|iS )N:)Z	full_nameurlZurl_name	namespacerD   viewsr,   )r   r   ZROOT_URLCONFextract_views_from_urlpatternsurlpatternsrR   r   simplify_regexjoinr$   r.   )	r&   r)   rd   urlconfZview_functionsfuncregexrc   rD   r*   r,   r-   r.   y   s   


zViewIndexView.get_context_datar[   r,   r,   r*   r-   r`   v   r\   r`   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)viewri   modrj   klassr,   r,   r-   _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 |||||dS )Nro   zview:model)rD   summaryrF   rG   r,   )
r)   rr   r   r	   rO   r2   rP   r   r$   r.   )r&   r)   ro   Z	view_funcrE   rF   rW   rX   r*   r,   r-   r.      s"   

 zViewDetailView.get_context_data)r/   r0   r1   r!   staticmethodrr   r.   r3   r,   r,   r*   r-   rl      s
    
rl   c                       r5   )ModelIndexViewzadmin_doc/model_index.htmlc                    s0   dd t  D }t jdi i |d|iS )Nc                 S   s   g | ]}|j qS r,   )_meta)r<   mr,   r,   r-   r>      s    z3ModelIndexView.get_context_data.<locals>.<listcomp>r   r,   )r   Z
get_modelsr$   r.   )r&   r)   Zm_listr*   r,   r-   r.      s   zModelIndexView.get_context_datar[   r,   r,   r*   r-   rv      r\   rv   c                       r5   )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
\}}}|oPt|dtd| }|o]t|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
 qc|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rzt D ]}|!|rt"qW n
 t"y   Y qw |j
}|o2tt#|dtd|j }t|trH|	|t$||pCd	d qt%|rft&|sft'|sf|	|t$||pad	d qt(|}d)dd |D }||||p|d	d q|j*D ]H}td|j+jj|j+jj,d }|- }|	d| dttd| dtd|j d |	d| dttd| dtd|j d qt. j/di i ||j0|||	|dS )N
model_name	app_labelzApp %(app_label)r not foundz3Model %(model_name)r not found in app %(app_label)rrs   zmodel:z0the related `%(app_label)s.%(data_type)s` object)r{   	data_typer:   )rD   r|   verbose	help_textz/related `%(app_label)s.%(object_name)s` objects)r{   object_namez%s.allListzall %s)rD   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)rh   maprepr)r<   Zarg_elr,   r,   r-   r>     s     z4ModelDetailView.get_context_data.<locals>.<listcomp>)rD   	argumentsr}   )rD   rt   descriptionfieldsmethodsr,   )1r)   r   Zget_app_configLookupErrorr   r   Z	get_modelrw   r	   rO   r2   rP   r   
isinstancer   Z
ForeignKeyZremote_fieldrs   r/   r{   get_readable_field_data_typeZverbose_namerR   rD   r~   Zmany_to_manyrz   __dict__rM   inspect
isfunctionpropertyMODEL_METHODS_EXCLUDE
startswithStopIterationr   get_return_data_typer   r   r   r   rh   Zrelated_objectsZrelated_modelr   Zget_accessor_namer$   r.   label)r&   r)   rz   Z
app_configrs   optsrE   rF   rW   r   fieldr|   r{   r}   r   	func_namerj   excluder   Zprint_argumentsrelaccessorr*   r,   r-   r.      s   











z ModelDetailView.get_context_datar[   r,   r,   r*   r-   ry      r\   ry   c                       r5   )TemplateDetailViewzadmin_doc/template_detail.htmlc           	         s   | j d }g }zt }W n	 ty   Y n(w t|jD ]!\}}t|| }| r/| }nd}|	|| ||d qt
 jdi i |||dS )Ntemplater:   )fileexistscontentsorder)rD   	templatesr,   )r)   r   rJ   r   	enumeratedirsr   r   	read_textrR   r$   r.   )	r&   r)   r   r   Zdefault_engineindex	directoryZtemplate_fileZtemplate_contentsr*   r,   r-   r.   A  s0   


z#TemplateDetailView.get_context_datar[   r,   r,   r*   r-   r   >  r\   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   r,   r,   r-   r   c  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   r,   r,   r-   r   m  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 two-tuple: (view_func, regex)
    url_patternscallbackz,%s does not appear to be a urlpattern object)hasattrr   rn   extendre   strpatternrc   rR   r   rD   r   	TypeErrorr   )rf   baserc   rd   ppatternsr,   r,   r-   re   v  s*   


$re   c                 C   sB   t | } t| } | dddddd} | 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   replacer   )r   r,   r,   r-   rg     s   
rg   )r:   N);r   	importlibr   r   pathlibr   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   Zdjango.utils.decoratorsr   Zdjango.utils.inspectr   r   r   r   Zdjango.utils.translationr   r   Zdjango.views.genericr   r   r   r    r4   r6   r]   r`   rl   rv   ry   r   r   r   re   rg   r,   r,   r,   r-   <module>   sF    ' %

	