
    Nwg#&                         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 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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	            L/var/www/horilla/myenv/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    r/   __str__zWorker.__str__C   s    txx''r1   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,   notifyr3   s    r/   r6   zWorker.notifyF   s     	r1   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.
        )NotImplementedErrorr3   s    r/   runz
Worker.runN   s     "##r1   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*                  rE fd}t,         j                   j.                     } | j                   j0                  |       _         j5                           j2                  r j2                  j7                           j                   j9                          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    r/   changedz$Worker.init_process.<locals>.changed{   s[    =uE"
1t,##D)

3r1   )extra_filescallbackTN)r!   envitemsrA   environr   set_owner_processuidgidr;   seedpiperC   set_non_blockingclose_on_execr   r,   filenowait_fdsr+   init_signalsreloadr   reload_enginereload_extra_filesr$   	load_wsgistartpost_worker_initr"   r9   )r-   kvpsrI   reloader_clss   `      r/   init_processzWorker.init_processV   s    88<<**, "1 !

1" 	txx||TXX\\*.((*=*=	? 			 GGI	 	"A!!!$q!	"
  	"Aq!	"488??,-		!~5  88?? ,DHH,B,BCL(TXX5P5P29;DM 	==MM!!!$' 
r1   c                    	 | j                   j                         | _        y # t        $ r}| j                  j                  s | j
                  j                  |       	 t        j                         \  }}}| j                  j                  |j                         t        j                         }t        j                  ||       t!        j"                  |j%                               | _        ~n# ~w xY wY d }~y d }~ww xY w)N)file)r   wsgiSyntaxErrorr!   rY   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         r/   r\   zWorker.load_wsgi   s    	DI 	88??HHq!%(\\^"7F,,W-=-=>KKM	""6	: ..y/A/A/CD	FF%	s-   " 	D 2C;BC0.C;0C33C;;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hasattrry   rC   )r-   rb   s     r/   rX   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. ,r1   c                 8    | j                   j                          y )N)r+   reopen_filesr-   sigframes      r/   r   zWorker.handle_usr1   s    r1   c                     d| _         y )NF)r*   r   s      r/   r   zWorker.handle_exit   s	    
r1   c                     d| _         | j                  j                  |        t        j                  d       t        j                  d       y )NFr?   r   )r*   r!   rD   rE   rF   r(   rG   r   s      r/   r~   zWorker.handle_quit   s1    
D!

3r1   c                 r    d| _         | j                  j                  |        t        j                  d       y )NFr=   )r*   r!   worker_abortr(   rG   r   s      r/   r   zWorker.handle_abort   s&    
d#r1   c                 4   t        j                         }|xs d}t        |t        t        t
        t        t        t        t        t        t        t        t        t        t        t         f      rd}d}t        |t              rdt#        |      z  }nt        |t              rdt#        |      z  }n{t        |t
              rdt#        |      z  }n[t        |t              rdt#        |      z  }d}n9t        |t              rdt#        |      z  }d	}nt        |t              rdt#        |      z  }nt        |t        t        f      r)dt#        |      z  }|st%        |d
      r|j&                  }nt        |t              rdt#        |      z  }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(                  j/                  d|j0                         n| j(                  j/                  d       d	}d}d}|t        j                         |z
  }
t3        ||| j4                        }|d   |d<   t#        |d         |d<   t7        ||| j4                        }|d||_        t;              |_        | j(                  j?                  ||||
       	 tA        jB                  |||       y # tD        $ r | j(                  jG                  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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   strr   r   r+   warningformatri   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_timerN   resps                r/   handle_errorzWorker.handle_error   s    xc 4/@13 "; /
  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!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   M0 0$NNc                 :    | j                   j                  d       y )Nzworker: SIGWINCH ignored.)r+   r   )r-   r   rH   s      r/   r   zWorker.handle_winch  s    23r1   N)__name__
__module____qualname__splitgetattrr{   rz   rC   r0   r4   r6   r9   rd   r\   rX   r   r   r~   r   r   r   ).0xr   r{   s   0000r/   r   r      s     	6;;= wvw{+ G D":($9v./( 
M<^4{s   A$
r   )#rm   rA   r{   r(   rE   ro   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    r1   r/   <module>r      sP   
 
 	  
          9 . 0A4 A4r1   