
    2Bh#&                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJrJr  S SKJr  S S	K J!r!   " S
 S5      r"g)    N)datetime)randint)SSLError)util)ForbiddenProxyRequestInvalidHeaderInvalidHeaderNameInvalidHTTPVersionInvalidProxyLineInvalidRequestLineInvalidRequestMethodInvalidSchemeHeadersLimitRequestHeadersLimitRequestLineUnsupportedTransferCodingConfigurationProblemObsoleteFolding)Responsedefault_environ)reloader_engines)	WorkerTmpc                       \ rS rSrSR	                  5        V VVVs/ s H  n[        [        SU-  5      PM     snnnn r/ rS r	S r
S rS rS rS	 rS
 rS rS rS rS rS rS rSrgs  snnnn f )Worker   z+ABRT HUP QUIT INT TERM USR1 USR2 WINCH CHLDzSIG%sc                 l   Xl         SU l        X l        X0l        X@l        XPl        X`l        SU l        SU l        SU l	        SU l
        UR                  S:  a+  [        SUR                  5      nUR                  U-   U l        O[        R                  U l        SU l        Xpl        [%        U5      U l        g)zThis is called pre-fork so it shouldn't do anything to the
current process. If there's a need to make process wide
changes you'll want to do that in ``self.init_process()``.
z	[booting]FNr   T)agepidppidsocketsapptimeoutcfgbootedabortedreloadernrmax_requestsr   max_requests_jittersysmaxsizealivelogr   tmp)	selfr   r   r   r    r!   r"   r,   jitters	            G/var/www/html/env/lib/python3.13/site-packages/gunicorn/workers/base.py__init__Worker.__init__&   s     	aQ 7 78F # 0 06 9D #D
S>    c                      SU R                   -  $ )Nz<Worker %s>)r   r.   s    r0   __str__Worker.__str__C   s    txx''r3   c                 8    U R                   R                  5         g)zYour worker subclass must arrange to have this method called
once every ``self.timeout`` seconds. If you fail in accomplishing
this task, the master process will murder your workers.
N)r-   notifyr5   s    r0   r9   Worker.notifyF   s     	r3   c                     [        5       e)zThis is the mainloop of a worker process. You should override
this method in a subclass to provide the intended behaviour
for your particular evil schemes.
)NotImplementedErrorr5   s    r0   run
Worker.runN   s     "##r3   c                   ^  T R                   R                  (       a@  T R                   R                  R                  5        H  u  pU[        R                  U'   M     [
        R                  " T R                   R                  T R                   R                  T R                   R                  S9  [
        R                  " 5         [        R                  " 5       T l        T R                   H/  n[
        R                  " U5        [
        R                  " U5        M1     T R                   H  n[
        R                  " U5        M     [
        R                  " T R                   R#                  5       5        T R                  T R                  S   /-   T l        T R&                  R                  5         T R)                  5         T R                   R*                  (       aC  U 4S jn[,        T R                   R.                     nU" T R                   R0                  US9T l        T R5                  5         T R2                  (       a  T R2                  R7                  5         T R                   R9                  T 5        ST l        T R=                  5         g)zIf you override this method in a subclass, the last statement
in the function should be to call this method with
super().init_process() so that the ``run()`` loop is initiated.
)
initgroupsr   c                 "  > TR                   R                  SU 5        STl        [        R                  " TR
                  S   S5        TR                  R                  T5        [        R                  " S5        [        R                  " S5        g )NzWorker reloading: %s modifiedF      1皙?r   )r,   infor+   oswritePIPEr"   
worker_inttimesleepr)   exit)fnamer.   s    r0   changed$Worker.init_process.<locals>.changed{   s[    =uE"
1t,##D)

3r3   )extra_filescallbackTN)r"   envitemsrF   environr   set_owner_processuidgidr@   seedpiperH   set_non_blockingclose_on_execr   r-   filenowait_fdsr,   init_signalsreloadr   reload_enginereload_extra_filesr%   	load_wsgistartpost_worker_initr#   r=   )r.   kvpsrN   reloader_clss   `      r0   init_processWorker.init_processV   s    88<<**, !

1 - 	txx||TXX\\*.((*=*=	? 			 GGI	A!!!$q! 
 Aq! 488??,-		!~5  88?? ,DHH,B,BCL(TXX5P5P29;DM 	==MM!!!$' 
r3   c                     U R                   R                  5       U l        g ! [         a  nU R                  R                  (       d  e U R
                  R                  U5         [        R                  " 5       u  p#nU R                  R                  UR                  5        [        R                  " 5       n[        R                  " XES9  [         R"                  " UR%                  5       5      U l        A S nAg ! Af = fS nAff = f)N)file)r    wsgiSyntaxErrorr"   r_   r,   	exceptionr)   exc_infor%   add_extra_filefilenameioStringIO	tracebackprint_tbr   make_fail_appgetvalue)r.   e_exc_valexc_tb	tb_strings         r0   rb   Worker.load_wsgi   s    	DI 	88??HHq!%(\\^"F,,W-=-=>KKM	""6: ..y/A/A/CD	F%	s-   " 
D7C?$BC93C?9C<<C??Dc                    U R                    H(  n[        R                  " U[        R                  5        M*     [        R                  " [        R                  U R                  5        [        R                  " [        R
                  U R                  5        [        R                  " [        R                  U R                  5        [        R                  " [        R                  U R                  5        [        R                  " [        R                  U R                  5        [        R                  " [        R                  U R                  5        [        R                  " [        R
                  S5        [        R                  " [        R                  S5        [        [        S5      (       a$  [        R                   " U R"                  S   5        g g )NFset_wakeup_fdrB   )SIGNALSsignalSIG_DFLSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterrupthasattrr   rH   )r.   rh   s     r0   r^   Worker.init_signals   s   AMM!V^^,  	fnnd&6&67fnnd&6&67fmmT%5%56foot'8'89fnnd&6&67fnnd&7&78 	FNNE2FNNE26?++  1. ,r3   c                 8    U R                   R                  5         g )N)r,   reopen_filesr.   sigframes      r0   r   Worker.handle_usr1   s    r3   c                     SU l         g )NF)r+   r   s      r0   r   Worker.handle_exit   s	    
r3   c                     SU l         U R                  R                  U 5        [        R                  " S5        [
        R                  " S5        g )NFrD   r   )r+   r"   rI   rJ   rK   r)   rL   r   s      r0   r   Worker.handle_quit   s1    
D!

3r3   c                 t    SU l         U R                  R                  U 5        [        R                  " S5        g )NFrB   )r+   r"   worker_abortr)   rL   r   s      r0   r   Worker.handle_abort   s&    
d#r3   c                    [         R                  " 5       nU=(       d    Sn[        U[        [        [
        [        [        [        [        [        [        [        [        [        [        [         45      (       GaC  SnSn[        U[        5      (       a  S[#        U5      -  nGO[        U[        5      (       a  S[#        U5      -  nGO[        U[
        5      (       a  S[#        U5      -  nGO[        U[        5      (       a  S[#        U5      -  nSnGOq[        U[        5      (       a  S[#        U5      -  nS	nGOJ[        U[        5      (       a  S[#        U5      -  nGO%[        U[        [        45      (       a3  S[#        U5      -  nU(       d  [%        US
5      (       a  UR&                  nO[        U[        5      (       a  S[#        U5      -  nO[        U[        5      (       a  SnS[#        U5      -  nSnO[        U[        5      (       a  S[#        U5      -  nOg[        U[        5      (       a  SnSnSnOK[        U[        5      (       a  S[#        U5      -  nO'[        U[         5      (       a  SnS[#        U5      -  nSnSn	U R(                  R+                  U	R-                  US   [#        U5      S95        OY[%        US5      (       a'  U R(                  R/                  SUR0                  5        OU R(                  R/                  S5        S	nSnSnUb  [         R                  " 5       U-
  n
[3        XU R4                  5      nUS   US'   [#        US   5      US'   [7        XU R4                  5      nU< SU< 3Ul        [;        W5      Ul        U R(                  R?                  XX5         [@        RB                  " X&UW5        g ! [D         a    U R(                  RG                  S5         g f = f)N) i  zBad RequestzInvalid Request Line '%s'zInvalid Method '%s'zInvalid HTTP Version '%s'z%si  i  reqzRequest Header Fields Too LargezError parsing headers: '%s'i  z'%s'	ForbiddenzRequest forbiddeni  z%Invalid request from ip={ip}: {error}r   )iperrorurizError handling request %sz$Error handling request (no URI read)zInternal Server Errorr   REMOTE_ADDRrB   REMOTE_PORT zFailed to send error message.)$r   now
isinstancer   r   r
   r   r	   r   r   r   r   r   r   r   r   r   strr   r   r,   warningformatrp   r   r   r"   r   statuslenresponse_lengthaccessr   write_error	Exceptiondebug)r.   r   clientaddrexcrequest_start
status_intreasonmesgmsgrequest_timerT   resps                r0   handle_errorWorker.handle_error   s*    xc 4/@13 "; /
   J"F#1222SX=C!566,s3x7C!3442SX=C!:;;c#h 
C!566c#h 
C11c#hC"3]!DEEc#hwsE22''CC!122c#hC!455:4s3x? 
C!122C(C!677$* 
C!566c#hC**$C( 
9CHHSZZ47#c(ZCDsE""""#>H""#IJJ,FD?#<<>M9L%c488<G%)!WGM"%(a\GM"C2D%/8DK#&t9D HHOODw=	<V> 	<HHNN:;	<s   0O	 	%O10O1c                 :    U R                   R                  S5        g )Nzworker: SIGWINCH ignored.)r,   r   )r.   r   rM   s      r0   r   Worker.handle_winch  s    23r3   )rH   r$   r   r+   r    r#   r"   r,   r'   r&   r   r   r%   r   r!   r-   r]   rn   N)__name__
__module____qualname____firstlineno__splitgetattrr   r   rH   r1   r6   r9   r=   rj   rb   r^   r   r   r   r   r   r   __static_attributes__).0xr   r   s   0000r0   r   r      s     	6;;== 12wvw{+=G D":($9v./( 
M<^4{s   A+
r   )#rt   rF   r   r)   rJ   rv   r   randomr   sslr   gunicornr   gunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   gunicorn.http.wsgir   r   gunicorn.reloaderr   gunicorn.workers.workertmpr   r    r3   r0   <module>r      sP   
 
 	  
          9 . 0A4 A4r3   