a
    ÛEbÄ  ã                   @   s°   d dl 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)Ú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   úY/home/ja/django-apps/lartica_env/lib/python3.9/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__2   s    zView.__init__c                    sŠ   ˆD ]<}|ˆ j v r$td|ˆ jf ƒ‚tˆ |ƒstdˆ j|f ƒ‚q‡ ‡fdd„}ˆ |_ˆ|_ˆ j|_ˆ j|_ˆ jj	|_	|j
 ˆ jj
¡ |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   ˆ f 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()?)ÚsetupÚhasattrÚAttributeErrorr   Údispatch)r'   Úargsr   r   ©ÚclsÚ
initkwargsr   r   r   L   s    
ÿÿzView.as_view.<locals>.view)Úhttp_method_namesÚ	TypeErrorr   r)   Z
view_classZview_initkwargsr   r   r+   Ú__annotations__Ú__dict__r   )r.   r/   r$   r   r   r-   r   Úas_view<   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(   e   s
    z
View.setupc                 O   sB   |j  ¡ | jv r&t| |j  ¡ | jƒ}n| j}||g|¢R i |¤ŽS ©N)ÚmethodÚlowerr0   ÚgetattrÚhttp_method_not_allowed)r   r'   r,   r   Úhandlerr   r   r   r+   m   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Úwarningr7   Úpathr   Ú_allowed_methodsr5   r   r   r   r:   y   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, ZAllowÚ0zContent-Length)r   ÚjoinrC   Úheaders)r   r'   r,   r   Úresponser   r   r   r    ‚   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>Š   ó    z)View._allowed_methods.<locals>.<listcomp>)r0   rK   r   rK   r   rC   ‰   s    zView._allowed_methodsN)r   r   r   r   r0   r&   r
   r4   r(   r+   r:   r    rC   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f | 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Úusing)r   rO   Úresponse_classr'   Úget_template_namesÚtemplate_engine)r   rQ   Zresponse_kwargsr   r   r   Úrender_to_response•   s    üûz(TemplateResponseMixin.render_to_responsec                 C   s    | j du rtdƒ‚n| j gS d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   rK   r   r   r   rT   ¥   s
    
ÿz(TemplateResponseMixin.get_template_names)r   r   r   r   rW   rU   r   rS   rO   rV   rT   r   r   r   r   rN   �   s   rN   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 f i |¤Ž}|  |¡S r6   )r   rV   )r   r'   r,   r   rQ   r   r   r   r   ¸   s    zTemplateView.getN)r   r   r   r   r   r   r   r   r   rX   ³   s   rX   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¡}|rT| jrTd||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'   ZMETAr   Úquery_string)r   r,   r   r\   r   r   r   Úget_redirect_urlÅ   s    
zRedirectView.get_redirect_urlc                 O   sN   | j |i |¤Ž}|r,| jr"t|ƒS t|ƒS ntjd|jd|dœd� tƒ S d S )NzGone: %siš  r<   r>   )r_   Ú	permanentr   r   r@   rA   rB   r   )r   r'   r,   r   r\   r   r   r   r   ×   s    
ÿzRedirectView.getc                 O   s   | j |g|¢R i |¤ŽS r6   ©r   r5   r   r   r   r   ä   s    zRedirectView.headc                 O   s   | j |g|¢R i |¤ŽS r6   ra   r5   r   r   r   r   ç   s    zRedirectView.postc                 O   s   | j |g|¢R i |¤ŽS r6   ra   r5   r   r   r   r    ê   s    zRedirectView.optionsc                 O   s   | j |g|¢R i |¤ŽS r6   ra   r5   r   r   r   r   í   s    zRedirectView.deletec                 O   s   | j |g|¢R i |¤ŽS r6   ra   r5   r   r   r   r   ð   s    zRedirectView.putc                 O   s   | j |g|¢R i |¤ŽS r6   ra   r5   r   r   r   r   ó   s    zRedirectView.patch)r   r   r   r   r`   r\   r]   r^   r_   r   r   r   r    r   r   r   r   r   r   r   rY   ½   s   rY   )ÚloggingZdjango.core.exceptionsr   Zdjango.httpr   r   r   r   r   Zdjango.template.responser   Zdjango.urlsr	   Zdjango.utils.decoratorsr
   Ú	getLoggerr@   r   r   rN   rX   rY   r   r   r   r   Ú<module>   s   
l&
