HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/django/core/handlers/__pycache__/base.cpython-310.pyc
o

�a[8�@s�ddlZddlZddlZddlmZmZddlmZddlm	Z	m
Z
ddlmZddl
mZmZddlmZmZddlmZdd	lmZd
dlmZe�d�ZGd
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@steZdZdZdZdZdZddd�Z	ddd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
ddd�Zdd�Zdd�ZdS)�BaseHandlerNFc
Cs�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�}
||
�}Wn'ty{}ztj
rqt|�rkt�d||�nt�d	|�WYd
}~qd
}~ww|
}|d
ur�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�loggerrr�hasattr�insertr�appendrr�_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_middlewaresn��
����
�
�
�
zBaseHandler.load_middlewarecCsp|dur	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$rrr)r)r*�method�method_is_asyncrrr6r6r7r!cs
�zBaseHandler.adapt_method_modecCsFttj�|�|�}|j�|j�|jdkr!td|j	|j
||d�|S)z8Return an HttpResponse object for the given HttpRequest.��%s: %s��response�request)rr�ROOT_URLCONFr(�_resource_closersr'�close�status_coder�
reason_phrase�path�r)rDrCr6r6r7r+~s



�zBaseHandler.get_responsec�s\�ttj�|�|�IdH}|j�|j�|jdkr,tt	dd�d|j
|j||d�IdH|S)z�
        Asynchronous version of get_response.

        Funneling everything, including WSGI, into a single async
        get_response() is too slow. Avoid the context switch by using
        a separate async response path.
        Nr@Fr9rArB)rrrEr(rFr'rGrHrrrIrJrKr6r6r7�get_response_async�s�
	


�zBaseHandler.get_response_asyncc	
CsRd}|�|�\}}}|jD]
}|||||�}|rnq
|durX|�|�}t�|�r-t|�}z
||g|�Ri|��}WntyW}z|�||�}|durM�WYd}~nd}~ww|�||�t	|d�r�t
|j�r�|jD]}|||�}|j||d|j
jjfd�qkz|��}W|Sty�}z|�||�}|dur��WYd}~|Sd}~ww|S)��
        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�render�%s.process_template_response�r)�resolve_requestr�make_view_atomicr;r<r�	Exception�process_exception_by_middleware�check_responser%�callablerNr�__self__�	__class__�__name__�	r)rDrC�callback�
callback_args�callback_kwargs�middleware_method�wrapped_callback�er6r6r7r�sV
�

���

��
�
���zBaseHandler._get_responsec	
�s��d}|�|�\}}}|jD]}|||||�IdH}|rnq|durh|�|�}t�|�s3t|dd�}z||g|�Ri|��IdH}Wn$tyg}zt|jdd�||�IdH}|dur]�WYd}~nd}~ww|�||�t	|d�r�t
|j�r�|jD]}|||�IdH}|j||d|j
jjfd�q{zt�|j�r�|��IdH}nt|jdd��IdH}Wn$ty�}zt|jdd�||�IdH}|durɂWYd}~nd}~wwt�|�r�td��|S)rMNTr9rNrOrPzResponse is still a coroutine.)rQrrRr;r<rrSrTrUr%rVrNrrWrXrY�iscoroutiner rZr6r6r7r�sr�
�

 �
����	
����
����
	zBaseHandler._get_response_asynccCs>t|d�r|j}t|�t|�}nt�}|�|j�}||_|S)zw
        Retrieve/set the urlconf for the request. Return the view resolved,
        with its args and kwargs.
        �urlconf)r%rbrr
�resolve�	path_info�resolver_match)r)rDrb�resolverrer6r6r7rQs

zBaseHandler.resolve_requestcCsx|dust�|�sdS|s%t|tj�rd|j|jf}n	d|j|jjf}|dur/td|��t�|�r:td|��dS)zT
        Raise an error if the view returned None or an uncalled coroutine.
        NzThe view %s.%szThe view %s.%s.__call__zB%s didn't return an HttpResponse object. It returned None instead.z�%s didn't return an HttpResponse object. It returned an unawaited coroutine instead. You may need to add an 'await' into your view.)	r;ra�
isinstance�types�FunctionType�
__module__rYrX�
ValueError)r)rCr[rr6r6r7rU&s,���
���zBaseHandler.check_responsecCsXt|dt��}t��D]}|jdr)|j|vr)t�|�r td��t	j
|jd�|�}q|S)N�_non_atomic_requests�ATOMIC_REQUESTSz0You cannot use ATOMIC_REQUESTS with async views.)�using)r�setr�all�
settings_dict�aliasr;r<r r	�atomic)r)�view�non_atomic_requests�dbr6r6r7rRBs
��zBaseHandler.make_view_atomiccCs&|jD]
}|||�}|r|SqdS)z�
        Pass the exception to the exception middleware. If no middleware
        return a response for this exception, return None.
        N)r)r)�	exceptionrDr^rCr6r6r7rTMs

�z+BaseHandler.process_exception_by_middleware)F)NFN)N)rYrjr=rrrr(r8r!r+rLrrrQrUrRrTr6r6r6r7rs 
J
�4A
rcKstd�dS)z1Reset the URLconf after each request is finished.N)r)�sender�kwargsr6r6r7�
reset_urlconfYsrz)r;�loggingrh�asgiref.syncrr�django.confr�django.core.exceptionsrr�django.core.signalsr�	django.dbrr	�django.urlsr
r�django.utils.logr�django.utils.module_loadingr
rwr�	getLoggerr$rrz�connectr6r6r6r7�<module>s$
G