
    h9                         S SK r S SKrS SKrS SKJrJrJr  S SKJr  S SK	J
r
Jr  S SKJr  S SKJrJr  S SKJrJr  S SKJr  S S	KJr  S
SKJr  \R4                  " S5      r " S S5      rS r\R<                  " \5        g)    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                   r    \ rS rSrSrSrSrSrSS jr   SS jr	S r
S rS rS rS	 rSS
 jrS rS rSrg)BaseHandler   Nc           	         / U l         / U l        / U l        U(       a  U R                  OU R                  n[        U5      nUn[        [        R                  5       GHv  n[        U5      n[        USS5      n[        USS5      nU(       d  U(       d  [        SU-  5      eU(       d
  U(       a  Sn	OUn	 U R                  U	UU[        R                  SU-  S9n
U" U
5      nU
nUc  [%        SU-  5      e['        US5      (       a5  U R                   R)                  SU R                  XR*                  5      5        ['        US5      (       a4  U R                  R-                  U R                  XR.                  5      5        ['        US5      (       a5  U R                  R-                  U R                  SUR0                  5      5        [        U5      nU	nGMy     U R                  XU5      nX0l        g
! [         a^  n[        R                  (       a=  [        U5      (       a  [         R#                  SX\5        O[         R#                  S	U5         S
nAGM  S
nAff = f)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                K/var/www/html/env/lib/python3.13/site-packages/django/core/handlers/base.pyload_middlewareBaseHandler.load_middleware   s9    !#-/*%'"3;t//ASAS/=#'(;(;<O&7J")*nd"K#*:#N &/C">@OP  &*=&+#&:#*"&"8"8'$"..(?: #9 # )9 *"*:_L  {N33%%,,**85M5MN {$?@@2299** "G"G
 {$788 **11**5+2O2OP 4K@G2s  =x ((<LM ")Q % >>3xx%@/W%<oNs   4,G//
I9AIIc                 <   Uc  [        U5      nU(       a  U(       d  U=(       d    SUR                  -  nU(       a1  U(       d'  U(       a  [        R                  SU5        [	        USS9$  U$ U(       a(  U(       a  [        R                  SU5        [        U5      $ U$ )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&   BaseHandler.adapt_method_modeh   s    " "1&9O>=6+>+>>D"LL!FM$VdCC # 	 CTJ ((    c                    [        [        R                  5        U R                  U5      nUR                  R                  UR                  5        UR                  S:  a!  [        SUR                  UR                  UUS9  U$ )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.   rK   rJ   s      r;   r0   BaseHandler.get_response   sp     	H))*))'2""))'--83&&&! rE   c                 H  #    [        [        R                  5        U R                  U5      I Sh  vN nUR                  R                  UR                  5        UR                  S:  a2  [        [        SS9" SUR                  UR                  UUS9I Sh  vN   U$  Nm N7f)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.
NrG   Fr?   rH   rI   )r   r   rL   r-   rM   r,   rN   rO   r   r   rP   rQ   rR   s      r;   get_response_asyncBaseHandler.get_response_async   s      	H))*//88""))'--83&uE&&!    9s"   .B"BA&B"B B" B"c                    SnU R                  U5      u  p4nU R                   H  nU" XXE5      nU(       d  M    O   Uc9  U R                  U5      n[        U5      (       a  [	        U5      n U" U/UQ70 UD6nU R                  X#5        [        US5      (       a{  [        UR                  5      (       aa  U R                   H>  nU" X5      nU R                  UUUR                  R                  R                  < S3S9  M@      UR                  5       nU$ U$ ! [
         a  nU R                  X5      nUc  e  SnANSnAff = f! [
         a   nU R                  X5      nUc  e  SnAU$ SnAff = f)
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*   callablerY   r   __self__	__class____name__	r.   rK   rJ   callbackcallback_argscallback_kwargsmiddleware_methodwrapped_callbackes	            r;   r!   BaseHandler._get_response   s    373G3G3P0 "&!6!6(=H x "7 #44X>"#344#01A#B +GWmWW 	H/ 8X&&8HOO+D+D%)%G%G!,W? ##%(11;;DDG $ 	 &H#??, x9  ??K# $.  ??K# $ s0   ,D E 
E !D;;E 
E-E((E-c                 H  #    SnU R                  U5      u  p4nU R                   H  nU" XXE5      I Sh  vN nU(       d  M    O   Uc@  U R                  U5      n[        U5      (       d
  [	        USS9n U" U/UQ70 UD6I Sh  vN nU R                  X#5        [        US5      (       a  [        UR                  5      (       a  U R                   HF  nU" X5      I Sh  vN nU R                  UUUR                  R                  R                  < S3S9  MH      [        UR                  5      (       a  UR                  5       I Sh  vN nO"[	        UR                  SS9" 5       I Sh  vN n [        R                   " U5      (       a  [#        S5      eU$  GNe GN! [
         a2  n[	        U R                  SS9" X5      I Sh  vN  nUc  e  SnAGNMSnAff = f N N Nv! [
         a1  n[	        U R                  SS9" X5      I Sh  vN  nUc  e  SnANSnAff = f7f)rX   NTr?   rY   rZ   r[   zResponse is still a coroutine.)r\   r   r]   r   r   r^   r_   r`   r*   ra   rY   r   rb   rc   rd   asyncioiscoroutiner%   re   s	            r;   r    BaseHandler._get_response_async   sF     373G3G3P0 "&!6!6.= H x "7 #44X>&'788#0$t$ 
!1"+"/>"  	H/ 8X&&8HOO+D+D%)%G%G!!27!EE ##%(11;;DDG $ 	 &H&x77%-__%66H%2 $& &  H x((?@@w  !.88%)" "   # $ F  7   !.88%)" "   # $s   2H"F	H"2H"5F FF 	AH"G ;H"-G$ 	G 
G$ H"G$ +G",G$ 0*H"F 
G)GG		GH"GH" G$ "G$ $
H.HH	HH"HH"c                     [        US5      (       a#  UR                  n[        U5        [        U5      nO
[        5       nUR	                  UR
                  5      nXAl        U$ )z_
Retrieve/set the urlconf for the request. Return the view resolved,
with its args and kwargs.
urlconf)r*   rr   r   r   resolve	path_inforesolver_match)r.   rK   rr   resolverru   s        r;   r\   BaseHandler.resolve_request,  sU     7I&&ooG #G,H#~H!))'*;*;<!/rE   c                    Ub  [         R                  " U5      (       d  gU(       dg  [        U[        R                  5      (       a  SUR
                  < SUR                  < 3nO)SUR
                  < SUR                  R                  < S3nUc  [        SU-  5      e[         R                  " U5      (       a  [        SU-  5      eg)zD
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.)	rn   ro   
isinstancetypesFunctionType
__module__rd   rc   
ValueError)r.   rJ   rf   r   s       r;   r`   BaseHandler.check_response=  s      G$7$7$A$A(E$6$677+3+>+>@Q@QR 8 ''&&// !"    **"$()  +rE   c                    [        US[        5       5      n[        R                  R	                  5        HM  u  p4US   (       d  M  X2;  d  M  [        U5      (       a  [        S5      e[        R                  " US9" U5      nMO     U$ )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;   r]   BaseHandler.make_view_atomicY  s{    %d,BCEJ$/$8$8$>$>$@ E.//E4T&t,,&J  #))6t< %A rE   c                 P    U R                    H  nU" X!5      nU(       d  M  Us  $    g)zu
Pass the exception to the exception middleware. If no middleware
return a response for this exception, return None.
N)r   )r.   	exceptionrK   ri   rJ   s        r;   r_   +BaseHandler.process_exception_by_middlewared  s.    
 "&!;!;(<Hx "< rE   )r   r-   r   r   )F)NFN)N)rd   r}   rA   __firstlineno__r   r   r   r-   r<   r&   r0   rU   r!   r    r\   r`   r]   r_   __static_attributes__ rE   r;   r   r      s]    $(! L)d @ ,4lFP"8		rE   r   c                     [        S5        g)z1Reset the URLconf after each request is finished.N)r   )senderkwargss     r;   reset_urlconfr   p  s
    rE   )rn   loggingr{   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   rE   r;   <module>r      s_       J J   J 0 . 1 ) 5 4			+	,Y Yx

    'rE   