o
    Mfk                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ e dZG d	d
 d
ZG dd dZG dd dZG dd deeeZG dd deZdS )    N)update_wrapper)ImproperlyConfigured)HttpResponseHttpResponseGoneHttpResponseNotAllowedHttpResponsePermanentRedirectHttpResponseRedirect)TemplateResponse)reverse)classonlymethodzdjango.requestc                   @   s   e Zd ZdZdZdd ZdS )ContextMixinz
    A default context mixin that passes the keyword arguments received by
    get_context_data() as the template context.
    Nc                 K   s&   | d|  | jd ur|| j |S )Nview)
setdefaultextra_contextupdate)selfkwargs r   [/var/www/html/analyze/labelStudio/lib/python3.10/site-packages/django/views/generic/base.pyget_context_data   s   
zContextMixin.get_context_data)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s    r   c                   @   sT   e Zd ZdZg dZdd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )Viewz}
    Intentionally simple parent class for all views. Only implements
    dispatch-by-method and simple sanity checking.
    )getpostputpatchdeleteheadoptionstracec                 K   s"   |  D ]
\}}t| || qdS )z|
        Constructor. Called in the URLconf; can contain helpful extra
        keyword arguments, and other things.
        N)itemssetattr)r   r   keyvaluer   r   r   __init__&   s   zView.__init__c                    s~   D ]}| j v rtd| jf t |s td j|f q fdd} |_|_t| dd t| jdd |S )z0Main entry point for a request-response process.zAThe method name %s is not accepted as a keyword argument to %s().zm%s() received an invalid keyword %r. as_view only accepts arguments that are already attributes of the class.c                    sV    di }|j | g|R i | t|dstd j |j| g|R i |S )Nrequestz\%s instance has no 'request' attribute. Did you override setup() and forget to call super()?r   )setuphasattrAttributeErrorr   dispatch)r(   argsr   r   cls
initkwargsr   r   r   >   s   
zView.as_view.<locals>.viewr   )updated)assigned)http_method_names	TypeErrorr   r*   
view_classview_initkwargsr   r,   )r/   r0   r%   r   r   r.   r   as_view0   s$   

	zView.as_viewc                 O   s2   t | drt | ds| j| _|| _|| _|| _dS )z1Initialize attributes shared by all view methods.r   r    N)r*   r   r    r(   r-   r   r   r(   r-   r   r   r   r   r)   R   s
   
z
View.setupc                 O   sB   |j  | jv rt| |j  | j}n| j}||g|R i |S N)methodlowerr3   getattrhttp_method_not_allowed)r   r(   r-   r   handlerr   r   r   r,   Z   s   zView.dispatchc                 O   s(   t jd|j|jd|dd t|  S )NzMethod Not Allowed (%s): %si  status_coder(   extra)loggerwarningr:   pathr   _allowed_methodsr8   r   r   r   r=   d   s
   
zView.http_method_not_allowedc                 O   s(   t  }d|  |jd< d|jd< |S )z8Handle responding to requests for the OPTIONS HTTP verb.z, Allow0zContent-Length)r   joinrF   headers)r   r(   r-   r   responser   r   r   r!   k   s   
zView.optionsc                    s    fdd j D S )Nc                    s   g | ]}t  |r| qS r   )r*   upper).0mr   r   r   
<listcomp>s   s    z)View._allowed_methods.<locals>.<listcomp>)r3   rO   r   rO   r   rF   r   s   zView._allowed_methodsN)r   r   r   r   r3   r'   r   r7   r)   r,   r=   r!   rF   r   r   r   r   r      s    

!
r   c                   @   s0   e Zd ZdZdZdZeZdZdd Z	dd Z
dS )TemplateResponseMixinz.A mixin that can be used to render a template.Nc                 K   s0   | d| j | jd| j|  || jd|S )z
        Return a response, using the `response_class` for this view, with a
        template rendered with the given context.

        Pass response_kwargs to the constructor of the response class.
        content_type)r(   templatecontextusingNr   )r   rR   response_classr(   get_template_namestemplate_engine)r   rT   response_kwargsr   r   r   render_to_response}   s   z(TemplateResponseMixin.render_to_responsec                 C   s   | j du r	td| j gS )z
        Return a list of template names to be used for the request. Must return
        a list. May not be called if render_to_response() is overridden.
        NztTemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()')template_namer   rO   r   r   r   rW      s
   
z(TemplateResponseMixin.get_template_names)r   r   r   r   r[   rX   r	   rV   rR   rZ   rW   r   r   r   r   rQ   v   s    rQ   c                   @   s   e Zd ZdZdd ZdS )TemplateViewzT
    Render a template. Pass keyword arguments from the URLconf to the context.
    c                 O   s   | j di |}| |S )Nr   )r   rZ   )r   r(   r-   r   rT   r   r   r   r      s   
zTemplateView.getN)r   r   r   r   r   r   r   r   r   r\      s    r\   c                   @   s`   e Zd ZdZdZdZdZdZdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd ZdS )RedirectViewz&Provide a redirect on any GET request.FNc                 O   sX   | j r	| j | }n| jrt| j||d}ndS | jjdd}|r*| jr*d||f }|S )z
        Return the URL redirect to. Keyword arguments from the URL pattern
        match generating the redirect request are provided as kwargs to this
        method.
        )r-   r   NQUERY_STRING z%s?%s)urlpattern_namer
   r(   METAr   query_string)r   r-   r   r`   r   r   r   get_redirect_url   s   
zRedirectView.get_redirect_urlc                 O   sH   | j |i |}|r| jrt|S t|S tjd|jd|dd t S )NzGone: %si  r?   rA   )rd   	permanentr   r   rC   rD   rE   r   )r   r(   r-   r   r`   r   r   r   r      s   zRedirectView.getc                 O      | j |g|R i |S r9   r   r8   r   r   r   r          zRedirectView.headc                 O   rf   r9   rg   r8   r   r   r   r      rh   zRedirectView.postc                 O   rf   r9   rg   r8   r   r   r   r!      rh   zRedirectView.optionsc                 O   rf   r9   rg   r8   r   r   r   r      rh   zRedirectView.deletec                 O   rf   r9   rg   r8   r   r   r   r      rh   zRedirectView.putc                 O   rf   r9   rg   r8   r   r   r   r      rh   zRedirectView.patch)r   r   r   r   re   r`   ra   rc   rd   r   r    r   r!   r   r   r   r   r   r   r   r]      s    r]   )logging	functoolsr   django.core.exceptionsr   django.httpr   r   r   r   r   django.template.responser	   django.urlsr
   django.utils.decoratorsr   	getLoggerrC   r   r   rQ   r\   r]   r   r   r   r   <module>   s    
X$	