File: //usr/lib/python3/dist-packages/django/core/handlers/__pycache__/base.cpython-310.pyc
o
�a[8 � @ s� d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm Z m
Z
d dlmZ d dl
mZmZ d dlmZmZ d dlmZ d d lmZ d
dlmZ e�d�ZG d
d� d�Zdd� Ze�e� dS )� N)�
async_to_sync�
sync_to_async)�settings)�ImproperlyConfigured�MiddlewareNotUsed)�request_finished)�connections�transaction)�get_resolver�set_urlconf)�log_response)�
import_string� )�convert_exception_to_responsezdjango.requestc @ st e Zd ZdZdZdZdZddd�Z ddd�Zdd� Z d d
� Z
dd� Zd
d� Zdd� Z
ddd�Zdd� Zdd� ZdS )�BaseHandlerNFc
C s� g | _ g | _g | _|r| jn| j}t|�}|}ttj�D ]�}t |�}t
|dd�}t
|dd�}|s8|s8td| ��|s?|r?d} n|} z| j| ||tj
d| d�}
||
�}W n' ty{ } ztj
rqt|�rkt�d||� nt�d |� W Y d
}~qd
}~ww |
}|d
u r�td| ��t|d�r�| j �d
| �||j�� t|d�r�| j�| �||j�� t|d�r�| j�| �d|j�� t|�}| }q| �|||�}|| _d
S )z�
Populate middleware lists from settings.MIDDLEWARE.
Must be called after the environment is fixed (see __call__ in subclasses).
�sync_capableT�
async_capableFzOMiddleware %s must have at least one of sync_capable/async_capable set to True.z
middleware %s)�debug�namezMiddlewareNotUsed(%r): %szMiddlewareNotUsed: %rNz$Middleware factory %s returned None.�process_viewr �process_template_response�process_exception)�_view_middleware�_template_response_middleware�_exception_middleware�_get_response_async�
_get_responser �reversedr �
MIDDLEWAREr
�getattr�RuntimeError�adapt_method_mode�DEBUGr �str�loggerr r �hasattr�insertr �appendr r �_middleware_chain)
�self�is_async�get_response�handler�handler_is_async�middleware_path�
middleware�middleware_can_sync�middleware_can_async�middleware_is_async�adapted_handler�mw_instance�exc� r6 �;/usr/lib/python3/dist-packages/django/core/handlers/base.py�load_middleware sn ��
����
�
�
�
zBaseHandler.load_middlewarec C sp |du r t �|�}|r|s|pd|j }|r(|s&|r t�d|� t|dd�S |S |r6|r2t�d|� t|�S |S )a\
Adapt a method to be in the correct "mode":
- If is_async is False:
- Synchronous methods are left alone
- Asynchronous methods are wrapped with async_to_sync
- If is_async is True:
- Synchronous methods are wrapped with sync_to_async()
- Asynchronous methods are left alone
Nzmethod %s()zSynchronous %s adapted.T��thread_sensitivezAsynchronous %s adapted.)�asyncio�iscoroutinefunction�__qualname__r$ r r r )r) r* �method�method_is_asyncr r r6 r6 r7 r! c s
�zBaseHandler.adapt_method_modec C sF t tj� | �|�}|j�|j� |jdkr!td|j |j
||d� |S )z8Return an HttpResponse object for the given HttpRequest.� �%s: %s��response�request)r r �ROOT_URLCONFr( �_resource_closersr'