
    g9                         d dl Z d dlZd dlZd dlmZmZmZ d dlmZ d dl	m
Z
m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 d d	lmZ d
dlmZ  ej4                  d      Z G d d      Zd Z ej<                  e       y)    N)async_to_synciscoroutinefunctionsync_to_async)settings)ImproperlyConfiguredMiddlewareNotUsed)request_finished)connectionstransaction)get_resolverset_urlconf)log_response)import_string   )convert_exception_to_responsezdjango.requestc                   d    e Zd ZdZdZdZdZddZ	 	 	 ddZd Z	d Z
d Zd Zd Zdd	Zd
 Zd Zy)BaseHandlerNc           	      V   g | _         g | _        g | _        |r| j                  n| j                  }t        |      }|}t        t        j                        D ]V  }t        |      }t        |dd      }t        |dd      }|s|st        d|z        |s|rd}	n|}		 | j                  |	||t        j                  d|z        }
 ||
      }|
}|t%        d|z        t'        |d      r6| j                   j)                  d| j                  ||j*                               t'        |d      r5| j                  j-                  | j                  ||j.                               t'        |d      r5| j                  j-                  | j                  d|j0                               t        |      }|	}Y | j                  |||      }|| _        y
# t        $ rT}t        j                  r9t        |      rt         j#                  d||       nt         j#                  d	|       Y d
}~d
}~ww xY w)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namezMiddlewareNotUsed(%r): %szMiddlewareNotUsed: %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excs                q/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/core/handlers/base.pyload_middlewarezBaseHandler.load_middleware   s9    !#-/*%'"3;t//ASAS/=#'(;(;<O&7J")*nd"K#*:#N &/C">@OP  &*=&+#&:#*"&"8"8'$"..(?: #9 # )9 *"*:_L  {N3%%,,**8[5M5MN {$?@2299** +"G"G
 {$78 **11**5+2O2OP 4K@G2s  =x ((7<LM ")Q % >>3x%@/SVW%<oNs   /G	H(A	H##H(c                     |t        |      }|r|s|xs d|j                  z  }|r)|s%|rt        j                  d|       t	        |d      S |S |r#|rt        j                  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
        zmethod %s()z#Synchronous handler adapted for %s.Tthread_sensitivez$Asynchronous handler adapted for %s.)r   __qualname__r(   r   r   r   )r-   r.   methodmethod_is_asyncr   r   s         r:   r%   zBaseHandler.adapt_method_modeh   s    " "1&9O>=6+>+>>D"LL!FM$VdCC
 	 CTJ ((    c                 
   t        t        j                         | j                  |      }|j                  j                  |j                         |j                  dk\  r$t        d|j                  |j                  ||       |S )z8Return an HttpResponse object for the given HttpRequest.  %s: %sresponserequest)r   r   ROOT_URLCONFr,   _resource_closersr+   closestatus_coder   reason_phrasepathr-   rH   rG   s      r:   r/   zBaseHandler.get_response   sp     	H))*))'2""))'--83&&&! rB   c                 R  K   t        t        j                         | j                  |       d{   }|j                  j                  |j                         |j                  dk\  r8 t        t        d      d|j                  |j                  ||       d{    |S 7 r7 w)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.
        NrD   Fr=   rE   rF   )r   r   rI   r,   rJ   r+   rK   rL   r   r   rM   rN   rO   s      r:   get_response_asynczBaseHandler.get_response_async   s      	H))*//88""))'--83&E-uE&&!    9s"   .B'B#A+B'B%B'%B'c                    d}| j                  |      \  }}}| j                  D ]  } |||||      }|s n |4| j                  |      }t        |      rt	        |      }	  ||g|i |}| j                  ||       t        |d      rwt        |j                        rb| j                  D ]@  } |||      }| j                  |||j                  j                  j                  d       B 	 |j                         }|S |S # t
        $ r}| j                  ||      }| Y d}~d}~ww xY w# t
        $ r }| j                  ||      }| Y d}~|S d}~ww xY w)
        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.process_template_responser   )resolve_requestr   make_view_atomicr   r   	Exceptionprocess_exception_by_middlewarecheck_responser)   callablerT   r   __self__	__class____name__	r-   rH   rG   callbackcallback_argscallback_kwargsmiddleware_methodwrapped_callbackes	            r:   r    zBaseHandler._get_response   s    373G3G3P0- "&!6!6(=/H  "7 #44X>"#34#01A#B +GWmWW 	Hh/ 8X&8HOO+D%)%G%G!,Wh? ##%(11;;DDG $ 	 &H#??, x9  ??7K# $.  ??7K# $ s0   "D 1D0 	D-D((D-0	E9EEc                    K   d}| j                  |      \  }}}| j                  D ]  } |||||       d{   }|s n |>| j                  |      }t        |      st	        |d      }	  ||g|i | d{   }| j                  ||       t        |d      rt        |j                        r| j                  D ]H  } |||       d{   }| j                  |||j                  j                  j                  d       J 	 t        |j                        r|j                          d{   }n$ t	        |j                  d              d{   }t        j                   |      rt#        d      |S 7 J7 # t
        $ r5} t	        | j                  d      ||       d{  7  }| Y d}~>d}~ww xY w7 7 7 q# t
        $ r4} t	        | j                  d      ||       d{  7  }| Y d}~d}~ww xY ww)rS   NTr=   rT   rU   rV   zResponse is still a coroutine.)rW   r   rX   r   r   rY   rZ   r[   r)   r\   rT   r   r]   r^   r_   asyncioiscoroutiner$   r`   s	            r:   r   zBaseHandler._get_response_async   sS     373G3G3P0- "&!6!6.=/ H  "7 #44X>&'78#0$t$ 
!1"+"/>"  	Hh/ 8X&8HOO+D%)%G%G!!27H!EE ##%(11;;DDG $ 	 &H&x7%-__%66H&] $& &  H x(?@@w  "88%)" W"   # $ F  7   "88%)" W"   # $s   5HFH.H.F =F>F AHG;H(G 5G
6$G GG #HF 	G!G 1F42G :H GH
G G 	H!H8G;9HHHHc                     t        |d      r#|j                  }t        |       t        |      }n
t               }|j	                  |j
                        }||_        |S )zw
        Retrieve/set the urlconf for the request. Return the view resolved,
        with its args and kwargs.
        urlconf)r)   rk   r   r   resolve	path_inforesolver_match)r-   rH   rk   resolverrn   s        r:   rW   zBaseHandler.resolve_request,  sT     7I&ooG #G,H#~H!))'*;*;<!/rB   c                 Z   |t        j                  |      sy|s^t        |t        j                        rd|j
                  d|j                  }n'd|j
                  d|j                  j                  d}|t        d|z        t        j                  |      rt        d|z        y)zT
        Raise an error if the view returned None or an uncalled coroutine.
        Nz	The view .z	.__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.)	rh   ri   
isinstancetypesFunctionType
__module__r_   r^   
ValueError)r-   rG   ra   r   s       r:   r[   zBaseHandler.check_response=  s      G$7$7$A(E$6$67+3+>+>@Q@QR 8 ''&&// !"    *"$()  +rB   c                     t        |dt                     }t        j                  j	                         D ]B  \  }}|d   s||vst        |      rt        d       t        j                  |      |      }D |S )N_non_atomic_requestsATOMIC_REQUESTSz0You cannot use ATOMIC_REQUESTS with async views.)using)	r#   setr
   r   itemsr   r$   r   atomic)r-   viewnon_atomic_requestsaliassettings_dicts        r:   rX   zBaseHandler.make_view_atomicY  s|    %d,BCEJ$/$8$8$>$>$@ E=./EAT4T&t,&J  7{))6t< %A rB   c                 D    | j                   D ]  } |||      }|s|c S  y)z
        Pass the exception to the exception middleware. If no middleware
        return a response for this exception, return None.
        N)r   )r-   	exceptionrH   rd   rG   s        r:   rZ   z+BaseHandler.process_exception_by_middlewared  s.    
 "&!;!;()<H "< rB   )F)NFN)N)r_   ru   r?   r   r   r   r,   r;   r%   r/   rQ   r    r   rW   r[   rX   rZ    rB   r:   r   r      s]    $(! L)d @ ,4lFP"8		rB   r   c                     t        d       y)z1Reset the URLconf after each request is finished.N)r   )senderkwargss     r:   reset_urlconfr   p  s
    rB   )rh   loggingrs   asgiref.syncr   r   r   django.confr   django.core.exceptionsr   r   django.core.signalsr	   	django.dbr
   r   django.urlsr   r   django.utils.logr   django.utils.module_loadingr   r   r   	getLoggerr(   r   r   connectr   rB   r:   <module>r      sd       J J   J 0 . 1 ) 5 4			+	,Y Yx

     'rB   