
     i&                         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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ExpectationFailed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/ias/venv/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    r1   __str__Worker.__str__C   s    txx''r4   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.   notifyr6   s    r1   r:   Worker.notifyF   s     	r4   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.
)NotImplementedErrorr6   s    r1   run
Worker.runN   s     "##r4   c                 N  ^  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*                  (       a^  U 4S jnT R&                  R-                  S5        [.        T R                   R0                     nU" T R                   R2                  US9T l        T R7                  5         T R4                  (       a  T R4                  R9                  5         T R                   R;                  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    r1   changed$Worker.init_process.<locals>.changed{   s[    =uE"
1t,##D)

3r4   z(Reloader is on. Use in development only!)extra_filescallbackTN) r#   envitemsrG   environr   set_owner_processuidgidrA   seedpiperI   set_non_blockingclose_on_execr    r.   filenowait_fdsr-   init_signalsreloadwarningr   reload_enginereload_extra_filesr&   	load_wsgistartpost_worker_initr$   r>   )r/   kvpsrO   reloader_clss   `      r1   init_processWorker.init_processV   s    88<<**, !

1 - 	txx||TXX\\*.((*=*=	? 			 GGI	A!!!$q! 
 Aq! 488??,-		!~5  88?? HHGH+DHH,B,BCL(TXX5P5P29;DM 	==MM!!!$' 
r4   c                 >    U R                   R                  5       U l        g ! [         a  nU R                  R                  (       d  e U R
                  R                  U5        U R                  b2  UR                  b%  U R                  R                  UR                  5        [        R                  " 5        n[        R                  " XS9  [        R                  " UR!                  5       5      U l        S S S 5         S nAg ! , (       d  f        S nAg = fS nAff = f)N)file)r!   wsgiSyntaxErrorr#   r`   r-   	exceptionr&   filenameadd_extra_fileioStringIO	tracebackprint_exceptionr   make_fail_appgetvalue)r/   e	tb_strings      r1   rd   Worker.load_wsgi   s    	EDI 	E88??HHq!}}(QZZ-C,,QZZ8)))!< ..y/A/A/CD	 	Es3   " 
DBD7>D5D
D	DD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_fdrC   )SIGNALSsignalSIG_DFLSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterrupthasattrr   rI   )r/   rj   s     r1   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. ,r4   c                 8    U R                   R                  5         g )N)r-   reopen_filesr/   sigframes      r1   r   Worker.handle_usr1   s    r4   c                     SU l         g )NF)r,   r   s      r1   r   Worker.handle_exit   s	    
r4   c                     SU l         U R                  R                  U 5        [        R                  " S5        [
        R                  " S5        g )NFrE   r   )r,   r#   rJ   rK   rL   r*   rM   r   s      r1   r   Worker.handle_quit   s1    
D!

3r4   c                 t    SU l         U R                  R                  U 5        [        R                  " S5        g )NFrC   )r,   r#   worker_abortr*   rM   r   s      r1   r   Worker.handle_abort   s&    
d#r4   c                    [         R                  " 5       nU=(       d    Sn[        U[        [        [
        [        [        [        [        [        [        [        [        [        [        [         ["        45      (       Gah  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O[        U[        5      (       a  S[%        U5      -  nS	nGOo[        U[        5      (       a  S[%        U5      -  nGOJ[        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[%        U5      nS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        O['        US5      (       aC  ['        US5      (       a2  U R*                  R1                  SUR2                  UR4                  5        OS['        US5      (       a'  U R*                  R1                  SUR4                  5        OU R*                  R1                  S5        S	nSnSnUb  [         R                  " 5       U-
  n
[7        XU R8                  5      nUS   US'   [%        US   5      US '   [;        XU R8                  5      nU< S!U< 3Ul        [?        W5      Ul         U R*                  RC                  XX5         [D        RF                  " X&UW5        g ! [H         a    U R*                  RK                  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Expectation Failedi  z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urimethodzError handling request %s %szError handling request %sz$Error handling request (no URI read)zInternal Server Errorr   REMOTE_ADDRrC   REMOTE_PORT zFailed to send error message.)&r   now
isinstancer   r   r
   r   r	   r   r   r   r   r   r   r   r   r   r   strr   r   r-   ra   formatrr   r   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_timerU   resps                r1   handle_errorWorker.handle_error   s    xc 4/@13 "; /3D
   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!233-3x 
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""wsH'='=""#A3::swwWe$$""#>H""#IJJ,FD?#<<>M9L%c488<G%)!WGM"%(a\GM"C2D%/8DK#&t9D HHOODw=	<V> 	<HHNN:;	<s   .Q %Q/.Q/c                 :    U R                   R                  S5        g )Nzworker: SIGWINCH ignored.)r-   r   )r/   r   rN   s      r1   r   Worker.handle_winch  s    23r4   )rI   r%   r   r,   r!   r$   r#   r-   r(   r'   r   r   r&   r    r"   r.   r^   rp   N)__name__
__module____qualname____firstlineno__splitgetattrr   r   rI   r2   r7   r:   r>   rl   rd   r_   r   r   r   r   r   r   __static_attributes__).0xr   r   s   0000r1   r   r      s     	6;;== 12wvw{+=G D":($:xE /( 
S<j4{s   A+
r   )$ru   rG   r   r*   rK   rw   r   randomr   sslr   gunicornr   gunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   gunicorn.http.wsgir   r   gunicorn.reloaderr   gunicorn.workers.workertmpr   r    r4   r1   <module>r      sP   
 
 	  
          9 . 0A4 A4r4   