
    AҐi&                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlm Z  d d	l!m"Z"  G d
 d      Z#y)    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                       e Zd Zdj                         D  cg c]  }t	        t
        d|z         c}}}} Zg Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zyc c}}}} w )Workerz+ABRT HUP QUIT INT TERM USR1 USR2 WINCH CHLDzSIG%sc                 x   || _         d| _        || _        || _        || _        || _        || _        d| _        d| _        d| _	        d| _
        |j                  dkD  r+t        d|j                        }|j                  |z   | _        nt        j                  | _        d| _        || _        t%        |      | _        y)z        This 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	            N/var/www/descvideos/venv/lib/python3.12/site-packages/gunicorn/workers/base.py__init__zWorker.__init__&   s     	aQ 7 78F # 0 06 9D #D
S>    c                      d| j                   z  S )Nz<Worker %s>)r   r.   s    r0   __str__zWorker.__str__C   s    txx''r2   c                 8    | j                   j                          y)z        Your 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-   notifyr4   s    r0   r7   zWorker.notifyF   s     	r2   c                     t               )z        This 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.
        )NotImplementedErrorr4   s    r0   runz
Worker.runN   s     "##r2   c                 "     j                   j                  r? j                   j                  j                         D ]  \  }}|t        j                  |<    t        j                   j                   j                   j                   j                   j                   j                         t        j                          t        j                          _         j                  D ],  }t        j                  |       t        j                  |       .  j                  D ]  }t        j                  |        t        j                   j                   j#                                 j                   j                  d   gz    _         j&                  j                           j)                           j                   j*                  r` fd} j&                  j-                  d       t.         j                   j0                     } | j                   j2                  |       _         j7                           j4                  r j4                  j9                           j                   j;                          d _         j?                          y)z        If 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                    j                   j                  d|        d_        t        j                  j
                  d   d       j                  j                         t        j                  d       t        j                  d       y )NzWorker reloading: %s modifiedF      1皙?r   )r,   infor+   oswritePIPEr"   
worker_inttimesleepr)   exit)fnamer.   s    r0   changedz$Worker.init_process.<locals>.changed{   s[    =uE"
1t,##D)

3r2   z(Reloader is on. Use in development only!)extra_filescallbackTN) r"   envitemsrB   environr   set_owner_processuidgidr<   seedpiperD   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srJ   reloader_clss   `      r0   init_processzWorker.init_processV   s    88<<**, "1 !

1" 	txx||TXX\\*.((*=*=	? 			 GGI	 	"A!!!$q!	"
  	"Aq!	"488??,-		!~5  88?? HHGH+DHH,B,BCL(TXX5P5P29;DM 	==MM!!!$' 
r2   c                 *   	 | j                   j                         | _        y # t        $ r}| j                  j                  s | j
                  j                  |       | j                  1|j                  %| j                  j                  |j                         t        j                         5 }t        j                  ||       t        j                  |j!                               | _        d d d        n# 1 sw Y   nxY wY d }~y Y d }~y d }~ww xY w)N)file)r    wsgiSyntaxErrorr"   rZ   r,   	exceptionr%   filenameadd_extra_fileioStringIO	tracebackprint_exceptionr   make_fail_appgetvalue)r.   e	tb_strings      r0   r^   zWorker.load_wsgi   s    	EDI 	E88??HHq!}}(QZZ-C,,QZZ8 E)))!)< ..y/A/A/CD	E E E E E	Es.   " 	DBD.A C7.	D7D 	<DDc                    | j                   D ]&  }t        j                  |t        j                         ( t        j                  t        j                  | j                         t        j                  t        j
                  | j                         t        j                  t        j                  | j                         t        j                  t        j                  | j                         t        j                  t        j                  | j                         t        j                  t        j                  | j                         t        j                  t        j
                  d       t        j                  t        j                  d       t        t        d      r#t        j                   | j"                  d          y y )NFset_wakeup_fdr>   )SIGNALSsignalSIG_DFLSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterrupthasattrrw   rD   )r.   rd   s     r0   rY   z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. ,r2   c                 8    | j                   j                          y )N)r,   reopen_filesr.   sigframes      r0   r   zWorker.handle_usr1   s    r2   c                     d| _         y )NF)r+   r   s      r0   r~   zWorker.handle_exit   s	    
r2   c                     d| _         | j                  j                  |        t        j                  d       t        j                  d       y )NFr@   r   )r+   r"   rE   rF   rG   r)   rH   r   s      r0   r|   zWorker.handle_quit   s1    
D!

3r2   c                 r    d| _         | j                  j                  |        t        j                  d       y )NFr>   )r+   r"   worker_abortr)   rH   r   s      r0   r   zWorker.handle_abort   s&    
d#r2   c                    t        j                         }|xs d}t        |t        t        t
        t        t        t        t        t        t        t        t        t        t        t         t"        f      rd}d}t        |t              rdt%        |      z  }nt        |t              rdt%        |      z  }nt        |t
              rdt%        |      z  }n|t        |t              rdt%        |      z  }d}nZt        |t              rdt%        |      z  }d	}n8t        |t              rdt%        |      z  }nt        |t        t        f      r)dt%        |      z  }|st'        |d
      r|j(                  }nt        |t              rdt%        |      z  }nt        |t               rd}t%        |      }d}nt        |t              rd}dt%        |      z  }d}nwt        |t              rdt%        |      z  }nXt        |t              rd}d}d}nAt        |t              rdt%        |      z  }n"t        |t"              rd}dt%        |      z  }d}d}	| j*                  j-                  |	j/                  |d   t%        |                   nTt'        |d      r'| j*                  j1                  d|j2                         n| j*                  j1                  d       d	}d}d}|t        j                         |z
  }
t5        ||| j6                        }|d   |d<   t%        |d         |d<   t9        ||| j6                        }|d||_        t=              |_        | j*                  jA                  ||||
       	 tC        jD                  |||       y # tF        $ r | j*                  jI                  d        Y y w xY w)!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urizError handling request %sz$Error handling request (no URI read)zInternal Server Errorr   REMOTE_ADDRr>   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,   r[   formatrk   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_timerO   resps                r0   handle_errorzWorker.handle_error   s"    xc 4/@13 "; /3D
  J"F#122SX=C!56,s3x7C!342SX=C!:;c#h 
C!56c#h 
C1c#hC"3]!DEc#hwsE2''CC!12c#hC!23-3x 
C!45:4s3x? 
C!12C(C!67$* 
C!56c#hC*$C( 
9CHHSZZ47#c(ZCDsE"""#>H""#IJJ,FD?#<<>M9L%c6488<G%)!WGM"%(a\GM"C2D%/8DK#&t9D HHOOD#w=	<VZ> 	<HHNN:;	<s   =N $N=<N=c                 :    | j                   j                  d       y )Nzworker: SIGWINCH ignored.)r,   r   )r.   r   rI   s      r0   r   zWorker.handle_winch  s    23r2   N)__name__
__module____qualname__splitgetattrry   rx   rD   r1   r5   r7   r:   rf   r^   rY   r   r~   r|   r   r   r   ).0xr   ry   s   0000r0   r   r      s     	6;;= wvw{+ G D":($:xE /( 
Q<f4ws   A$
r   )$rn   rB   ry   r)   rF   rp   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    r2   r0   <module>r      sP   
 
 	  
          9 . 04 4r2   