B
    ª0H[  ã               @   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|kr| |d< | j d k	r&| | j ¡ |S )NÚview)Úextra_contextÚupdate)ÚselfÚkwargs© r   ú]C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\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               @   sX   e Zd ZdZdddddddd	gZd
d„ Ze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&   x |  ¡ D ]\}}t| ||ƒ q
W 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‚   xDˆD ]<}|ˆ j kr&td|ˆ jf ƒ‚tˆ |ƒstdˆ j|f ƒ‚qW ‡ ‡fdd„}ˆ |_ˆ|_t|ˆ dd� t|ˆ jdd� |S )z0Main entry point for a request-response process.zUYou tried to pass in the %s method name as a keyword argument to %s(). Don't do that.zm%s() received an invalid keyword %r. as_view only accepts arguments that are already attributes of the class.c                sJ   ˆ f ˆŽ}t |dƒr&t |dƒs&|j|_| |_||_||_|j| f|ž|ŽS )Nr   r   )Úhasattrr   r   ÚrequestÚargsr   Údispatch)r(   r)   r   r   )ÚclsÚ
initkwargsr   r   r   >   s    
zView.as_view.<locals>.viewr   )Úupdated)Úassigned)Úhttp_method_namesÚ	TypeErrorr   r'   Z
view_classZview_initkwargsr   r*   )r+   r,   r$   r   r   )r+   r,   r   Úas_view1   s    


zView.as_viewc             O   s<   |j  ¡ | jkr&t| |j  ¡ | jƒ}n| j}||f|ž|ŽS )N)ÚmethodÚlowerr/   ÚgetattrÚhttp_method_not_allowed)r   r(   r)   r   Úhandlerr   r   r   r*   Q   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Úwarningr2   Úpathr   Ú_allowed_methods)r   r(   r)   r   r   r   r   r5   [   s    
zView.http_method_not_allowedc             O   s$   t ƒ }d |  ¡ ¡|d< d|d< |S )z8Handle responding to requests for the OPTIONS HTTP verb.z, ZAllowÚ0zContent-Length)r   Újoinr<   )r   r(   r)   r   Úresponser   r   r   r    b   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>j   s    z)View._allowed_methods.<locals>.<listcomp>)r/   )r   r   )r   r   r<   i   s    zView._allowed_methodsN)r   r   r   r   r/   r&   r   r1   r*   r5   r    r<   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ÚcontextZusing)Ú
setdefaultrE   Úresponse_classr(   Úget_template_namesÚtemplate_engine)r   rG   Zresponse_kwargsr   r   r   Úrender_to_responset   s    z(TemplateResponseMixin.render_to_responsec             C   s    | j dk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   )r   r   r   r   rJ   „   s    
z(TemplateResponseMixin.get_template_names)r   r   r   r   rM   rK   r	   rI   rE   rL   rJ   r   r   r   r   rD   m   s   rD   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 |Ž}|  |¡S )N)r   rL   )r   r(   r)   r   rG   r   r   r   r   •   s    zTemplateView.getN)r   r   r   r   r   r   r   r   r   rN   ‘   s   rN   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   rR   r   r   r   Úget_redirect_url¡   s    
zRedirectView.get_redirect_urlc             O   sJ   | j ||Ž}|r(| jrt|ƒS t|ƒS ntjd|jd|dœd� tƒ S d S )NzGone: %siš  )r7   r(   )r8   )rU   Ú	permanentr   r   r9   r:   r;   r   )r   r(   r)   r   rR   r   r   r   r   ³   s    
zRedirectView.getc             O   s   | j |f|ž|ŽS )N)r   )r   r(   r)   r   r   r   r   r   Á   s    zRedirectView.headc             O   s   | j |f|ž|ŽS )N)r   )r   r(   r)   r   r   r   r   r   Ä   s    zRedirectView.postc             O   s   | j |f|ž|ŽS )N)r   )r   r(   r)   r   r   r   r   r    Ç   s    zRedirectView.optionsc             O   s   | j |f|ž|ŽS )N)r   )r   r(   r)   r   r   r   r   r   Ê   s    zRedirectView.deletec             O   s   | j |f|ž|ŽS )N)r   )r   r(   r)   r   r   r   r   r   Í   s    zRedirectView.putc             O   s   | j |f|ž|ŽS )N)r   )r   r(   r)   r   r   r   r   r   Ð   s    zRedirectView.patch)r   r   r   r   rV   rR   rS   rT   rU   r   r   r   r    r   r   r   r   r   r   r   rO   š   s   rO   )ÚloggingÚ	functoolsr   Zdjango.core.exceptionsr   Zdjango.httpr   r   r   r   r   Zdjango.template.responser	   Zdjango.urlsr
   Zdjango.utils.decoratorsr   Ú	getLoggerr9   r   r   rD   rN   rO   r   r   r   r   Ú<module>   s   
N$	