B
    ©0H[Ó  ã               @   s„   d dl Z d dl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mZ d dlmZ ddlmZmZ e  d	¡ZG d
d„ dƒZdS )é    N)Úsettings)ÚImproperlyConfiguredÚMiddlewareNotUsed)ÚconnectionsÚtransaction)Úget_resolverÚset_urlconf)Úimport_stringé   )Úconvert_exception_to_responseÚget_exception_responsezdjango.requestc               @   sT   e Zd 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S )ÚBaseHandlerNc             C   s  g | _ g | _g | _g | _g | _t| jƒ}xÜttj	ƒD ]Î}t
|ƒ}y||ƒ}W nN tk
rš } z0tjrˆt|ƒr|t d||¡ nt d|¡ w4W dd}~X Y nX |dkr°td| ƒ‚t|dƒrÊ| j d|j¡ t|dƒrâ| j |j¡ t|dƒrú| j |j¡ t|ƒ}q4W || _dS )	zš
        Populate middleware lists from settings.MIDDLEWARE.

        Must be called after the environment is fixed (see __call__ in subclasses).
        zMiddlewareNotUsed(%r): %szMiddlewareNotUsed: %rNz$Middleware factory %s returned None.Úprocess_viewr   Úprocess_template_responseÚprocess_exception)Ú_request_middlewareÚ_view_middlewareÚ_template_response_middlewareÚ_response_middlewareÚ_exception_middlewarer   Ú_get_responseÚreversedr   Z
MIDDLEWAREr	   r   ÚDEBUGÚstrÚloggerÚdebugr   ÚhasattrÚinsertr   Úappendr   r   Ú_middleware_chain)ÚselfÚhandlerZmiddleware_pathZ
middlewareZmw_instanceÚexc© r#   ú]C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\core\handlers\base.pyÚload_middleware   s6    




zBaseHandler.load_middlewarec             C   sJ   t |dtƒ ƒ}x6t ¡ D ]*}|jd r|j|krtj|jd�|ƒ}qW |S )NZ_non_atomic_requestsZATOMIC_REQUESTS)Zusing)ÚgetattrÚsetr   ÚallZsettings_dictÚaliasr   Zatomic)r    ÚviewZnon_atomic_requestsÚdbr#   r#   r$   Úmake_view_atomicB   s
    zBaseHandler.make_view_atomicc             C   s   t ||||| jƒS )N)r   Ú	__class__)r    ÚrequestÚresolverÚstatus_codeÚ	exceptionr#   r#   r$   r   I   s    z"BaseHandler.get_exception_responsec             C   sj   t tjƒ |  |¡}|j |¡ t|ddƒsDtt|ddƒƒrD| ¡ }|j	dkrft
jd|jd|dœd� |S )	z8Return an HttpResponse object for the given HttpRequest.Zis_renderedTÚrenderNi”  zNot Found: %s)r0   r.   )Úextra)r   r   ZROOT_URLCONFr   Z_closable_objectsr   r&   Úcallabler2   r0   r   ÚwarningÚpath)r    r.   Úresponser#   r#   r$   Úget_responseL   s    


zBaseHandler.get_responsec          
   C   s�  d}t |dƒr&|j}t|ƒ t|ƒ}ntƒ }| |j¡}|\}}}||_x"| jD ]}	|	||||ƒ}|rPP qPW |dkrÂ|  |¡}
y|
|f|ž|Ž}W n. t	k
rÀ } z|  
||¡}W dd}~X Y nX |dkrþt|tjƒrÞ|j}n|jjd }td|j|f ƒ‚nŽt |dƒ�rŒt|jƒ�rŒx6| jD ],}	|	||ƒ}|dk�rtd|	jjj ƒ‚�qW y| ¡ }W n0 t	k
�rŠ } z|  
||¡}W dd}~X Y nX |S )zÉ
        Resolve and call the view, then apply view, exception, and
        template_response middleware. This method is everything that happens
        inside the request/response middleware.
        NÚurlconfz	.__call__zNThe view %s.%s didn't return an HttpResponse object. It returned None instead.r2   z\%s.process_template_response didn't return an HttpResponse object. It returned None instead.)r   r9   r   r   ÚresolveZ	path_infoÚresolver_matchr   r,   Ú	ExceptionÚprocess_exception_by_middlewareÚ
isinstanceÚtypesÚFunctionTypeÚ__name__r-   Ú
ValueErrorÚ
__module__r4   r2   r   Ú__self__)r    r.   r7   r9   r/   r;   ÚcallbackÚcallback_argsÚcallback_kwargsÚmiddleware_methodZwrapped_callbackÚeZ	view_namer#   r#   r$   r   b   sL    





zBaseHandler._get_responsec             C   s(   x | j D ]}|||ƒ}|r|S qW ‚ dS )zŠ
        Pass the exception to the exception middleware. If no middleware
        return a response for this exception, raise it.
        N)r   )r    r1   r.   rH   r7   r#   r#   r$   r=   ¢   s
    
z+BaseHandler.process_exception_by_middleware)rA   rC   Ú__qualname__r   r   r   r   r   r   r%   r,   r   r8   r   r=   r#   r#   r#   r$   r      s   +@r   )Úloggingr?   Zdjango.confr   Zdjango.core.exceptionsr   r   Z	django.dbr   r   Zdjango.urlsr   r   Zdjango.utils.module_loadingr	   r1   r   r   Ú	getLoggerr   r   r#   r#   r#   r$   Ú<module>   s   
